Merge "Make the show/hide system setting for recent location acccesses sticky."
This commit is contained in:
committed by
Android (Google) Code Review
commit
d6909d1843
@@ -20,6 +20,7 @@ import android.content.Intent;
|
|||||||
import android.icu.text.RelativeDateTimeFormatter;
|
import android.icu.text.RelativeDateTimeFormatter;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
|
import android.provider.Settings;
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
@@ -85,11 +86,17 @@ public class RecentLocationAccessPreferenceController extends LocationBasePrefer
|
|||||||
public void displayPreference(PreferenceScreen screen) {
|
public void displayPreference(PreferenceScreen screen) {
|
||||||
super.displayPreference(screen);
|
super.displayPreference(screen);
|
||||||
mCategoryRecentLocationRequests = screen.findPreference(getPreferenceKey());
|
mCategoryRecentLocationRequests = screen.findPreference(getPreferenceKey());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateState(Preference preference) {
|
||||||
|
mCategoryRecentLocationRequests.removeAll();
|
||||||
final Context prefContext = mCategoryRecentLocationRequests.getContext();
|
final Context prefContext = mCategoryRecentLocationRequests.getContext();
|
||||||
final List<RecentAppOpsAccess.Access> recentLocationAccesses = new ArrayList<>();
|
final List<RecentAppOpsAccess.Access> recentLocationAccesses = new ArrayList<>();
|
||||||
final UserManager userManager = UserManager.get(mContext);
|
final UserManager userManager = UserManager.get(mContext);
|
||||||
for (RecentAppOpsAccess.Access access : mRecentLocationApps.getAppListSorted(
|
final boolean showSystem = Settings.Secure.getInt(mContext.getContentResolver(),
|
||||||
/* showSystemApps= */ false)) {
|
Settings.Secure.LOCATION_SHOW_SYSTEM_OPS, 0) == 1;
|
||||||
|
for (RecentAppOpsAccess.Access access : mRecentLocationApps.getAppListSorted(showSystem)) {
|
||||||
if (isRequestMatchesProfileType(userManager, access, mType)) {
|
if (isRequestMatchesProfileType(userManager, access, mType)) {
|
||||||
recentLocationAccesses.add(access);
|
recentLocationAccesses.add(access);
|
||||||
if (recentLocationAccesses.size() == MAX_APPS) {
|
if (recentLocationAccesses.size() == MAX_APPS) {
|
||||||
|
@@ -17,6 +17,7 @@ package com.android.settings.location;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.provider.Settings;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuInflater;
|
import android.view.MenuInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
@@ -36,7 +37,6 @@ public class RecentLocationAccessSeeAllFragment extends DashboardFragment {
|
|||||||
|
|
||||||
private static final int MENU_SHOW_SYSTEM = Menu.FIRST + 1;
|
private static final int MENU_SHOW_SYSTEM = Menu.FIRST + 1;
|
||||||
private static final int MENU_HIDE_SYSTEM = Menu.FIRST + 2;
|
private static final int MENU_HIDE_SYSTEM = Menu.FIRST + 2;
|
||||||
private static final String EXTRA_SHOW_SYSTEM = "show_system";
|
|
||||||
|
|
||||||
private boolean mShowSystem = false;
|
private boolean mShowSystem = false;
|
||||||
private MenuItem mShowSystemMenu;
|
private MenuItem mShowSystemMenu;
|
||||||
@@ -58,18 +58,8 @@ public class RecentLocationAccessSeeAllFragment extends DashboardFragment {
|
|||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
if (savedInstanceState != null) {
|
mShowSystem = Settings.Secure.getInt(getContentResolver(),
|
||||||
mShowSystem = savedInstanceState.getBoolean(EXTRA_SHOW_SYSTEM, mShowSystem);
|
Settings.Secure.LOCATION_SHOW_SYSTEM_OPS, 0) == 1;
|
||||||
}
|
|
||||||
if (mController != null) {
|
|
||||||
mController.setShowSystem(mShowSystem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onSaveInstanceState(Bundle outState) {
|
|
||||||
super.onSaveInstanceState(outState);
|
|
||||||
outState.putBoolean(EXTRA_SHOW_SYSTEM, mShowSystem);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -88,6 +78,8 @@ public class RecentLocationAccessSeeAllFragment extends DashboardFragment {
|
|||||||
case MENU_SHOW_SYSTEM:
|
case MENU_SHOW_SYSTEM:
|
||||||
case MENU_HIDE_SYSTEM:
|
case MENU_HIDE_SYSTEM:
|
||||||
mShowSystem = menuItem.getItemId() == MENU_SHOW_SYSTEM;
|
mShowSystem = menuItem.getItemId() == MENU_SHOW_SYSTEM;
|
||||||
|
Settings.Secure.putInt(getContentResolver(),
|
||||||
|
Settings.Secure.LOCATION_SHOW_SYSTEM_OPS, mShowSystem ? 1 : 0);
|
||||||
updateMenu();
|
updateMenu();
|
||||||
if (mController != null) {
|
if (mController != null) {
|
||||||
mController.setShowSystem(mShowSystem);
|
mController.setShowSystem(mShowSystem);
|
||||||
|
@@ -20,6 +20,7 @@ import static com.android.settings.location.RecentLocationAccessPreferenceContro
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
|
import android.provider.Settings;
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
@@ -43,6 +44,8 @@ public class RecentLocationAccessSeeAllPreferenceController
|
|||||||
|
|
||||||
public RecentLocationAccessSeeAllPreferenceController(Context context, String key) {
|
public RecentLocationAccessSeeAllPreferenceController(Context context, String key) {
|
||||||
super(context, key);
|
super(context, key);
|
||||||
|
mShowSystem = Settings.Secure.getInt(mContext.getContentResolver(),
|
||||||
|
Settings.Secure.LOCATION_SHOW_SYSTEM_OPS, 0) == 1;
|
||||||
mRecentLocationAccesses = RecentAppOpsAccess.createForLocation(context);
|
mRecentLocationAccesses = RecentAppOpsAccess.createForLocation(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -17,6 +17,7 @@ import android.content.Context;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
|
import android.provider.Settings;
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
@@ -83,8 +84,11 @@ public class RecentLocationRequestPreferenceController extends LocationBasePrefe
|
|||||||
final Context prefContext = mCategoryRecentLocationRequests.getContext();
|
final Context prefContext = mCategoryRecentLocationRequests.getContext();
|
||||||
final List<RecentLocationApps.Request> recentLocationRequests = new ArrayList<>();
|
final List<RecentLocationApps.Request> recentLocationRequests = new ArrayList<>();
|
||||||
final UserManager userManager = UserManager.get(mContext);
|
final UserManager userManager = UserManager.get(mContext);
|
||||||
|
final boolean showSystem = Settings.Secure.getInt(mContext.getContentResolver(),
|
||||||
|
Settings.Secure.LOCATION_SHOW_SYSTEM_OPS, 0) == 1;
|
||||||
|
|
||||||
for (RecentLocationApps.Request request : mRecentLocationApps.getAppListSorted(
|
for (RecentLocationApps.Request request : mRecentLocationApps.getAppListSorted(
|
||||||
false /* systemApps */)) {
|
showSystem)) {
|
||||||
if (isRequestMatchesProfileType(userManager, request, mType)) {
|
if (isRequestMatchesProfileType(userManager, request, mType)) {
|
||||||
recentLocationRequests.add(request);
|
recentLocationRequests.add(request);
|
||||||
if (recentLocationRequests.size() == MAX_APPS) {
|
if (recentLocationRequests.size() == MAX_APPS) {
|
||||||
|
@@ -19,9 +19,12 @@ import static com.google.common.truth.Truth.assertThat;
|
|||||||
|
|
||||||
import static org.mockito.Mockito.doReturn;
|
import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.os.UserHandle;
|
||||||
|
import android.provider.Settings;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
@@ -34,12 +37,15 @@ import com.android.settings.dashboard.DashboardFragment;
|
|||||||
import com.android.settings.testutils.shadow.ShadowDeviceConfig;
|
import com.android.settings.testutils.shadow.ShadowDeviceConfig;
|
||||||
import com.android.settingslib.applications.RecentAppOpsAccess;
|
import com.android.settingslib.applications.RecentAppOpsAccess;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Ignore;
|
import org.junit.Ignore;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.Mockito;
|
||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
import org.robolectric.RobolectricTestRunner;
|
import org.robolectric.RobolectricTestRunner;
|
||||||
import org.robolectric.RuntimeEnvironment;
|
import org.robolectric.RuntimeEnvironment;
|
||||||
@@ -107,4 +113,20 @@ public class RecentLocationAccessPreferenceControllerTest {
|
|||||||
mContext.getText(R.string.location_recent_location_access_view_details));
|
mContext.getText(R.string.location_recent_location_access_view_details));
|
||||||
assertThat(details.hasOnClickListeners()).isTrue();
|
assertThat(details.hasOnClickListeners()).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Verifies the title text, details text are correct, and the click listener is set. */
|
||||||
|
@Test
|
||||||
|
public void updateState_showSystemAccess() {
|
||||||
|
doReturn(ImmutableList.of(
|
||||||
|
new RecentAppOpsAccess.Access("app", UserHandle.CURRENT, null, "app", "", 0)))
|
||||||
|
.when(mRecentLocationApps).getAppListSorted(false);
|
||||||
|
doReturn(new ArrayList<>()).when(mRecentLocationApps).getAppListSorted(true);
|
||||||
|
mController.displayPreference(mScreen);
|
||||||
|
mController.updateState(mLayoutPreference);
|
||||||
|
verify(mLayoutPreference).addPreference(Mockito.any());
|
||||||
|
|
||||||
|
Settings.Secure.putInt(
|
||||||
|
mContext.getContentResolver(), Settings.Secure.LOCATION_SHOW_SYSTEM_OPS, 1);
|
||||||
|
verify(mLayoutPreference, Mockito.times(1)).addPreference(Mockito.any());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -26,6 +26,7 @@ import static org.mockito.Mockito.when;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
|
import android.provider.Settings;
|
||||||
|
|
||||||
import androidx.preference.PreferenceCategory;
|
import androidx.preference.PreferenceCategory;
|
||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
@@ -81,6 +82,25 @@ public class RecentLocationRequestPreferenceControllerTest {
|
|||||||
verify(mCategory, times(3)).addPreference(any());
|
verify(mCategory, times(3)).addPreference(any());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void updateState_whenAppListMoreThanThree_showSystem() {
|
||||||
|
when(mController.mRecentLocationApps.getAppListSorted(false))
|
||||||
|
.thenReturn(createMockRequest(2));
|
||||||
|
when(mController.mRecentLocationApps.getAppListSorted(true))
|
||||||
|
.thenReturn(createMockRequest(3));
|
||||||
|
|
||||||
|
mController.displayPreference(mScreen);
|
||||||
|
verify(mCategory, times(2)).addPreference(any());
|
||||||
|
|
||||||
|
Settings.Secure.putInt(
|
||||||
|
mContext.getContentResolver(),
|
||||||
|
Settings.Secure.LOCATION_SHOW_SYSTEM_OPS,
|
||||||
|
1);
|
||||||
|
|
||||||
|
mController.displayPreference(mScreen);
|
||||||
|
verify(mCategory, times(5)).addPreference(any());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void updateState_workProfile_shouldShowOnlyWorkProfileApps() {
|
public void updateState_workProfile_shouldShowOnlyWorkProfileApps() {
|
||||||
final List<RecentLocationApps.Request> requests = createMockRequest(6);
|
final List<RecentLocationApps.Request> requests = createMockRequest(6);
|
||||||
|
Reference in New Issue
Block a user