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; .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 * Returns the managed profile of the current user or {@code null} if none is found or a profile
* exists but it is disabled. * 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.internal.logging.nano.MetricsProto;
import com.android.settings.SettingsActivity; import com.android.settings.SettingsActivity;
import com.android.settings.SettingsPreferenceFragment; import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils;
import com.android.settings.applications.manageapplications.ManageApplications; import com.android.settings.applications.manageapplications.ManageApplications;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settings.wrapper.DevicePolicyManagerWrapper; import com.android.settings.wrapper.DevicePolicyManagerWrapper;
@@ -218,20 +218,18 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment
public static void startAppInfoFragment(Class<?> fragment, int titleRes, public static void startAppInfoFragment(Class<?> fragment, int titleRes,
String pkg, int uid, Fragment source, int request, int sourceMetricsCategory) { String pkg, int uid, Fragment source, int request, int sourceMetricsCategory) {
startAppInfoFragment(fragment, titleRes, pkg, uid, source.getActivity(), request, final Bundle args = new Bundle();
sourceMetricsCategory);
}
public static void startAppInfoFragment(Class<?> fragment, int titleRes,
String pkg, int uid, Activity source, int request, int sourceMetricsCategory) {
Bundle args = new Bundle();
args.putString(AppInfoBase.ARG_PACKAGE_NAME, pkg); args.putString(AppInfoBase.ARG_PACKAGE_NAME, pkg);
args.putInt(AppInfoBase.ARG_PACKAGE_UID, uid); args.putInt(AppInfoBase.ARG_PACKAGE_UID, uid);
Intent intent = Utils.onBuildStartFragmentIntent(source, fragment.getName(), new SubSettingLauncher(source.getContext())
args, null, titleRes, null, false, sourceMetricsCategory); .setDestination(fragment.getName())
source.startActivityForResultAsUser(intent, request, .setSourceMetricsCategory(sourceMetricsCategory)
new UserHandle(UserHandle.getUserId(uid))); .setTitle(titleRes)
.setArguments(args)
.setUserHandle(new UserHandle(UserHandle.getUserId(uid)))
.setResultListener(source, request)
.launch();
} }
public static class MyAlertDialogFragment extends InstrumentedDialogFragment { public static class MyAlertDialogFragment extends InstrumentedDialogFragment {

View File

@@ -101,6 +101,25 @@ public class SubSettingLauncher {
"This launcher has already been executed. Do not reuse"); "This launcher has already been executed. Do not reuse");
} }
mLaunched = true; 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); final Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClass(mContext, SubSettings.class); intent.setClass(mContext, SubSettings.class);
if (TextUtils.isEmpty(mLaunchRequest.destinationName)) { if (TextUtils.isEmpty(mLaunchRequest.destinationName)) {
@@ -123,15 +142,7 @@ public class SubSettingLauncher {
intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_AS_SHORTCUT, intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_AS_SHORTCUT,
mLaunchRequest.isShortCut); mLaunchRequest.isShortCut);
intent.addFlags(mLaunchRequest.flags); intent.addFlags(mLaunchRequest.flags);
return intent;
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);
}
} }
@VisibleForTesting @VisibleForTesting
@@ -139,14 +150,21 @@ public class SubSettingLauncher {
mContext.startActivity(intent); mContext.startActivity(intent);
} }
private static void launchForResult(Fragment listener, Intent intent, int requestCode) { @VisibleForTesting
listener.getActivity().startActivityForResult(intent, requestCode); void launchAsUser(Intent intent, UserHandle userHandle) {
}
private static void launchAsUser(Context context, Intent intent, UserHandle userHandle) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_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.internal.logging.nano.MetricsProto;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Utils; import com.android.settings.core.SubSettingLauncher;
import com.android.settings.datausage.CellDataPreference.DataStateListener; import com.android.settings.datausage.CellDataPreference.DataStateListener;
public class BillingCyclePreference extends Preference implements TemplatePreference { public class BillingCyclePreference extends Preference implements TemplatePreference {
@@ -80,8 +80,12 @@ public class BillingCyclePreference extends Preference implements TemplatePrefer
public Intent getIntent() { public Intent getIntent() {
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE, mTemplate); args.putParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE, mTemplate);
return Utils.onBuildStartFragmentIntent(getContext(), BillingCycleSettings.class.getName(), return new SubSettingLauncher(getContext())
args, null, 0, getTitle(), false, MetricsProto.MetricsEvent.VIEW_UNKNOWN); .setDestination(BillingCycleSettings.class.getName())
.setArguments(args)
.setTitle(getTitle())
.setSourceMetricsCategory(MetricsProto.MetricsEvent.VIEW_UNKNOWN)
.toIntent();
} }
private final DataStateListener mListener = new DataStateListener() { 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.support.v7.preference.Preference;
import android.text.format.Formatter; import android.text.format.Formatter;
import android.util.AttributeSet; import android.util.AttributeSet;
import com.android.internal.logging.nano.MetricsProto; import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Utils; import com.android.settings.core.SubSettingLauncher;
import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settingslib.net.DataUsageController; import com.android.settingslib.net.DataUsageController;
public class DataUsagePreference extends Preference implements TemplatePreference { public class DataUsagePreference extends Preference implements TemplatePreference {
@@ -60,16 +60,18 @@ public class DataUsagePreference extends Preference implements TemplatePreferenc
@Override @Override
public Intent getIntent() { public Intent getIntent() {
Bundle args = new Bundle(); final Bundle args = new Bundle();
args.putParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE, mTemplate); args.putParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE, mTemplate);
args.putInt(DataUsageList.EXTRA_SUB_ID, mSubId); 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) { if (mTitleRes > 0) {
return Utils.onBuildStartFragmentIntent(getContext(), DataUsageList.class.getName(), launcher.setTitle(mTitleRes);
args, getContext().getPackageName(), mTitleRes, null, false, } else {
MetricsProto.MetricsEvent.VIEW_UNKNOWN); launcher.setTitle(getTitle());
} }
return Utils.onBuildStartFragmentIntent(getContext(), DataUsageList.class.getName(), args, return launcher.toIntent();
getContext().getPackageName(), 0, getTitle(), false,
MetricsProto.MetricsEvent.VIEW_UNKNOWN);
} }
} }

