diff options
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() { |