summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaff Tsai <rafftsai@google.com>2019-10-22 23:47:32 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2019-10-22 23:47:32 +0000
commit062baadf4e6a9aedd99b52fff6111fc56b696e3a (patch)
tree14421d10358478f41a9dc5dda90fab3be1714ba0
parent864177101d5bed224072a53b2362a08021e17bd2 (diff)
parentafd494d3355b7d652d7c9765c49792d0ba6c2d70 (diff)
downloadpackages_apps_Settings-062baadf4e6a9aedd99b52fff6111fc56b696e3a.tar.gz
packages_apps_Settings-062baadf4e6a9aedd99b52fff6111fc56b696e3a.tar.bz2
packages_apps_Settings-062baadf4e6a9aedd99b52fff6111fc56b696e3a.zip
Merge "Add personal/work tab for ManageApplications"
-rw-r--r--src/com/android/settings/SettingsActivity.java13
-rw-r--r--src/com/android/settings/Utils.java28
-rw-r--r--src/com/android/settings/applications/manageapplications/ManageApplications.java38
-rw-r--r--src/com/android/settings/applications/manageapplications/ProfileSelectManageApplications.java49
-rw-r--r--src/com/android/settings/dashboard/profileselector/ProfileFragmentBridge.java4
-rw-r--r--src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java18
6 files changed, 120 insertions, 30 deletions
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index b489bc4a4b..e459ab8a81 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -35,7 +35,6 @@ import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
import android.text.TextUtils;
-import android.util.FeatureFlagUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
@@ -53,13 +52,11 @@ import androidx.preference.PreferenceManager;
import com.android.internal.util.ArrayUtils;
import com.android.settings.Settings.WifiSettingsActivity;
import com.android.settings.applications.manageapplications.ManageApplications;
-import com.android.settings.core.FeatureFlags;
import com.android.settings.core.OnActivityResultListener;
import com.android.settings.core.SettingsBaseActivity;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.core.gateway.SettingsGateway;
import com.android.settings.dashboard.DashboardFeatureProvider;
-import com.android.settings.dashboard.profileselector.ProfileFragmentBridge;
import com.android.settings.homepage.TopLevelSettings;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.wfd.WifiDisplaySettings;
@@ -568,15 +565,7 @@ public class SettingsActivity extends SettingsBaseActivity
throw new IllegalArgumentException("Invalid fragment for this activity: "
+ fragmentName);
}
- Fragment f = null;
- if (FeatureFlagUtils.isEnabled(this, FeatureFlags.PERSONAL_WORK_PROFILE)
- && UserManager.get(this).getUserProfiles().size() > 1
- && ProfileFragmentBridge.FRAGMENT_MAP.get(fragmentName) != null) {
- f = Fragment.instantiate(this, ProfileFragmentBridge.FRAGMENT_MAP.get(fragmentName),
- args);
- } else {
- f = Fragment.instantiate(this, fragmentName, args);
- }
+ Fragment f = Utils.getTargetFragment(this, fragmentName, args);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.main_content, f);
if (titleResId > 0) {
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index aef0ac8904..f5f5ccd0be 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -21,6 +21,9 @@ import static android.content.Intent.EXTRA_USER_ID;
import static android.text.format.DateUtils.FORMAT_ABBREV_MONTH;
import static android.text.format.DateUtils.FORMAT_SHOW_DATE;
+import static com.android.settings.applications.manageapplications.ManageApplications.EXTRA_PERSONAL_ONLY;
+import static com.android.settings.applications.manageapplications.ManageApplications.EXTRA_WORK_ONLY;
+
import android.annotation.Nullable;
import android.app.ActionBar;
import android.app.Activity;
@@ -81,6 +84,7 @@ import android.text.TextUtils;
import android.text.format.DateUtils;
import android.text.style.TtsSpan;
import android.util.ArraySet;
+import android.util.FeatureFlagUtils;
import android.util.IconDrawableFactory;
import android.util.Log;
import android.view.LayoutInflater;
@@ -101,6 +105,7 @@ import com.android.internal.app.UnlaunchableAppActivity;
import com.android.internal.util.ArrayUtils;
import com.android.internal.widget.LockPatternUtils;
import com.android.settings.core.FeatureFlags;
+import com.android.settings.dashboard.profileselector.ProfileFragmentBridge;
import com.android.settings.development.featureflags.FeatureFlagPersistent;
import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settingslib.widget.ActionBarShadowController;
@@ -1059,4 +1064,27 @@ public final class Utils extends com.android.settingslib.Utils {
ActionBarShadowController.attachToView(activity, lifecycle, scrollView);
}
}
+
+ /**
+ * Return correct target fragment based on argument
+ *
+ * @param activity the activity target fragment will be launched.
+ * @param fragmentName initial target fragment name.
+ * @param args fragment launch arguments.
+ */
+ public static Fragment getTargetFragment(Activity activity, String fragmentName, Bundle args) {
+ Fragment f = null;
+ final boolean isWorkOnly = args == null ? false : args.getBoolean(EXTRA_WORK_ONLY);
+ final boolean isPersonalOnly = args == null ? false : args.getBoolean(EXTRA_PERSONAL_ONLY);
+ if (FeatureFlagUtils.isEnabled(activity, FeatureFlags.PERSONAL_WORK_PROFILE)
+ && UserManager.get(activity).getUserProfiles().size() > 1
+ && ProfileFragmentBridge.FRAGMENT_MAP.get(fragmentName) != null
+ && !isWorkOnly && !isPersonalOnly) {
+ f = Fragment.instantiate(activity, ProfileFragmentBridge.FRAGMENT_MAP.get(fragmentName),
+ args);
+ } else {
+ f = Fragment.instantiate(activity, fragmentName, args);
+ }
+ return f;
+ }
}
diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java
index 90ab71a151..01289f285a 100644
--- a/src/com/android/settings/applications/manageapplications/ManageApplications.java
+++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java
@@ -143,6 +143,7 @@ public class ManageApplications extends InstrumentedFragment
public static final String EXTRA_STORAGE_TYPE = "storageType";
public static final String EXTRA_WORK_ONLY = "workProfileOnly";
public static final String EXTRA_WORK_ID = "workId";
+ public static final String EXTRA_PERSONAL_ONLY = "personalOnly";
private static final String EXTRA_SORT_ORDER = "sortOrder";
private static final String EXTRA_SHOW_SYSTEM = "showSystem";
@@ -234,6 +235,7 @@ public class ManageApplications extends InstrumentedFragment
private int mStorageType;
private boolean mIsWorkOnly;
private int mWorkUserId;
+ private boolean mIsPersonalOnly;
private View mEmptyView;
private int mFilterType;
@@ -308,6 +310,7 @@ public class ManageApplications extends InstrumentedFragment
}
final AppFilterRegistry appFilterRegistry = AppFilterRegistry.getInstance();
mFilter = appFilterRegistry.get(appFilterRegistry.getDefaultFilterType(mListType));
+ mIsPersonalOnly = args != null ? args.getBoolean(EXTRA_PERSONAL_ONLY) : false;
mIsWorkOnly = args != null ? args.getBoolean(EXTRA_WORK_ONLY) : false;
mWorkUserId = args != null ? args.getInt(EXTRA_WORK_ID) : NO_USER_SPECIFIED;
mExpandSearch = activity.getIntent().getBooleanExtra(EXTRA_EXPAND_SEARCH_VIEW, false);
@@ -405,8 +408,22 @@ public class ManageApplications extends InstrumentedFragment
final AppFilterRegistry appFilterRegistry = AppFilterRegistry.getInstance();
mFilterAdapter.enableFilter(appFilterRegistry.getDefaultFilterType(mListType));
+
+ AppFilter compositeFilter = getCompositeFilter(mListType, mStorageType, mVolumeUuid);
+ if (mIsWorkOnly) {
+ compositeFilter = new CompoundFilter(compositeFilter, ApplicationsState.FILTER_WORK);
+ }
+ if (mIsPersonalOnly) {
+ compositeFilter = new CompoundFilter(compositeFilter,
+ ApplicationsState.FILTER_PERSONAL);
+ }
+ if (compositeFilter != null) {
+ mApplications.setCompositeFilter(compositeFilter);
+ }
+
if (mListType == LIST_TYPE_MAIN) {
- if (UserManager.get(getActivity()).getUserProfiles().size() > 1) {
+ if (UserManager.get(getActivity()).getUserProfiles().size() > 1 && !mIsWorkOnly
+ && !mIsPersonalOnly) {
mFilterAdapter.enableFilter(FILTER_APPS_PERSONAL);
mFilterAdapter.enableFilter(FILTER_APPS_WORK);
}
@@ -420,15 +437,6 @@ public class ManageApplications extends InstrumentedFragment
if (mListType == LIST_TYPE_HIGH_POWER) {
mFilterAdapter.enableFilter(FILTER_APPS_POWER_WHITELIST_ALL);
}
-
- AppFilter compositeFilter = getCompositeFilter(mListType, mStorageType, mVolumeUuid);
- if (mIsWorkOnly) {
- final AppFilter workFilter = appFilterRegistry.get(FILTER_APPS_WORK).getFilter();
- compositeFilter = new CompoundFilter(compositeFilter, workFilter);
- }
- if (compositeFilter != null) {
- mApplications.setCompositeFilter(compositeFilter);
- }
}
@VisibleForTesting
@@ -449,9 +457,11 @@ public class ManageApplications extends InstrumentedFragment
return new CompoundFilter(ApplicationsState.FILTER_MOVIES, filter);
} else if (listType == LIST_TYPE_PHOTOGRAPHY) {
return new CompoundFilter(ApplicationsState.FILTER_PHOTOS, filter);
+ } else {
+ final AppFilterRegistry appFilterRegistry = AppFilterRegistry.getInstance();
+ return appFilterRegistry.get(
+ appFilterRegistry.getDefaultFilterType(listType)).getFilter();
}
-
- return null;
}
@Override
@@ -508,7 +518,7 @@ public class ManageApplications extends InstrumentedFragment
outState.putBoolean(EXTRA_SHOW_SYSTEM, mShowSystem);
outState.putBoolean(EXTRA_HAS_ENTRIES, mApplications.mHasReceivedLoadEntries);
outState.putBoolean(EXTRA_HAS_BRIDGE, mApplications.mHasReceivedBridgeCallback);
- if(mSearchView != null) {
+ if (mSearchView != null) {
outState.putBoolean(EXTRA_EXPAND_SEARCH_VIEW, !mSearchView.isIconified());
}
if (mApplications != null) {
@@ -1166,7 +1176,7 @@ public class ManageApplications extends InstrumentedFragment
mSearchFilter = new SearchFilter();
}
// If we haven't load apps list completely, don't filter anything.
- if(mOriginalEntries == null) {
+ if (mOriginalEntries == null) {
Log.w(TAG, "Apps haven't loaded completely yet, so nothing can be filtered");
return;
}
diff --git a/src/com/android/settings/applications/manageapplications/ProfileSelectManageApplications.java b/src/com/android/settings/applications/manageapplications/ProfileSelectManageApplications.java
new file mode 100644
index 0000000000..dc53e1894a
--- /dev/null
+++ b/src/com/android/settings/applications/manageapplications/ProfileSelectManageApplications.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2019 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.applications.manageapplications;
+
+import static com.android.settings.applications.manageapplications.ManageApplications.EXTRA_PERSONAL_ONLY;
+import static com.android.settings.applications.manageapplications.ManageApplications.EXTRA_WORK_ONLY;
+
+import android.os.Bundle;
+
+import androidx.fragment.app.Fragment;
+
+import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
+
+/**
+ * Application Setting page for work profile.
+ */
+public class ProfileSelectManageApplications extends ProfileSelectFragment {
+
+ @Override
+ public Fragment[] getFragments() {
+ final Bundle workOnly = new Bundle();
+ workOnly.putBoolean(EXTRA_WORK_ONLY, true);
+ final Fragment workFragment = new ManageApplications();
+ workFragment.setArguments(workOnly);
+
+ final Bundle personalOnly = new Bundle();
+ personalOnly.putBoolean(EXTRA_PERSONAL_ONLY, true);
+ final Fragment personalFragment = new ManageApplications();
+ personalFragment.setArguments(personalOnly);
+ return new Fragment[] {
+ personalFragment, //0
+ workFragment
+ };
+ }
+}
diff --git a/src/com/android/settings/dashboard/profileselector/ProfileFragmentBridge.java b/src/com/android/settings/dashboard/profileselector/ProfileFragmentBridge.java
index 797782a4b0..1a1a3e63aa 100644
--- a/src/com/android/settings/dashboard/profileselector/ProfileFragmentBridge.java
+++ b/src/com/android/settings/dashboard/profileselector/ProfileFragmentBridge.java
@@ -20,6 +20,8 @@ import android.util.ArrayMap;
import com.android.settings.accounts.AccountDashboardFragment;
import com.android.settings.accounts.AccountProfileSelectFragment;
+import com.android.settings.applications.manageapplications.ManageApplications;
+import com.android.settings.applications.manageapplications.ProfileSelectManageApplications;
import java.util.Map;
@@ -38,5 +40,7 @@ public class ProfileFragmentBridge {
FRAGMENT_MAP = new ArrayMap<>();
FRAGMENT_MAP.put(AccountDashboardFragment.class.getName(),
AccountProfileSelectFragment.class.getName());
+ FRAGMENT_MAP.put(ManageApplications.class.getName(),
+ ProfileSelectManageApplications.class.getName());
}
}
diff --git a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
index 525a887cb8..31898d1477 100644
--- a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
@@ -26,6 +26,7 @@ import android.net.TrafficStats;
import android.os.Bundle;
import android.os.UserHandle;
import android.os.storage.VolumeInfo;
+import android.util.FeatureFlagUtils;
import android.util.Log;
import android.util.SparseArray;
@@ -37,6 +38,7 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.Settings;
import com.android.settings.applications.manageapplications.ManageApplications;
+import com.android.settings.core.FeatureFlags;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.deviceinfo.PrivateVolumeSettings.SystemInfoFragment;
@@ -389,10 +391,18 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle
}
private Bundle getWorkAnnotatedBundle(int additionalCapacity) {
- final Bundle args = new Bundle(2 + additionalCapacity);
- args.putBoolean(ManageApplications.EXTRA_WORK_ONLY, mIsWorkProfile);
- args.putInt(ManageApplications.EXTRA_WORK_ID, mUserId);
- return args;
+ if (FeatureFlagUtils.isEnabled(mContext, FeatureFlags.PERSONAL_WORK_PROFILE)) {
+ final Bundle args = new Bundle(3 + additionalCapacity);
+ args.putBoolean(ManageApplications.EXTRA_WORK_ONLY, mIsWorkProfile);
+ args.putInt(ManageApplications.EXTRA_WORK_ID, mUserId);
+ args.putBoolean(ManageApplications.EXTRA_PERSONAL_ONLY, !mIsWorkProfile);
+ return args;
+ } else {
+ final Bundle args = new Bundle(2 + additionalCapacity);
+ args.putBoolean(ManageApplications.EXTRA_WORK_ONLY, mIsWorkProfile);
+ args.putInt(ManageApplications.EXTRA_WORK_ID, mUserId);
+ return args;
+ }
}
private Intent getFilesIntent() {