Get rid of direct usage of Utils.onBuildStartFragmentIntent

Change-Id: I87eb97d6da4cd4f99be5bcdb1e3e245eb1c7bd1c
Fixes: 73250851
Test: robotests
This commit is contained in:
Fan Zhang
2018-02-19 14:31:50 -08:00
parent 47854c2945
commit 1f6d24a991
14 changed files with 221 additions and 168 deletions

View File

@@ -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.

View File

@@ -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 {

View File

@@ -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);
}
/**

View File

@@ -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() {

View File

@@ -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 {
@@ -38,7 +38,7 @@ public class DataUsagePreference extends Preference implements TemplatePreferenc
public DataUsagePreference(Context context, AttributeSet attrs) {
super(context, attrs);
final TypedArray a = context.obtainStyledAttributes(
attrs, new int[] { com.android.internal.R.attr.title },
attrs, new int[] {com.android.internal.R.attr.title},
TypedArrayUtils.getAttr(
context, android.support.v7.preference.R.attr.preferenceStyle,
android.R.attr.preferenceStyle), 0);
@@ -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();
}
}

View File

@@ -484,9 +484,12 @@ public class PrivateVolumeSettings extends SettingsPreferenceFragment {
args.putInt(
ManageApplications.EXTRA_STORAGE_TYPE,
ManageApplications.STORAGE_TYPE_LEGACY);
intent = Utils.onBuildStartFragmentIntent(getActivity(),
ManageApplications.class.getName(), args, null, R.string.apps_storage, null,
false, getMetricsCategory());
intent = new SubSettingLauncher(getActivity())
.setDestination(ManageApplications.class.getName())
.setArguments(args)
.setTitle(R.string.apps_storage)
.setSourceMetricsCategory(getMetricsCategory())
.toIntent();
} break;
case R.string.storage_detail_images: {

View File

@@ -47,7 +47,6 @@ import android.widget.Toast;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.dashboard.SummaryLoader;
@@ -232,10 +231,12 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index
mHasLaunchedPrivateVolumeSettings = true;
final Bundle args = new Bundle();
args.putString(VolumeInfo.EXTRA_VOLUME_ID, VolumeInfo.ID_PRIVATE_INTERNAL);
Intent intent = Utils.onBuildStartFragmentIntent(getActivity(),
StorageDashboardFragment.class.getName(), args, null,
R.string.storage_settings, null, false, getMetricsCategory());
getActivity().startActivity(intent);
new SubSettingLauncher(getActivity())
.setDestination(StorageDashboardFragment.class.getName())
.setArguments(args)
.setTitle(R.string.storage_settings)
.setSourceMetricsCategory(getMetricsCategory())
.launch();
finish();
}
}

View File

@@ -35,9 +35,9 @@ import android.util.SparseArray;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.Settings;
import com.android.settings.Utils;
import com.android.settings.applications.manageapplications.ManageApplications;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.deviceinfo.PrivateVolumeSettings.SystemInfoFragment;
import com.android.settings.deviceinfo.StorageItemPreference;
import com.android.settings.overlay.FeatureFactory;
@@ -319,15 +319,12 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle
args.putInt(
ManageApplications.EXTRA_STORAGE_TYPE,
ManageApplications.STORAGE_TYPE_PHOTOS_VIDEOS);
return Utils.onBuildStartFragmentIntent(
mContext,
ManageApplications.class.getName(),
args,
null,
R.string.storage_photos_videos,
null,
false,
mMetricsFeatureProvider.getMetricsCategory(mFragment));
return new SubSettingLauncher(mContext)
.setDestination(ManageApplications.class.getName())
.setTitle(R.string.storage_photos_videos)
.setArguments(args)
.setSourceMetricsCategory(mMetricsFeatureProvider.getMetricsCategory(mFragment))
.toIntent();
}
private Intent getAudioIntent() {
@@ -341,46 +338,57 @@ public class StorageItemPreferenceController extends AbstractPreferenceControlle
args.putString(ManageApplications.EXTRA_VOLUME_UUID, mVolume.getFsUuid());
args.putString(ManageApplications.EXTRA_VOLUME_NAME, mVolume.getDescription());
args.putInt(ManageApplications.EXTRA_STORAGE_TYPE, ManageApplications.STORAGE_TYPE_MUSIC);
return Utils.onBuildStartFragmentIntent(mContext,
ManageApplications.class.getName(), args, null, R.string.storage_music_audio, null,
false, mMetricsFeatureProvider.getMetricsCategory(mFragment));
return new SubSettingLauncher(mContext)
.setDestination(ManageApplications.class.getName())
.setTitle(R.string.storage_music_audio)
.setArguments(args)
.setSourceMetricsCategory(mMetricsFeatureProvider.getMetricsCategory(mFragment))
.toIntent();
}
private Intent getAppsIntent() {
if (mVolume == null) {
return null;
}
Bundle args = getWorkAnnotatedBundle(3);
final Bundle args = getWorkAnnotatedBundle(3);
args.putString(ManageApplications.EXTRA_CLASSNAME,
Settings.StorageUseActivity.class.getName());
args.putString(ManageApplications.EXTRA_VOLUME_UUID, mVolume.getFsUuid());
args.putString(ManageApplications.EXTRA_VOLUME_NAME, mVolume.getDescription());
return Utils.onBuildStartFragmentIntent(mContext,
ManageApplications.class.getName(), args, null, R.string.apps_storage, null,
false, mMetricsFeatureProvider.getMetricsCategory(mFragment));
return new SubSettingLauncher(mContext)
.setDestination(ManageApplications.class.getName())
.setTitle(R.string.apps_storage)
.setArguments(args)
.setSourceMetricsCategory(mMetricsFeatureProvider.getMetricsCategory(mFragment))
.toIntent();
}
private Intent getGamesIntent() {
Bundle args = getWorkAnnotatedBundle(1);
final Bundle args = getWorkAnnotatedBundle(1);
args.putString(ManageApplications.EXTRA_CLASSNAME,
Settings.GamesStorageActivity.class.getName());
return Utils.onBuildStartFragmentIntent(mContext,
ManageApplications.class.getName(), args, null, R.string.game_storage_settings,
null, false, mMetricsFeatureProvider.getMetricsCategory(mFragment));
return new SubSettingLauncher(mContext)
.setDestination(ManageApplications.class.getName())
.setTitle(R.string.game_storage_settings)
.setArguments(args)
.setSourceMetricsCategory(mMetricsFeatureProvider.getMetricsCategory(mFragment))
.toIntent();
}
private Intent getMoviesIntent() {
Bundle args = getWorkAnnotatedBundle(1);
final Bundle args = getWorkAnnotatedBundle(1);
args.putString(ManageApplications.EXTRA_CLASSNAME,
Settings.MoviesStorageActivity.class.getName());
return Utils.onBuildStartFragmentIntent(mContext,
ManageApplications.class.getName(), args, null, R.string.storage_movies_tv,
null, false, mMetricsFeatureProvider.getMetricsCategory(mFragment));
return new SubSettingLauncher(mContext)
.setDestination(ManageApplications.class.getName())
.setTitle(R.string.storage_movies_tv)
.setArguments(args)
.setSourceMetricsCategory(mMetricsFeatureProvider.getMetricsCategory(mFragment))
.toIntent();
}
private Bundle getWorkAnnotatedBundle(int additionalCapacity) {
Bundle args = new Bundle(2 + additionalCapacity);
final Bundle args = new Bundle(2 + additionalCapacity);
args.putBoolean(ManageApplications.EXTRA_WORK_ONLY, mIsWorkProfile);
args.putInt(ManageApplications.EXTRA_WORK_ID, mUserId);
return args;

View File

@@ -17,9 +17,7 @@
package com.android.settings.deviceinfo.storage;
import android.content.Context;
import android.content.Intent;
import android.content.pm.UserInfo;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.storage.VolumeInfo;
@@ -31,14 +29,16 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.internal.util.Preconditions;
import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.deviceinfo.StorageItemPreference;
import com.android.settings.deviceinfo.StorageProfileFragment;
import com.android.settings.wrapper.UserManagerWrapper;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.drawer.SettingsDrawerActivity;
/** Defines a {@link AbstractPreferenceController} which handles a single profile of the primary
* user. */
/**
* Defines a {@link AbstractPreferenceController} which handles a single profile of the primary
* user.
*/
public class UserProfileController extends AbstractPreferenceController implements
PreferenceControllerMixin, StorageAsyncLoader.ResultHandler,
UserIconLoader.UserIconHandler {
@@ -79,13 +79,16 @@ public class UserProfileController extends AbstractPreferenceController implemen
@Override
public boolean handlePreferenceTreeClick(Preference preference) {
if (preference != null && mStoragePreference == preference) {
Bundle args = new Bundle(2);
final Bundle args = new Bundle();
args.putInt(StorageProfileFragment.USER_ID_EXTRA, mUser.id);
args.putString(VolumeInfo.EXTRA_VOLUME_ID, VolumeInfo.ID_PRIVATE_INTERNAL);
Intent intent = Utils.onBuildStartFragmentIntent(mContext,
StorageProfileFragment.class.getName(), args, null, 0,
mUser.name, false, MetricsProto.MetricsEvent.DEVICEINFO_STORAGE);
mContext.startActivity(intent);
new SubSettingLauncher(mContext)
.setDestination(StorageProfileFragment.class.getName())
.setArguments(args)
.setTitle(mUser.name)
.setSourceMetricsCategory(MetricsProto.MetricsEvent.DEVICEINFO_STORAGE)
.launch();
return true;
}
@@ -99,8 +102,7 @@ public class UserProfileController extends AbstractPreferenceController implemen
int userId = mUser.id;
StorageAsyncLoader.AppsStorageResult result = stats.get(userId);
if (result != null) {
setSize(
result.externalStats.totalBytes
setSize(result.externalStats.totalBytes
+ result.otherAppsSize
+ result.videoAppsSize
+ result.musicAppsSize

View File

@@ -16,65 +16,42 @@
package com.android.settings.notification;
import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
import static android.app.NotificationManager.IMPORTANCE_LOW;
import static android.app.NotificationManager.IMPORTANCE_NONE;
import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED;
import com.android.internal.widget.LockPatternUtils;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils;
import com.android.settings.applications.AppInfoBase;
import com.android.settings.applications.LayoutPreference;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.widget.MasterCheckBoxPreference;
import com.android.settings.widget.MasterSwitchPreference;
import com.android.settings.widget.SwitchBar;
import com.android.settings.wrapper.NotificationChannelGroupWrapper;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedSwitchPreference;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.widget.FooterPreference;
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationChannelGroup;
import android.app.NotificationManager;
import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.content.pm.UserInfo;
import android.net.Uri;
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.SearchIndexableResource;
import android.provider.Settings;
import android.service.notification.NotificationListenerService;
import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceGroup;
import android.support.v7.preference.PreferenceScreen;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.Log;
import android.widget.Toast;
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.settings.R;
import com.android.settings.applications.AppInfoBase;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.widget.MasterCheckBoxPreference;
import com.android.settings.wrapper.NotificationChannelGroupWrapper;
import com.android.settingslib.RestrictedLockUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
@@ -268,11 +245,12 @@ abstract public class NotificationSettingsBase extends DashboardFragment {
channelArgs.putInt(AppInfoBase.ARG_PACKAGE_UID, mUid);
channelArgs.putString(AppInfoBase.ARG_PACKAGE_NAME, mPkg);
channelArgs.putString(Settings.EXTRA_CHANNEL_ID, channel.getId());
Intent channelIntent = Utils.onBuildStartFragmentIntent(getActivity(),
ChannelNotificationSettings.class.getName(),
channelArgs, null, R.string.notification_channel_title, null, false,
getMetricsCategory());
channelPref.setIntent(channelIntent);
channelPref.setIntent(new SubSettingLauncher(getActivity())
.setDestination(ChannelNotificationSettings.class.getName())
.setArguments(channelArgs)
.setTitle(R.string.notification_channel_title)
.setSourceMetricsCategory(getMetricsCategory())
.toIntent());
channelPref.setOnPreferenceChangeListener(
new Preference.OnPreferenceChangeListener() {

View File

@@ -33,16 +33,13 @@ import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.IconDrawableFactory;
import android.util.Log;
import android.widget.Switch;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.applications.AppInfoBase;
import com.android.settings.applications.InstalledAppCounter;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.widget.AppPreference;
import com.android.settings.widget.MasterSwitchPreference;
import com.android.settings.core.SubSettingLauncher;
import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.core.AbstractPreferenceController;
@@ -237,10 +234,13 @@ public class RecentNotifyingAppsPreferenceController extends AbstractPreferenceC
args.putString(AppInfoBase.ARG_PACKAGE_NAME, pkgName);
args.putInt(AppInfoBase.ARG_PACKAGE_UID, appEntry.info.uid);
pref.setIntent(Utils.onBuildStartFragmentIntent(mHost.getActivity(),
AppNotificationSettings.class.getName(), args, null,
R.string.notifications_title, null, false,
MetricsProto.MetricsEvent.MANAGE_APPLICATIONS_NOTIFICATIONS));
pref.setIntent(new SubSettingLauncher(mHost.getActivity())
.setDestination(AppNotificationSettings.class.getName())
.setTitle(R.string.notifications_title)
.setArguments(args)
.setSourceMetricsCategory(
MetricsProto.MetricsEvent.MANAGE_APPLICATIONS_NOTIFICATIONS)
.toIntent());
pref.setOnPreferenceChangeListener((preference, newValue) -> {
boolean blocked = !(Boolean) newValue;
mNotificationBackend.setNotificationsEnabledForPackage(

View File

@@ -26,9 +26,9 @@ import android.util.Log;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.SettingsActivity;
import com.android.settings.Utils;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.SubSettingLauncher;
import com.android.settingslib.core.AbstractPreferenceController;
import java.lang.reflect.Field;
@@ -59,8 +59,12 @@ public class DatabaseIndexingUtils {
String screenTitle, int sourceMetricsCategory) {
final Bundle args = new Bundle();
args.putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, key);
final Intent searchDestination = Utils.onBuildStartFragmentIntent(context,
className, args, null, 0, screenTitle, false, sourceMetricsCategory);
final Intent searchDestination = new SubSettingLauncher(context)
.setDestination(className)
.setArguments(args)
.setTitle(screenTitle)
.setSourceMetricsCategory(sourceMetricsCategory)
.toIntent();
searchDestination.putExtra(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, key)
.setAction("com.android.settings.SEARCH_RESULT_TRAMPOLINE")
.setComponent(null);

View File

@@ -18,12 +18,18 @@ package com.android.settings.core;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.Activity;
import android.app.Fragment;
import android.content.Context;
import android.content.Intent;
import android.os.UserHandle;
import com.android.settings.SettingsActivity;
import com.android.settings.TestConfig;
@@ -34,6 +40,8 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
@@ -41,10 +49,16 @@ import org.robolectric.annotation.Config;
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class SubSettingLauncherTest {
@Mock
private Fragment mFragment;
@Mock
private Activity mActivity;
private Context mContext;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
}
@@ -93,4 +107,58 @@ public class SubSettingLauncherTest {
assertThat(intent.getIntExtra(VisibilityLoggerMixin.EXTRA_SOURCE_METRICS_CATEGORY, -1))
.isEqualTo(123);
}
@Test
public void launch_hasRequestListener_shouldStartActivityForResult() {
final int requestCode = 123123;
when(mFragment.getActivity()).thenReturn(mActivity);
final SubSettingLauncher launcher = spy(new SubSettingLauncher(mContext));
launcher.setTitle("123")
.setDestination(SubSettingLauncherTest.class.getName())
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.setSourceMetricsCategory(123)
.setResultListener(mFragment, requestCode)
.launch();
verify(mActivity).startActivityForResult(any(Intent.class), eq(requestCode));
}
@Test
public void launch_hasUserHandle_shouldStartActivityAsUser() {
final UserHandle userHandle = new UserHandle(1234);
final SubSettingLauncher launcher = spy(new SubSettingLauncher(mContext));
doNothing().when(launcher).launchAsUser(any(Intent.class), any(UserHandle.class));
launcher.setTitle("123")
.setDestination(SubSettingLauncherTest.class.getName())
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.setSourceMetricsCategory(123)
.setUserHandle(userHandle)
.launch();
verify(launcher).launchAsUser(any(Intent.class), eq(userHandle));
}
@Test
public void launch_hasUserHandleAndRequestCode_shouldStartActivityForResultAsUser() {
final int requestCode = 123123;
final UserHandle userHandle = new UserHandle(1234);
final SubSettingLauncher launcher = spy(new SubSettingLauncher(mContext));
doNothing().when(launcher).launchForResultAsUser(
any(Intent.class), any(UserHandle.class), any(Fragment.class), anyInt());
launcher.setTitle("123")
.setDestination(SubSettingLauncherTest.class.getName())
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.setSourceMetricsCategory(123)
.setUserHandle(userHandle)
.setResultListener(mFragment, requestCode)
.launch();
verify(launcher).launchForResultAsUser(any(Intent.class), eq(userHandle), eq(mFragment),
eq(requestCode));
}
}

View File

@@ -270,7 +270,7 @@ public class EntityHeaderControllerTest {
mController = EntityHeaderController.newInstance(mActivity, mFragment, appLinks);
mController.setPackageName("123")
.setUid(UserHandle.USER_SYSTEM)
.setUid(123321)
.setHasAppInfoLink(true)
.setButtonActions(
EntityHeaderController.ActionType.ACTION_NOTIF_PREFERENCE,