View File

@@ -484,9 +484,12 @@ public class PrivateVolumeSettings extends SettingsPreferenceFragment {
args.putInt( args.putInt(
ManageApplications.EXTRA_STORAGE_TYPE, ManageApplications.EXTRA_STORAGE_TYPE,
ManageApplications.STORAGE_TYPE_LEGACY); ManageApplications.STORAGE_TYPE_LEGACY);
intent = Utils.onBuildStartFragmentIntent(getActivity(), intent = new SubSettingLauncher(getActivity())
ManageApplications.class.getName(), args, null, R.string.apps_storage, null, .setDestination(ManageApplications.class.getName())
false, getMetricsCategory()); .setArguments(args)
.setTitle(R.string.apps_storage)
.setSourceMetricsCategory(getMetricsCategory())
.toIntent();
} break; } break;
case R.string.storage_detail_images: { 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.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment; import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils;
import com.android.settings.core.SubSettingLauncher; import com.android.settings.core.SubSettingLauncher;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.dashboard.SummaryLoader; import com.android.settings.dashboard.SummaryLoader;
@@ -232,10 +231,12 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index
mHasLaunchedPrivateVolumeSettings = true; mHasLaunchedPrivateVolumeSettings = true;
final Bundle args = new Bundle(); final Bundle args = new Bundle();
args.putString(VolumeInfo.EXTRA_VOLUME_ID, VolumeInfo.ID_PRIVATE_INTERNAL); args.putString(VolumeInfo.EXTRA_VOLUME_ID, VolumeInfo.ID_PRIVATE_INTERNAL);
Intent intent = Utils.onBuildStartFragmentIntent(getActivity(), new SubSettingLauncher(getActivity())
StorageDashboardFragment.class.getName(), args, null, .setDestination(StorageDashboardFragment.class.getName())
R.string.storage_settings, null, false, getMetricsCategory()); .setArguments(args)
getActivity().startActivity(intent); .setTitle(R.string.storage_settings)
.setSourceMetricsCategory(getMetricsCategory())
.launch();
finish(); finish();
} }
} }

