Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e2afc0f2 authored by Jeff Sharkey's avatar Jeff Sharkey
Browse files

Data usage axis grow/shrink, other fixes.

When dragging vertical sweeps near edges, grow or shrink axis scale
to give users access to larger limits.  Triggers 10% for each 250ms
that user continues holding.  Change axis math to support arbitrary
ranges beyond [0,5GB].

Show "empty" message when no application details found.  Added strings
that didn't appear in default language.  Better sweep margins using
dip instead of scale units.  Format time ranges in local time instead
of UTC.  Only show dashed estimate when it would reach near warning
or limit.  Extend app usage series until "now" when buckets missing.

Bug: 5096685, 5092538, 5058158, 5058114, 5058024, 4643457
Change-Id: I45cf33f7f3baeba1bfa5b21f31cb0a12006f62fa
parent a861ebff
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@
        android:layout_height="wrap_content"
        settings:sweepDrawable="@drawable/data_sweep_warning"
        settings:followAxis="vertical"
        settings:neighborMargin="40dip"
        settings:labelSize="60dip"
        settings:labelTemplate="@string/data_usage_sweep_warning"
        settings:labelColor="#f7931d" />
@@ -66,6 +67,7 @@
        android:layout_height="wrap_content"
        settings:sweepDrawable="@drawable/data_sweep_limit"
        settings:followAxis="vertical"
        settings:neighborMargin="40dip"
        settings:labelSize="60dip"
        settings:labelTemplate="@string/data_usage_sweep_limit"
        settings:labelColor="#c01a2c" />
@@ -75,13 +77,15 @@
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        settings:sweepDrawable="@drawable/data_sweep_left"
        settings:followAxis="horizontal" />
        settings:followAxis="horizontal"
        settings:neighborMargin="5dip" />

    <com.android.settings.widget.ChartSweepView
        android:id="@+id/sweep_right"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        settings:sweepDrawable="@drawable/data_sweep_right"
        settings:followAxis="horizontal" />
        settings:followAxis="horizontal"
        settings:neighborMargin="5dip" />

</com.android.settings.widget.DataUsageChartView>
+12 −0
Original line number Diff line number Diff line
@@ -45,6 +45,18 @@
        android:paddingBottom="8dip"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@android:id/empty"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:paddingLeft="16dip"
        android:paddingRight="16dip"
        android:paddingTop="8dip"
        android:paddingBottom="8dip"
        android:text="@string/data_usage_empty"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <include layout="@layout/data_usage_detail" />

</LinearLayout>
+1 −0
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@
            <enum name="horizontal" value="0" />
            <enum name="vertical" value="1" />
        </attr>
        <attr name="neighborMargin" format="dimension" />
        <attr name="labelSize" format="dimension" />
        <attr name="labelTemplate" format="reference" />
        <attr name="labelColor" format="color" />
+7 −1
Original line number Diff line number Diff line
@@ -230,6 +230,8 @@
    <string name="bluetooth_disconnect_title">Disconnect?</string>
    <!-- Bluetooth settings.  Message for disconnecting from all profiles of a bluetooth device. [CHAR LIMIT=NONE] -->
    <string name="bluetooth_disconnect_all_profiles">This will end your connection with:&lt;br>&lt;b><xliff:g id="device_name">%1$s</xliff:g>&lt;/b></string>
    <!-- Bluetooth settings.  Message for disconnecting from all profiles of a bluetooth device. [CHAR LIMIT=NONE] -->
    <string name="bluetooth_disconnect_blank">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> will be disconnected."</string>
    <!-- Bluetooth settings.  Message when connected to a device -->
    <string name="bluetooth_connected">Connected</string>
    <!-- Bluetooth settings.  Message when a device is disconnected -->
@@ -1788,8 +1790,10 @@
    <string name="usb_mtp_summary">Lets you transfer media files on Windows, or using Android File Transfer on Mac (see www.android.com/filetransfer)</string>
    <!-- Storage setting.  Title for PTP checkbox [CHAR LIMIT=30]-->
    <string name="usb_ptp_title">Camera (PTP)</string>
    <!-- Storage setting.  Summary for PTP checkbox [CHAR LIMIT=NONE]-->
    <!-- Storage setting.  Label for installer CD [CHAR LIMIT=30]-->
    <string name="usb_ptp_summary">Lets you transfer photos using camera software, and transfer any files on computers that don\'t support MTP</string>
    <!-- Storage setting.  Summary for PTP checkbox [CHAR LIMIT=NONE]-->
    <string name="usb_label_installer_cd">"Install file-transfer tools"</string>

    <!-- Phone info screen, section titles: -->
    <string name="battery_status_title">Battery status</string>
