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

Commit 1f6d24a9 authored by Fan Zhang's avatar Fan Zhang
Browse files

Get rid of direct usage of Utils.onBuildStartFragmentIntent

Change-Id: I87eb97d6da4cd4f99be5bcdb1e3e245eb1c7bd1c
Fixes: 73250851
Test: robotests
parent 47854c29
Loading
Loading
Loading
Loading
+0 −33
Original line number Diff line number Diff line
@@ -388,39 +388,6 @@ public final class Utils extends com.android.settingslib.Utils {
                .getUsers().size() > 1;
    }

    /**
     * Build an Intent to launch a new activity showing the selected fragment.
     * The implementation constructs an Intent that re-launches the current activity with the
     * appropriate arguments to display the fragment.
     *
     *
     * @param context The Context.
     * @param fragmentName The name of the fragment to display.
     * @param args Optional arguments to supply to the fragment.
     * @param titleResPackageName Optional package name for the resource id of the title.
     * @param titleResId Optional title resource id to show for this item.
     * @param title Optional title to show for this item.
     * @param isShortcut  tell if this is a Launcher Shortcut or not
     * @param sourceMetricsCategory The context (source) from which an action is performed
     * @return Returns an Intent that can be launched to display the given
     * fragment.
     */
    public static Intent onBuildStartFragmentIntent(Context context, String fragmentName,
            Bundle args, String titleResPackageName, int titleResId, CharSequence title,
            boolean isShortcut, int sourceMetricsCategory) {
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.setClass(context, SubSettings.class);
        intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT, fragmentName);
        intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS, args);
        intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RES_PACKAGE_NAME,
                titleResPackageName);
        intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, titleResId);
        intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE, title);
        intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_AS_SHORTCUT, isShortcut);
        intent.putExtra(VisibilityLoggerMixin.EXTRA_SOURCE_METRICS_CATEGORY, sourceMetricsCategory);
        return intent;
    }

    /**
     * Returns the managed profile of the current user or {@code null} if none is found or a profile
     * exists but it is disabled.
+10 −12
Original line number Diff line number Diff line
@@ -43,8 +43,8 @@ import android.util.Log;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.SettingsActivity;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils;
import com.android.settings.applications.manageapplications.ManageApplications;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
@@ -218,20 +218,18 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment

    public static void startAppInfoFragment(Class<?> fragment, int titleRes,
            String pkg, int uid, Fragment source, int request, int sourceMetricsCategory) {
        startAppInfoFragment(fragment, titleRes, pkg, uid, source.getActivity(), request,
                sourceMetricsCategory);
    }

    public static void startAppInfoFragment(Class<?> fragment, int titleRes,
            String pkg, int uid, Activity source, int request, int sourceMetricsCategory) {
        Bundle args = new Bundle();
        final Bundle args = new Bundle();
        args.putString(AppInfoBase.ARG_PACKAGE_NAME, pkg);
        args.putInt(AppInfoBase.ARG_PACKAGE_UID, uid);

        Intent intent = Utils.onBuildStartFragmentIntent(source, fragment.getName(),
                args, null, titleRes, null, false, sourceMetricsCategory);
        source.startActivityForResultAsUser(intent, request,
                new UserHandle(UserHandle.getUserId(uid)));
        new SubSettingLauncher(source.getContext())
                .setDestination(fragment.getName())
                .setSourceMetricsCategory(sourceMetricsCategory)
                .setTitle(titleRes)
                .setArguments(args)
                .setUserHandle(new UserHandle(UserHandle.getUserId(uid)))
                .setResultListener(source, request)
                .launch();
    }

    public static class MyAlertDialogFragment extends InstrumentedDialogFragment {
+33 −15
Original line number Diff line number Diff line
@@ -101,6 +101,25 @@ public class SubSettingLauncher {
                    "This launcher has already been executed. Do not reuse");
        }
        mLaunched = true;

        final Intent intent = toIntent();

        boolean launchAsUser = mLaunchRequest.userHandle != null
                && mLaunchRequest.userHandle.getIdentifier() != UserHandle.myUserId();
        boolean launchForResult = mLaunchRequest.mResultListener != null;
        if (launchAsUser && launchForResult) {
            launchForResultAsUser(intent, mLaunchRequest.userHandle, mLaunchRequest.mResultListener,
                    mLaunchRequest.mRequestCode);
        } else if (launchAsUser && !launchForResult) {
            launchAsUser(intent, mLaunchRequest.userHandle);
        } else if (!launchAsUser && launchForResult) {
            launchForResult(mLaunchRequest.mResultListener, intent, mLaunchRequest.mRequestCode);
        } else {
            launch(intent);
        }
    }

    public Intent toIntent() {
        final Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.setClass(mContext, SubSettings.class);
        if (TextUtils.isEmpty(mLaunchRequest.destinationName)) {
@@ -123,15 +142,7 @@ public class SubSettingLauncher {
        intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_AS_SHORTCUT,
                mLaunchRequest.isShortCut);
        intent.addFlags(mLaunchRequest.flags);

        if (mLaunchRequest.userHandle != null
                && mLaunchRequest.userHandle.getIdentifier() != UserHandle.myUserId()) {
            launchAsUser(mContext, intent, mLaunchRequest.userHandle);
        } else if (mLaunchRequest.mResultListener != null) {
            launchForResult(mLaunchRequest.mResultListener, intent, mLaunchRequest.mRequestCode);
        } else {
            launch(intent);
        }
        return intent;
    }

    @VisibleForTesting
@@ -139,14 +150,21 @@ public class SubSettingLauncher {
        mContext.startActivity(intent);
    }

    private static void launchForResult(Fragment listener, Intent intent, int requestCode) {
        listener.getActivity().startActivityForResult(intent, requestCode);
    }

    private static void launchAsUser(Context context, Intent intent, UserHandle userHandle) {
    @VisibleForTesting
    void launchAsUser(Intent intent, UserHandle userHandle) {
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
        context.startActivityAsUser(intent, userHandle);
        mContext.startActivityAsUser(intent, userHandle);
    }

    @VisibleForTesting
    void launchForResultAsUser(Intent intent, UserHandle userHandle,
            Fragment resultListener, int requestCode) {
        resultListener.getActivity().startActivityForResultAsUser(intent, requestCode, userHandle);
    }

    private void launchForResult(Fragment listener, Intent intent, int requestCode) {
        listener.getActivity().startActivityForResult(intent, requestCode);
    }

    /**
+7 −3
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@ import android.util.AttributeSet;

import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.datausage.CellDataPreference.DataStateListener;

public class BillingCyclePreference extends Preference implements TemplatePreference {
@@ -80,8 +80,12 @@ public class BillingCyclePreference extends Preference implements TemplatePrefer
    public Intent getIntent() {
        Bundle args = new Bundle();
        args.putParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE, mTemplate);
        return Utils.onBuildStartFragmentIntent(getContext(), BillingCycleSettings.class.getName(),
                args, null, 0, getTitle(), false, MetricsProto.MetricsEvent.VIEW_UNKNOWN);
        return new SubSettingLauncher(getContext())
                .setDestination(BillingCycleSettings.class.getName())
                .setArguments(args)
                .setTitle(getTitle())
                .setSourceMetricsCategory(MetricsProto.MetricsEvent.VIEW_UNKNOWN)
                .toIntent();
    }

    private final DataStateListener mListener = new DataStateListener() {
+12 −10
Original line number Diff line number Diff line
@@ -23,10 +23,10 @@ import android.support.v4.content.res.TypedArrayUtils;
import android.support.v7.preference.Preference;
import android.text.format.Formatter;
import android.util.AttributeSet;

import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.core.SubSettingLauncher;
import com.android.settingslib.net.DataUsageController;

public class DataUsagePreference extends Preference implements TemplatePreference {
@@ -60,16 +60,18 @@ public class DataUsagePreference extends Preference implements TemplatePreferenc

    @Override
    public Intent getIntent() {
        Bundle args = new Bundle();
        final Bundle args = new Bundle();
        args.putParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE, mTemplate);
        args.putInt(DataUsageList.EXTRA_SUB_ID, mSubId);
        final SubSettingLauncher launcher = new SubSettingLauncher(getContext())
                .setArguments(args)
                .setDestination(DataUsageList.class.getName())
                .setSourceMetricsCategory(MetricsProto.MetricsEvent.VIEW_UNKNOWN);
        if (mTitleRes > 0) {
            return Utils.onBuildStartFragmentIntent(getContext(), DataUsageList.class.getName(),
                    args, getContext().getPackageName(), mTitleRes, null, false,
                    MetricsProto.MetricsEvent.VIEW_UNKNOWN);
            launcher.setTitle(mTitleRes);
        } else {
            launcher.setTitle(getTitle());
        }
        return Utils.onBuildStartFragmentIntent(getContext(), DataUsageList.class.getName(), args,
                getContext().getPackageName(), 0, getTitle(), false,
                MetricsProto.MetricsEvent.VIEW_UNKNOWN);
        return launcher.toIntent();
    }
}
Loading