From 3e9ab54f76f53c3ee163f5d4d6639354496f11a1 Mon Sep 17 00:00:00 2001 From: Maggie Date: Fri, 8 Dec 2017 11:30:02 -0800 Subject: [PATCH] Display "Recent Location Requests" in order A list of apps with recent location requests is displayed under Settings -> Security & Location -> Location. The apps were sorted in alphabetical order. This CL changes the behavior and displays the apps in original order from RecentLocationApps.getAppList(). Bug: 70350519 Test: Robolectric Test: manual Change-Id: I0fc1ce307b9519f3f324db220b6e2b32ed71cc2f --- ...ntLocationRequestPreferenceController.java | 9 +++-- ...cationRequestPreferenceControllerTest.java | 39 ++++++++++--------- 2 files changed, 27 insertions(+), 21 deletions(-) diff --git a/src/com/android/settings/location/RecentLocationRequestPreferenceController.java b/src/com/android/settings/location/RecentLocationRequestPreferenceController.java index 461f6e36a75..8cbe95c1d9a 100644 --- a/src/com/android/settings/location/RecentLocationRequestPreferenceController.java +++ b/src/com/android/settings/location/RecentLocationRequestPreferenceController.java @@ -32,6 +32,7 @@ import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.location.RecentLocationApps; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; public class RecentLocationRequestPreferenceController extends LocationBasePreferenceController { @@ -107,15 +108,17 @@ public class RecentLocationRequestPreferenceController extends LocationBasePrefe final Context prefContext = preference.getContext(); final List recentLocationRequests = - mRecentLocationApps.getAppList(); + mRecentLocationApps.getAppListSorted(); final List recentLocationPrefs = new ArrayList<>(recentLocationRequests.size()); for (final RecentLocationApps.Request request : recentLocationRequests) { recentLocationPrefs.add(createAppPreference(prefContext, request)); } if (recentLocationRequests.size() > 0) { - LocationSettings.addPreferencesSorted( - recentLocationPrefs, mCategoryRecentLocationRequests); + // Add preferences to container in original order (already sorted by recency). + for (Preference entry : recentLocationPrefs) { + mCategoryRecentLocationRequests.addPreference(entry); + } } else { // If there's no item to display, add a "No recent apps" item. final Preference banner = createAppPreference(prefContext); diff --git a/tests/robotests/src/com/android/settings/location/RecentLocationRequestPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/location/RecentLocationRequestPreferenceControllerTest.java index a1268d01399..a9794c277e4 100644 --- a/tests/robotests/src/com/android/settings/location/RecentLocationRequestPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/location/RecentLocationRequestPreferenceControllerTest.java @@ -15,8 +15,6 @@ */ package com.android.settings.location; -import static com.google.common.truth.Truth.assertThat; - import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.argThat; @@ -24,7 +22,6 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -36,7 +33,6 @@ import android.support.v7.preference.PreferenceCategory; import android.support.v7.preference.PreferenceScreen; import android.text.TextUtils; import android.util.FeatureFlagUtils; - import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.TestConfig; @@ -48,19 +44,19 @@ import com.android.settings.widget.AppPreference; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.location.RecentLocationApps; import com.android.settingslib.location.RecentLocationApps.Request; - +import java.util.ArrayList; +import java.util.List; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentMatcher; +import org.mockito.InOrder; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; -import java.util.ArrayList; -import java.util.List; - @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class RecentLocationRequestPreferenceControllerTest { @@ -111,7 +107,7 @@ public class RecentLocationRequestPreferenceControllerTest { @Test public void updateState_noRecentRequest_shouldRemoveAllAndAddBanner() { - doReturn(new ArrayList<>()).when(mRecentLocationApps).getAppList(); + doReturn(new ArrayList<>()).when(mRecentLocationApps).getAppListSorted(); mController.displayPreference(mScreen); mController.updateState(mCategory); @@ -128,18 +124,25 @@ public class RecentLocationRequestPreferenceControllerTest { final Request req2 = mock(Request.class); requests.add(req1); requests.add(req2); - doReturn(requests).when(mRecentLocationApps).getAppList(); - final String title = "testTitle"; - final AppPreference preference = mock(AppPreference.class); - when(preference.getTitle()).thenReturn(title); - doReturn(preference).when(mController) - .createAppPreference(any(Context.class), any(Request.class)); + doReturn(requests).when(mRecentLocationApps).getAppListSorted(); + final String title1 = "testTitle1"; + final String title2 = "testTitle2"; + final AppPreference preference1 = mock(AppPreference.class); + final AppPreference preference2 = mock(AppPreference.class); + when(preference1.getTitle()).thenReturn(title1); + when(preference2.getTitle()).thenReturn(title2); + doReturn(preference1).when(mController) + .createAppPreference(any(Context.class), eq(req1)); + doReturn(preference2).when(mController) + .createAppPreference(any(Context.class), eq(req2)); mController.displayPreference(mScreen); - mController.updateState(mCategory); verify(mCategory).removeAll(); - verify(mCategory, times(2)).addPreference(argThat(titleMatches(title))); + // Verifies two preferences are added in original order + InOrder inOrder = Mockito.inOrder(mCategory); + inOrder.verify(mCategory).addPreference(argThat(titleMatches(title1))); + inOrder.verify(mCategory).addPreference(argThat(titleMatches(title2))); } @Test @@ -162,7 +165,7 @@ public class RecentLocationRequestPreferenceControllerTest { final List requests = new ArrayList<>(); final Request request = mock(Request.class); requests.add(request); - doReturn(requests).when(mRecentLocationApps).getAppList(); + doReturn(requests).when(mRecentLocationApps).getAppListSorted(); final AppPreference preference = new AppPreference(mContext); doReturn(preference).when(mController).createAppPreference(any(Context.class)); mController.displayPreference(mScreen);