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

Commit f29a071f authored by Lifu Tang's avatar Lifu Tang
Browse files

Cache summary text to avoid flickering

Bug: 231927706
Test: build, flash, run unit test, then test manually.
Change-Id: Ia0585302c5cf86cd6035315fa750c71b9df55237
parent 695a47e4
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -31,9 +31,9 @@ public class TopLevelLocationPreferenceController extends BasePreferenceControll
    private static final IntentFilter INTENT_FILTER_LOCATION_MODE_CHANGED =
            new IntentFilter(LocationManager.MODE_CHANGED_ACTION);
    private final LocationManager mLocationManager;
    /** Total number of apps that has location permission. */
    private int mNumTotal = -1;
    private int mNumTotalLoading = 0;
    /** Summary text. */
    private static String sSummary = null;
    private BroadcastReceiver mReceiver;
    private Preference mPreference;
    private AtomicInteger loadingInProgress = new AtomicInteger(0);
@@ -51,12 +51,11 @@ public class TopLevelLocationPreferenceController extends BasePreferenceControll
    @Override
    public CharSequence getSummary() {
        if (mLocationManager.isLocationEnabled()) {
            if (mNumTotal == -1) {
                return mContext.getString(R.string.location_settings_loading_app_permission_stats);
            if (sSummary == null) {
                sSummary = mContext.getString(
                        R.string.location_settings_loading_app_permission_stats);
            }
            return mContext.getResources().getQuantityString(
                    R.plurals.location_settings_summary_location_on,
                    mNumTotal, mNumTotal);
            return sSummary;
        } else {
            return mContext.getString(R.string.location_settings_summary_location_off);
        }
@@ -64,7 +63,8 @@ public class TopLevelLocationPreferenceController extends BasePreferenceControll

    @VisibleForTesting
    void setLocationAppCount(int numApps) {
        mNumTotal = numApps;
        sSummary = mContext.getResources().getQuantityString(
                R.plurals.location_settings_summary_location_on, numApps, numApps);
        refreshSummary(mPreference);
    }

+18 −8
Original line number Diff line number Diff line
@@ -56,31 +56,41 @@ public class TopLevelLocationPreferenceControllerTest {
    }

    @Test
    public void getSummary_whenLocationIsOn_shouldShowLoadingString() {
    public void getSummary_whenLocationIsOn_shouldPreservePreviousText() {
        final int locationAppCount = 5;
        // Retrieve summary text once.
        mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle());
        mController.setLocationAppCount(locationAppCount);
        mController.getSummary();
        // Turn off location.
        mLocationManager.setLocationEnabledForUser(false, android.os.Process.myUserHandle());
        // Turn on location again and check if the previous summary text is still cached.
        mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle());
        assertThat(mController.getSummary()).isEqualTo(
                mContext.getString(R.string.location_settings_loading_app_permission_stats));
                mContext.getResources().getQuantityString(
                        R.plurals.location_settings_summary_location_on, locationAppCount,
                        locationAppCount));
    }

    @Test
    public void getSummary_whenLocationAppCountIsOne_shouldShowSingularString() {
        final int LOCATION_APP_COUNT = 1;
        final int locationAppCount = 1;
        mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle());
        mController.setLocationAppCount(LOCATION_APP_COUNT);
        mController.setLocationAppCount(locationAppCount);
        assertThat(mController.getSummary()).isEqualTo(
                mContext.getResources().getQuantityString(
                        R.plurals.location_settings_summary_location_on,
                        LOCATION_APP_COUNT, LOCATION_APP_COUNT));
                        locationAppCount, locationAppCount));
    }

    @Test
    public void getSummary_whenLocationAppCountIsGreaterThanOne_shouldShowPluralString() {
        final int LOCATION_APP_COUNT = 5;
        final int locationAppCount = 5;
        mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle());
        mController.setLocationAppCount(LOCATION_APP_COUNT);
        mController.setLocationAppCount(locationAppCount);
        assertThat(mController.getSummary()).isEqualTo(
                mContext.getResources().getQuantityString(
                        R.plurals.location_settings_summary_location_on,
                        LOCATION_APP_COUNT, LOCATION_APP_COUNT));
                        locationAppCount, locationAppCount));
    }
}
 No newline at end of file