View File

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

View File

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

View File

@@ -16,65 +16,42 @@
package com.android.settings.notification; 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_LOW;
import static android.app.NotificationManager.IMPORTANCE_NONE; import static android.app.NotificationManager.IMPORTANCE_NONE;
import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED; import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
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 android.app.Notification; import android.app.Notification;
import android.app.NotificationChannel; import android.app.NotificationChannel;
import android.app.NotificationChannelGroup; import android.app.NotificationChannelGroup;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.pm.ActivityInfo; import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo; import android.content.pm.ResolveInfo;
import android.content.pm.UserInfo;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.UserHandle; import android.os.UserHandle;
import android.os.UserManager;
import android.provider.SearchIndexableResource;
import android.provider.Settings; 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.Preference;
import android.support.v7.preference.PreferenceGroup; import android.support.v7.preference.PreferenceGroup;
import android.support.v7.preference.PreferenceScreen; import android.support.v7.preference.PreferenceScreen;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.Log; import android.util.Log;
import android.widget.Toast; 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.ArrayList;
import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
@@ -268,11 +245,12 @@ abstract public class NotificationSettingsBase extends DashboardFragment {
channelArgs.putInt(AppInfoBase.ARG_PACKAGE_UID, mUid); channelArgs.putInt(AppInfoBase.ARG_PACKAGE_UID, mUid);
channelArgs.putString(AppInfoBase.ARG_PACKAGE_NAME, mPkg); channelArgs.putString(AppInfoBase.ARG_PACKAGE_NAME, mPkg);
channelArgs.putString(Settings.EXTRA_CHANNEL_ID, channel.getId()); channelArgs.putString(Settings.EXTRA_CHANNEL_ID, channel.getId());
Intent channelIntent = Utils.onBuildStartFragmentIntent(getActivity(), channelPref.setIntent(new SubSettingLauncher(getActivity())
ChannelNotificationSettings.class.getName(), .setDestination(ChannelNotificationSettings.class.getName())
channelArgs, null, R.string.notification_channel_title, null, false, .setArguments(channelArgs)
getMetricsCategory()); .setTitle(R.string.notification_channel_title)
channelPref.setIntent(channelIntent); .setSourceMetricsCategory(getMetricsCategory())
.toIntent());
channelPref.setOnPreferenceChangeListener( channelPref.setOnPreferenceChangeListener(
new Preference.OnPreferenceChangeListener() { new Preference.OnPreferenceChangeListener() {

View File

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

View File

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

View File

@@ -18,12 +18,18 @@ package com.android.settings.core;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any; 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.doNothing;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; 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.Context;
import android.content.Intent; import android.content.Intent;
import android.os.UserHandle;
import com.android.settings.SettingsActivity; import com.android.settings.SettingsActivity;
import com.android.settings.TestConfig; import com.android.settings.TestConfig;
@@ -34,6 +40,8 @@ import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor; import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
@@ -41,10 +49,16 @@ import org.robolectric.annotation.Config;
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class SubSettingLauncherTest { public class SubSettingLauncherTest {
@Mock
private Fragment mFragment;
@Mock
private Activity mActivity;
private Context mContext; private Context mContext;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application; mContext = RuntimeEnvironment.application;
} }
@@ -93,4 +107,58 @@ public class SubSettingLauncherTest {
assertThat(intent.getIntExtra(VisibilityLoggerMixin.EXTRA_SOURCE_METRICS_CATEGORY, -1)) assertThat(intent.getIntExtra(VisibilityLoggerMixin.EXTRA_SOURCE_METRICS_CATEGORY, -1))
.isEqualTo(123); .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 = EntityHeaderController.newInstance(mActivity, mFragment, appLinks);
mController.setPackageName("123") mController.setPackageName("123")
.setUid(UserHandle.USER_SYSTEM) .setUid(123321)
.setHasAppInfoLink(true) .setHasAppInfoLink(true)
.setButtonActions( .setButtonActions(
EntityHeaderController.ActionType.ACTION_NOTIF_PREFERENCE, EntityHeaderController.ActionType.ACTION_NOTIF_PREFERENCE,