@@ -3409,6 +3413,8 @@ found in the list of installed applications.</string>
    <string name="data_usage_change_cycle">Change cycle\u2026</string>
    <!-- Body of dialog prompting user to change numerical day of month that data usage cycle should reset. [CHAR LIMIT=64] -->
    <string name="data_usage_pick_cycle_day">Day of month to reset data usage cycle:</string>
    <!-- Label shown when no applications used data during selected time period. [CHAR LIMIT=48] -->
    <string name="data_usage_empty">No applications used data during this period.</string>

    <!-- Checkbox label that will disable mobile network data connection when user-defined limit is reached. [CHAR LIMIT=32] -->
    <string name="data_usage_disable_mobile_limit">Disable mobile data at limit</string>
+15 −6
Original line number Diff line number Diff line
@@ -182,6 +182,7 @@ public class DataUsageSummary extends Fragment {

    private DataUsageChartView mChart;
    private TextView mUsageSummary;
    private TextView mEmpty;

    private View mAppDetail;
    private TextView mAppTitle;
@@ -305,6 +306,7 @@ public class DataUsageSummary extends Fragment {
        }

        mUsageSummary = (TextView) mHeader.findViewById(R.id.usage_summary);
        mEmpty = (TextView) mHeader.findViewById(android.R.id.empty);

        // only assign layout transitions once first layout is finished
        mListView.getViewTreeObserver().addOnGlobalLayoutListener(mFirstLayoutListener);
@@ -986,7 +988,7 @@ public class DataUsageSummary extends Fragment {

        final long totalBytes = entry != null ? entry.rxBytes + entry.txBytes : 0;
        final String totalPhrase = Formatter.formatFileSize(context, totalBytes);
        final String rangePhrase = formatDateRangeUtc(context, start, end);
        final String rangePhrase = formatDateRange(context, start, end, null);

        mUsageSummary.setText(
                getString(R.string.data_usage_total_during_range, totalPhrase, rangePhrase));
@@ -1002,11 +1004,18 @@ public class DataUsageSummary extends Fragment {
        /** {@inheritDoc} */
        public void onLoadFinished(Loader<NetworkStats> loader, NetworkStats data) {
            mAdapter.bindStats(data);
            updateEmptyVisible();
        }

        /** {@inheritDoc} */
        public void onLoaderReset(Loader<NetworkStats> loader) {
            mAdapter.bindStats(null);
            updateEmptyVisible();
        }

        private void updateEmptyVisible() {
            final boolean isEmpty = mAdapter.isEmpty() && !isAppDetailMode();
            mEmpty.setVisibility(isEmpty ? View.VISIBLE : View.GONE);
        }
    };

@@ -1063,7 +1072,7 @@ public class DataUsageSummary extends Fragment {
        }

        public CycleItem(Context context, long start, long end) {
            this.label = formatDateRangeUtc(context, start, end);
            this.label = formatDateRange(context, start, end, Time.TIMEZONE_UTC);
            this.start = start;
            this.end = end;
        }
@@ -1078,7 +1087,7 @@ public class DataUsageSummary extends Fragment {
    private static final java.util.Formatter sFormatter = new java.util.Formatter(
            sBuilder, Locale.getDefault());

    private static String formatDateRangeUtc(Context context, long start, long end) {
    private static String formatDateRange(Context context, long start, long end, String timezone) {
        synchronized (sBuilder) {
            int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_MONTH;
            if (Time.getJulianDay(start, 0) == Time.getJulianDay(end, 0)) {
@@ -1087,8 +1096,8 @@ public class DataUsageSummary extends Fragment {
            }

            sBuilder.setLength(0);
            return DateUtils.formatDateRange(
                    context, sFormatter, start, end, flags, Time.TIMEZONE_UTC).toString();
            return DateUtils
                    .formatDateRange(context, sFormatter, start, end, flags, timezone).toString();
        }
    }

@@ -1197,7 +1206,7 @@ public class DataUsageSummary extends Fragment {

        @Override
        public long getItemId(int position) {
            return position;
            return mItems.get(position).uid;
        }

        @Override
Loading