summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/location/RecentLocationRequestSeeAllPreferenceController.java
diff options
context:
space:
mode:
authorLifu Tang <lifu@google.com>2019-05-06 15:24:04 -0700
committerLifu Tang <lifu@google.com>2019-05-13 15:24:09 -0700
commit166b54c0f6d344ead4e233a478ebb2b11ed274d6 (patch)
tree29a5710fb227cae9b675a12cb3f7f7d854ea0e30 /src/com/android/settings/location/RecentLocationRequestSeeAllPreferenceController.java
parent12dcbe7c7148ec50f21662707727ec89633a8ce8 (diff)
downloadpackages_apps_Settings-166b54c0f6d344ead4e233a478ebb2b11ed274d6.tar.gz
packages_apps_Settings-166b54c0f6d344ead4e233a478ebb2b11ed274d6.tar.bz2
packages_apps_Settings-166b54c0f6d344ead4e233a478ebb2b11ed274d6.zip
Revert recent location apps to pre-Q behavior
- List recent location request instead of location access - Show in list view instead of app list widget - Add overflow menu to "see all" page to show/hide system apps Bug: 124015107 Test: build, flash, and test manually Change-Id: I78df6d4b13ddf774013e8d819cf343ce012e6b0b
Diffstat (limited to 'src/com/android/settings/location/RecentLocationRequestSeeAllPreferenceController.java')
-rw-r--r--src/com/android/settings/location/RecentLocationRequestSeeAllPreferenceController.java116
1 files changed, 116 insertions, 0 deletions
diff --git a/src/com/android/settings/location/RecentLocationRequestSeeAllPreferenceController.java b/src/com/android/settings/location/RecentLocationRequestSeeAllPreferenceController.java
new file mode 100644
index 0000000000..3abccf7d23
--- /dev/null
+++ b/src/com/android/settings/location/RecentLocationRequestSeeAllPreferenceController.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.location;
+
+import android.content.Context;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.location.RecentLocationApps;
+import com.android.settingslib.widget.apppreference.AppPreference;
+
+import java.util.List;
+
+import com.android.settings.R;
+
+/** Preference controller for preference category displaying all recent location requests. */
+public class RecentLocationRequestSeeAllPreferenceController
+ extends LocationBasePreferenceController {
+ /** Key for preference category "All recent location requests" */
+ private static final String KEY_ALL_RECENT_LOCATION_REQUESTS = "all_recent_location_requests";
+ private final RecentLocationRequestSeeAllFragment mFragment;
+ private PreferenceCategory mCategoryAllRecentLocationRequests;
+ private RecentLocationApps mRecentLocationApps;
+ private boolean mShowSystem = false;
+ private Preference mPreference;
+
+ public RecentLocationRequestSeeAllPreferenceController(
+ Context context, Lifecycle lifecycle, RecentLocationRequestSeeAllFragment fragment) {
+ this(context, lifecycle, fragment, new RecentLocationApps(context));
+ }
+
+ @VisibleForTesting
+ RecentLocationRequestSeeAllPreferenceController(
+ Context context,
+ Lifecycle lifecycle,
+ RecentLocationRequestSeeAllFragment fragment,
+ RecentLocationApps recentLocationApps) {
+ super(context, lifecycle);
+ mFragment = fragment;
+ mRecentLocationApps = recentLocationApps;
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return KEY_ALL_RECENT_LOCATION_REQUESTS;
+ }
+
+ @Override
+ public void onLocationModeChanged(int mode, boolean restricted) {
+ mCategoryAllRecentLocationRequests.setEnabled(mLocationEnabler.isEnabled(mode));
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mCategoryAllRecentLocationRequests =
+ (PreferenceCategory) screen.findPreference(KEY_ALL_RECENT_LOCATION_REQUESTS);
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ mCategoryAllRecentLocationRequests.removeAll();
+ mPreference = preference;
+ List<RecentLocationApps.Request> requests = mRecentLocationApps.getAppListSorted(
+ mShowSystem);
+ if (requests.isEmpty()) {
+ // If there's no item to display, add a "No recent apps" item.
+ final Preference banner = new AppPreference(mContext);
+ banner.setTitle(R.string.location_no_recent_apps);
+ banner.setSelectable(false);
+ mCategoryAllRecentLocationRequests.addPreference(banner);
+ } else {
+ for (RecentLocationApps.Request request : requests) {
+ Preference appPreference = createAppPreference(preference.getContext(), request);
+ mCategoryAllRecentLocationRequests.addPreference(appPreference);
+ }
+ }
+ }
+
+ @VisibleForTesting
+ AppPreference createAppPreference(
+ Context prefContext, RecentLocationApps.Request request) {
+ final AppPreference pref = new AppPreference(prefContext);
+ pref.setSummary(request.contentDescription);
+ pref.setIcon(request.icon);
+ pref.setTitle(request.label);
+ pref.setOnPreferenceClickListener(
+ new RecentLocationRequestPreferenceController.PackageEntryClickedListener(
+ mFragment, request.packageName, request.userHandle));
+ return pref;
+ }
+
+ public void setShowSystem(boolean showSystem) {
+ mShowSystem = showSystem;
+ if (mPreference != null) {
+ updateState(mPreference);
+ }
+ }
+}