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
This commit is contained in:
@@ -32,6 +32,7 @@ import com.android.settingslib.core.lifecycle.Lifecycle;
|
|||||||
import com.android.settingslib.location.RecentLocationApps;
|
import com.android.settingslib.location.RecentLocationApps;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class RecentLocationRequestPreferenceController extends LocationBasePreferenceController {
|
public class RecentLocationRequestPreferenceController extends LocationBasePreferenceController {
|
||||||
@@ -107,15 +108,17 @@ public class RecentLocationRequestPreferenceController extends LocationBasePrefe
|
|||||||
|
|
||||||
final Context prefContext = preference.getContext();
|
final Context prefContext = preference.getContext();
|
||||||
final List<RecentLocationApps.Request> recentLocationRequests =
|
final List<RecentLocationApps.Request> recentLocationRequests =
|
||||||
mRecentLocationApps.getAppList();
|
mRecentLocationApps.getAppListSorted();
|
||||||
|
|
||||||
final List<Preference> recentLocationPrefs = new ArrayList<>(recentLocationRequests.size());
|
final List<Preference> recentLocationPrefs = new ArrayList<>(recentLocationRequests.size());
|
||||||
for (final RecentLocationApps.Request request : recentLocationRequests) {
|
for (final RecentLocationApps.Request request : recentLocationRequests) {
|
||||||
recentLocationPrefs.add(createAppPreference(prefContext, request));
|
recentLocationPrefs.add(createAppPreference(prefContext, request));
|
||||||
}
|
}
|
||||||
if (recentLocationRequests.size() > 0) {
|
if (recentLocationRequests.size() > 0) {
|
||||||
LocationSettings.addPreferencesSorted(
|
// Add preferences to container in original order (already sorted by recency).
|
||||||
recentLocationPrefs, mCategoryRecentLocationRequests);
|
for (Preference entry : recentLocationPrefs) {
|
||||||
|
mCategoryRecentLocationRequests.addPreference(entry);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// If there's no item to display, add a "No recent apps" item.
|
// If there's no item to display, add a "No recent apps" item.
|
||||||
final Preference banner = createAppPreference(prefContext);
|
final Preference banner = createAppPreference(prefContext);
|
||||||
|
@@ -15,8 +15,6 @@
|
|||||||
*/
|
*/
|
||||||
package com.android.settings.location;
|
package com.android.settings.location;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
|
||||||
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
import static org.mockito.ArgumentMatchers.argThat;
|
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.doReturn;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
import static org.mockito.Mockito.times;
|
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
@@ -36,7 +33,6 @@ import android.support.v7.preference.PreferenceCategory;
|
|||||||
import android.support.v7.preference.PreferenceScreen;
|
import android.support.v7.preference.PreferenceScreen;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.FeatureFlagUtils;
|
import android.util.FeatureFlagUtils;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.SettingsActivity;
|
import com.android.settings.SettingsActivity;
|
||||||
import com.android.settings.TestConfig;
|
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.core.lifecycle.Lifecycle;
|
||||||
import com.android.settingslib.location.RecentLocationApps;
|
import com.android.settingslib.location.RecentLocationApps;
|
||||||
import com.android.settingslib.location.RecentLocationApps.Request;
|
import com.android.settingslib.location.RecentLocationApps.Request;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.mockito.ArgumentMatcher;
|
import org.mockito.ArgumentMatcher;
|
||||||
|
import org.mockito.InOrder;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.Mockito;
|
||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
import org.robolectric.RuntimeEnvironment;
|
import org.robolectric.RuntimeEnvironment;
|
||||||
import org.robolectric.annotation.Config;
|
import org.robolectric.annotation.Config;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@RunWith(SettingsRobolectricTestRunner.class)
|
@RunWith(SettingsRobolectricTestRunner.class)
|
||||||
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
|
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
|
||||||
public class RecentLocationRequestPreferenceControllerTest {
|
public class RecentLocationRequestPreferenceControllerTest {
|
||||||
@@ -111,7 +107,7 @@ public class RecentLocationRequestPreferenceControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void updateState_noRecentRequest_shouldRemoveAllAndAddBanner() {
|
public void updateState_noRecentRequest_shouldRemoveAllAndAddBanner() {
|
||||||
doReturn(new ArrayList<>()).when(mRecentLocationApps).getAppList();
|
doReturn(new ArrayList<>()).when(mRecentLocationApps).getAppListSorted();
|
||||||
mController.displayPreference(mScreen);
|
mController.displayPreference(mScreen);
|
||||||
|
|
||||||
mController.updateState(mCategory);
|
mController.updateState(mCategory);
|
||||||
@@ -128,18 +124,25 @@ public class RecentLocationRequestPreferenceControllerTest {
|
|||||||
final Request req2 = mock(Request.class);
|
final Request req2 = mock(Request.class);
|
||||||
requests.add(req1);
|
requests.add(req1);
|
||||||
requests.add(req2);
|
requests.add(req2);
|
||||||
doReturn(requests).when(mRecentLocationApps).getAppList();
|
doReturn(requests).when(mRecentLocationApps).getAppListSorted();
|
||||||
final String title = "testTitle";
|
final String title1 = "testTitle1";
|
||||||
final AppPreference preference = mock(AppPreference.class);
|
final String title2 = "testTitle2";
|
||||||
when(preference.getTitle()).thenReturn(title);
|
final AppPreference preference1 = mock(AppPreference.class);
|
||||||
doReturn(preference).when(mController)
|
final AppPreference preference2 = mock(AppPreference.class);
|
||||||
.createAppPreference(any(Context.class), any(Request.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.displayPreference(mScreen);
|
||||||
|
|
||||||
mController.updateState(mCategory);
|
mController.updateState(mCategory);
|
||||||
|
|
||||||
verify(mCategory).removeAll();
|
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
|
@Test
|
||||||
@@ -162,7 +165,7 @@ public class RecentLocationRequestPreferenceControllerTest {
|
|||||||
final List<RecentLocationApps.Request> requests = new ArrayList<>();
|
final List<RecentLocationApps.Request> requests = new ArrayList<>();
|
||||||
final Request request = mock(Request.class);
|
final Request request = mock(Request.class);
|
||||||
requests.add(request);
|
requests.add(request);
|
||||||
doReturn(requests).when(mRecentLocationApps).getAppList();
|
doReturn(requests).when(mRecentLocationApps).getAppListSorted();
|
||||||
final AppPreference preference = new AppPreference(mContext);
|
final AppPreference preference = new AppPreference(mContext);
|
||||||
doReturn(preference).when(mController).createAppPreference(any(Context.class));
|
doReturn(preference).when(mController).createAppPreference(any(Context.class));
|
||||||
mController.displayPreference(mScreen);
|
mController.displayPreference(mScreen);
|
||||||
|
Reference in New Issue
Block a user