Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 062baadf authored by Raff Tsai's avatar Raff Tsai Committed by Android (Google) Code Review
Browse files

Merge "Add personal/work tab for ManageApplications"

parents 86417710 afd494d3
Loading
Loading
Loading
Loading
+1 −12
Original line number Diff line number Diff line
@@ -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) {
+28 −0
Original line number Diff line number Diff line
@@ -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;
    }
}
+24 −14
Original line number Diff line number Diff line
@@ -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
+49 −0
Original line number Diff line number Diff line
/*
 * 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
        };
    }
}
+4 −0
Original line number Diff line number Diff line
@@ -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());
    }
}
Loading