diff --git a/src/com/android/settings/MasterClear.java b/src/com/android/settings/MasterClear.java index 4f5c6b95bfc..f66b1f91a61 100644 --- a/src/com/android/settings/MasterClear.java +++ b/src/com/android/settings/MasterClear.java @@ -56,6 +56,7 @@ import android.widget.TextView; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.core.InstrumentedFragment; +import com.android.settings.core.SubSettingLauncher; import com.android.settings.password.ChooseLockSettingsHelper; import com.android.settings.password.ConfirmLockPattern; import com.android.settingslib.RestrictedLockUtils; @@ -156,12 +157,15 @@ public class MasterClear extends InstrumentedFragment { @VisibleForTesting void showFinalConfirmation() { - Bundle args = new Bundle(); + final Bundle args = new Bundle(); args.putBoolean(ERASE_EXTERNAL_EXTRA, mExternalStorage.isChecked()); args.putBoolean(ERASE_ESIMS_EXTRA, mEsimStorage.isChecked()); - ((SettingsActivity) getActivity()).startPreferencePanel( - this, MasterClearConfirm.class.getName(), - args, R.string.master_clear_confirm_title, null, null, 0); + new SubSettingLauncher(getContext()) + .setDestination(MasterClearConfirm.class.getName()) + .setArguments(args) + .setTitle(R.string.master_clear_confirm_title) + .setSourceMetricsCategory(getMetricsCategory()) + .launch(); } @VisibleForTesting diff --git a/src/com/android/settings/ResetNetwork.java b/src/com/android/settings/ResetNetwork.java index 5cbee6385df..8043750a743 100644 --- a/src/com/android/settings/ResetNetwork.java +++ b/src/com/android/settings/ResetNetwork.java @@ -44,6 +44,7 @@ import android.widget.TextView; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.telephony.PhoneConstants; import com.android.settings.core.InstrumentedFragment; +import com.android.settings.core.SubSettingLauncher; import com.android.settings.password.ChooseLockSettingsHelper; import com.android.settings.password.ConfirmLockPattern; import com.android.settingslib.RestrictedLockUtils; @@ -118,9 +119,12 @@ public class ResetNetwork extends InstrumentedFragment { args.putInt(PhoneConstants.SUBSCRIPTION_KEY, subscription.getSubscriptionId()); } args.putBoolean(MasterClear.ERASE_ESIMS_EXTRA, mEsimCheckbox.isChecked()); - ((SettingsActivity) getActivity()).startPreferencePanel( - this, ResetNetworkConfirm.class.getName(), - args, R.string.reset_network_confirm_title, null, null, 0); + new SubSettingLauncher(getContext()) + .setDestination(ResetNetworkConfirm.class.getName()) + .setArguments(args) + .setTitle(R.string.reset_network_confirm_title) + .setSourceMetricsCategory(getMetricsCategory()) + .launch(); } /** diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index 84b107191af..d28eed6f225 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -66,6 +66,7 @@ import com.android.settings.dashboard.DashboardSummary; import com.android.settings.overlay.FeatureFactory; import com.android.settings.wfd.WifiDisplaySettings; import com.android.settings.widget.SwitchBar; +import com.android.settingslib.core.instrumentation.Instrumentable; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.instrumentation.SharedPreferencesLogger; import com.android.settingslib.development.DevelopmentSettingsEnabler; @@ -200,7 +201,14 @@ public class SettingsActivity extends SettingsDrawerActivity @Override public boolean onPreferenceStartFragment(PreferenceFragment caller, Preference pref) { - startPreferencePanel(caller, pref.getFragment(), pref.getExtras(), -1, null, null, 0); + new SubSettingLauncher(this) + .setDestination(pref.getFragment()) + .setArguments(pref.getExtras()) + .setSourceMetricsCategory(caller instanceof Instrumentable + ? ((Instrumentable) caller).getMetricsCategory() + : Instrumentable.METRICS_CATEGORY_UNKNOWN) + .setTitle(-1) + .launch(); return true; } @@ -594,6 +602,7 @@ public class SettingsActivity extends SettingsDrawerActivity * @param resultRequestCode If resultTo is non-null, this is the caller's * request code to be received with the result. */ + @Deprecated public void startPreferencePanel(Fragment caller, String fragmentClass, Bundle args, int titleRes, CharSequence titleText, Fragment resultTo, int resultRequestCode) { String title = null; diff --git a/src/com/android/settings/accounts/AccountPreferenceController.java b/src/com/android/settings/accounts/AccountPreferenceController.java index 6127ab9bccc..268cb44f2a0 100644 --- a/src/com/android/settings/accounts/AccountPreferenceController.java +++ b/src/com/android/settings/accounts/AccountPreferenceController.java @@ -47,10 +47,10 @@ import android.util.SparseArray; import com.android.internal.annotations.VisibleForTesting; import com.android.settings.AccessiblePreferenceCategory; import com.android.settings.R; -import com.android.settings.SettingsActivity; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; import com.android.settings.core.PreferenceControllerMixin; +import com.android.settings.core.SubSettingLauncher; import com.android.settings.overlay.FeatureFactory; import com.android.settings.search.SearchIndexableRaw; import com.android.settingslib.RestrictedPreference; @@ -246,19 +246,19 @@ public class AccountPreferenceController extends AbstractPreferenceController if (preference == profileData.managedProfilePreference) { Bundle arguments = new Bundle(); arguments.putParcelable(Intent.EXTRA_USER, profileData.userInfo.getUserHandle()); - ((SettingsActivity) mParent.getActivity()).startPreferencePanel(mParent, - ManagedProfileSettings.class.getName(), arguments, - R.string.managed_profile_settings_title, null, null, 0); + new SubSettingLauncher(mContext) + .setSourceMetricsCategory(mParent.getMetricsCategory()) + .setDestination(ManagedProfileSettings.class.getName()) + .setTitle(R.string.managed_profile_settings_title) + .setArguments(arguments) + .launch(); + return true; } } return false; } - SparseArray getProfileData() { - return mProfiles; - } - private void updateUi() { if (!isAvailable()) { // This should not happen diff --git a/src/com/android/settings/accounts/AccountTypePreferenceLoader.java b/src/com/android/settings/accounts/AccountTypePreferenceLoader.java index 0e19dab6c06..a90a3d3ddef 100644 --- a/src/com/android/settings/accounts/AccountTypePreferenceLoader.java +++ b/src/com/android/settings/accounts/AccountTypePreferenceLoader.java @@ -38,10 +38,11 @@ import android.text.TextUtils; import android.util.Log; import com.android.settings.R; -import com.android.settings.SettingsActivity; +import com.android.settings.core.SubSettingLauncher; import com.android.settings.location.LocationSettings; import com.android.settings.utils.LocalClassLoaderContextThemeWrapper; import com.android.settingslib.accounts.AuthenticatorHelper; +import com.android.settingslib.core.instrumentation.Instrumentable; /** * Class to load the preference screen to be added to the settings page for the specific account @@ -230,8 +231,15 @@ public class AccountTypePreferenceLoader { @Override public boolean onPreferenceClick(Preference preference) { - ((SettingsActivity) mFragment.getActivity()).startPreferencePanel(mFragment, - mClass, null, mTitleRes, null, null, 0); + final int metricsCategory = (mFragment instanceof Instrumentable) + ? ((Instrumentable) mFragment).getMetricsCategory() + : Instrumentable.METRICS_CATEGORY_UNKNOWN; + new SubSettingLauncher(preference.getContext()) + .setTitle(mTitleRes) + .setDestination(mClass) + .setSourceMetricsCategory(metricsCategory) + .launch(); + // Hack: announce that the Google account preferences page is launching the location // settings if (mClass.equals(LocationSettings.class.getName())) { diff --git a/src/com/android/settings/applications/ConvertToFbe.java b/src/com/android/settings/applications/ConvertToFbe.java index 5f5ebd92c45..70ee415eaa8 100644 --- a/src/com/android/settings/applications/ConvertToFbe.java +++ b/src/com/android/settings/applications/ConvertToFbe.java @@ -27,22 +27,21 @@ import android.widget.Button; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; -import com.android.settings.SettingsActivity; import com.android.settings.core.InstrumentedFragment; +import com.android.settings.core.SubSettingLauncher; import com.android.settings.password.ChooseLockSettingsHelper; /* Class to prompt for conversion of userdata to file based encryption */ public class ConvertToFbe extends InstrumentedFragment { static final String TAG = "ConvertToFBE"; - static final String CONVERT_FBE_EXTRA = "ConvertFBE"; private static final int KEYGUARD_REQUEST = 55; private boolean runKeyguardConfirmation(int request) { Resources res = getActivity().getResources(); return new ChooseLockSettingsHelper(getActivity(), this) - .launchConfirmationActivity(request, - res.getText(R.string.convert_to_file_encryption)); + .launchConfirmationActivity(request, + res.getText(R.string.convert_to_file_encryption)); } @Override @@ -53,15 +52,13 @@ public class ConvertToFbe extends InstrumentedFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { + Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.convert_fbe, null); - final Button button = (Button) rootView.findViewById(R.id.button_convert_fbe); - button.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - if(!runKeyguardConfirmation(KEYGUARD_REQUEST)) { - convert(); - } + final Button button = rootView.findViewById(R.id.button_convert_fbe); + button.setOnClickListener(v -> { + if (!runKeyguardConfirmation(KEYGUARD_REQUEST)) { + convert(); } }); @@ -84,9 +81,11 @@ public class ConvertToFbe extends InstrumentedFragment { } private void convert() { - SettingsActivity sa = (SettingsActivity) getActivity(); - sa.startPreferencePanel(this, ConfirmConvertToFbe.class.getName(), null, - R.string.convert_to_file_encryption, null, null, 0); + new SubSettingLauncher(getContext()) + .setDestination(ConfirmConvertToFbe.class.getName()) + .setTitle(R.string.convert_to_file_encryption) + .setSourceMetricsCategory(getMetricsCategory()) + .launch(); } @Override diff --git a/src/com/android/settings/applications/ProcessStatsBase.java b/src/com/android/settings/applications/ProcessStatsBase.java index b98d0ba609b..67a324bb1e6 100644 --- a/src/com/android/settings/applications/ProcessStatsBase.java +++ b/src/com/android/settings/applications/ProcessStatsBase.java @@ -28,6 +28,8 @@ import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.applications.ProcStatsData.MemInfo; +import com.android.settings.core.SubSettingLauncher; +import com.android.settingslib.core.instrumentation.Instrumentable; public abstract class ProcessStatsBase extends SettingsPreferenceFragment implements OnItemSelectedListener { @@ -44,9 +46,9 @@ public abstract class ProcessStatsBase extends SettingsPreferenceFragment // smaller than the actual time selected instead of bumping up to 3 hours // beyond it. private static final long DURATION_QUANTUM = ProcessStats.COMMIT_PERIOD; - public static long[] sDurations = new long[] { - 3 * 60 * 60 * 1000 - DURATION_QUANTUM / 2, 6 * 60 *60 * 1000 - DURATION_QUANTUM / 2, - 12 * 60 * 60 * 1000 - DURATION_QUANTUM / 2, 24 * 60 * 60 * 1000 - DURATION_QUANTUM / 2 + public static long[] sDurations = new long[] { + 3 * 60 * 60 * 1000 - DURATION_QUANTUM / 2, 6 * 60 * 60 * 1000 - DURATION_QUANTUM / 2, + 12 * 60 * 60 * 1000 - DURATION_QUANTUM / 2, 24 * 60 * 60 * 1000 - DURATION_QUANTUM / 2 }; protected static int[] sDurationLabels = new int[] { R.string.menu_duration_3h, R.string.menu_duration_6h, @@ -137,7 +139,11 @@ public abstract class ProcessStatsBase extends SettingsPreferenceFragment args.putDouble(ProcessStatsDetail.EXTRA_MAX_MEMORY_USAGE, memInfo.usedWeight * memInfo.weightToRam); args.putDouble(ProcessStatsDetail.EXTRA_TOTAL_SCALE, memInfo.totalScale); - activity.startPreferencePanel(null, ProcessStatsDetail.class.getName(), args, - R.string.memory_usage, null, null, 0); + new SubSettingLauncher(activity) + .setDestination(ProcessStatsDetail.class.getName()) + .setTitle(R.string.memory_usage) + .setArguments(args) + .setSourceMetricsCategory(Instrumentable.METRICS_CATEGORY_UNKNOWN) + .launch(); } } diff --git a/src/com/android/settings/applications/RunningProcessesView.java b/src/com/android/settings/applications/RunningProcessesView.java index dd8bcf89a67..650f56cca59 100644 --- a/src/com/android/settings/applications/RunningProcessesView.java +++ b/src/com/android/settings/applications/RunningProcessesView.java @@ -18,7 +18,6 @@ package com.android.settings.applications; import android.app.ActivityManager; import android.app.Dialog; -import android.app.Fragment; import android.content.Context; import android.content.pm.PackageManager; import android.os.Bundle; @@ -41,8 +40,9 @@ import android.widget.TextView; import com.android.internal.util.MemInfoReader; import com.android.settings.R; -import com.android.settings.SettingsActivity; +import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; +import com.android.settings.core.SubSettingLauncher; import com.android.settings.widget.LinearColorBar; import java.util.ArrayList; @@ -64,7 +64,7 @@ public class RunningProcessesView extends FrameLayout RunningState mState; - Fragment mOwner; + SettingsPreferenceFragment mOwner; Runnable mDataAvail; @@ -411,9 +411,12 @@ public class RunningProcessesView extends FrameLayout args.putInt(RunningServiceDetails.KEY_USER_ID, mi.mUserId); args.putBoolean(RunningServiceDetails.KEY_BACKGROUND, mAdapter.mShowBackground); - SettingsActivity sa = (SettingsActivity) mOwner.getActivity(); - sa.startPreferencePanel(mOwner, RunningServiceDetails.class.getName(), args, - R.string.runningservicedetails_settings_title, null, null, 0); + new SubSettingLauncher(getContext()) + .setDestination(RunningServiceDetails.class.getName()) + .setArguments(args) + .setTitle(R.string.runningservicedetails_settings_title) + .setSourceMetricsCategory(mOwner.getMetricsCategory()) + .launch(); } } @@ -466,7 +469,7 @@ public class RunningProcessesView extends FrameLayout mOwner = null; } - public boolean doResume(Fragment owner, Runnable dataAvail) { + public boolean doResume(SettingsPreferenceFragment owner, Runnable dataAvail) { mOwner = owner; mState.resume(this); if (mState.hasData()) { diff --git a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java index a5f06a557f2..98029685478 100755 --- a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java +++ b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java @@ -51,6 +51,7 @@ import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.applications.manageapplications.ManageApplications; +import com.android.settings.core.SubSettingLauncher; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.widget.PreferenceCategoryController; @@ -513,10 +514,13 @@ public class AppInfoDashboardFragment extends DashboardFragment } args.putString(ARG_PACKAGE_NAME, appEntry.info.packageName); args.putInt(ARG_PACKAGE_UID, appEntry.info.uid); - - final SettingsActivity sa = (SettingsActivity) caller.getActivity(); - sa.startPreferencePanel(caller, fragment.getName(), args, title, null, caller, - SUB_INFO_FRAGMENT); + new SubSettingLauncher(caller.getContext()) + .setDestination(fragment.getName()) + .setArguments(args) + .setTitle(title) + .setResultListener(caller, SUB_INFO_FRAGMENT) + .setSourceMetricsCategory(caller.getMetricsCategory()) + .launch(); } void handleUninstallButtonClick() { diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java index b0949ea4a62..f9794d2b6bd 100644 --- a/src/com/android/settings/applications/manageapplications/ManageApplications.java +++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java @@ -78,18 +78,18 @@ import com.android.settings.SettingsActivity; import com.android.settings.applications.AppInfoBase; import com.android.settings.applications.AppStateAppOpsBridge.PermissionState; import com.android.settings.applications.AppStateBaseBridge; +import com.android.settings.applications.AppStateDirectoryAccessBridge; import com.android.settings.applications.AppStateInstallAppsBridge; import com.android.settings.applications.AppStateNotificationBridge; import com.android.settings.applications.AppStateOverlayBridge; import com.android.settings.applications.AppStatePowerBridge; -import com.android.settings.applications.AppStateDirectoryAccessBridge; import com.android.settings.applications.AppStateUsageBridge; import com.android.settings.applications.AppStateUsageBridge.UsageState; import com.android.settings.applications.AppStateWriteSettingsBridge; import com.android.settings.applications.AppStorageSettings; import com.android.settings.applications.DefaultAppSettings; -import com.android.settings.applications.InstalledAppCounter; import com.android.settings.applications.DirectoryAccessDetails; +import com.android.settings.applications.InstalledAppCounter; import com.android.settings.applications.UsageAccessDetails; import com.android.settings.applications.appinfo.AppInfoDashboardFragment; import com.android.settings.applications.appinfo.AppNotificationPreferenceController; @@ -97,6 +97,7 @@ import com.android.settings.applications.appinfo.DrawOverlayDetails; import com.android.settings.applications.appinfo.ExternalSourcesDetails; import com.android.settings.applications.appinfo.WriteSettingsDetails; import com.android.settings.core.InstrumentedPreferenceFragment; +import com.android.settings.core.SubSettingLauncher; import com.android.settings.dashboard.SummaryLoader; import com.android.settings.fuelgauge.HighPowerDetail; import com.android.settings.notification.AppNotificationSettings; @@ -628,14 +629,19 @@ public class ManageApplications extends InstrumentedPreferenceFragment return true; case R.id.advanced: if (mListType == LIST_TYPE_NOTIFICATION) { - ((SettingsActivity) getActivity()).startPreferencePanel(this, - ConfigureNotificationSettings.class.getName(), null, - R.string.configure_notification_settings, null, this, - ADVANCED_SETTINGS); + new SubSettingLauncher(getContext()) + .setDestination(ConfigureNotificationSettings.class.getName()) + .setTitle(R.string.configure_notification_settings) + .setSourceMetricsCategory(getMetricsCategory()) + .setResultListener(this, ADVANCED_SETTINGS) + .launch(); } else { - ((SettingsActivity) getActivity()).startPreferencePanel(this, - DefaultAppSettings.class.getName(), null, R.string.configure_apps, - null, this, ADVANCED_SETTINGS); + new SubSettingLauncher(getContext()) + .setDestination(DefaultAppSettings.class.getName()) + .setTitle(R.string.configure_apps) + .setSourceMetricsCategory(getMetricsCategory()) + .setResultListener(this, ADVANCED_SETTINGS) + .launch(); } return true; default: diff --git a/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java b/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java index 2862083115d..dbe2c1b336a 100644 --- a/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java +++ b/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java @@ -21,11 +21,12 @@ import android.os.Bundle; import android.os.SystemProperties; import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; +import android.util.Log; import com.android.settings.R; -import com.android.settings.SettingsActivity; -import com.android.settings.dashboard.DashboardFragment; import com.android.settings.connecteddevice.DevicePreferenceCallback; +import com.android.settings.core.SubSettingLauncher; +import com.android.settings.dashboard.DashboardFragment; import com.android.settings.widget.GearPreference; import com.android.settingslib.bluetooth.A2dpProfile; import com.android.settingslib.bluetooth.BluetoothCallback; @@ -39,8 +40,6 @@ import java.util.HashMap; import java.util.Map; import java.util.Objects; -import android.util.Log; - /** * Update the bluetooth devices. It gets bluetooth event from {@link LocalBluetoothManager} using * {@link BluetoothCallback}. It notifies the upper level whether to add/remove the preference @@ -73,10 +72,13 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback { final Bundle args = new Bundle(); args.putString(BluetoothDeviceDetailsFragment.KEY_DEVICE_ADDRESS, device.getDevice().getAddress()); - final SettingsActivity activity = (SettingsActivity) mFragment.getActivity(); - activity.startPreferencePanel(mFragment, - BluetoothDeviceDetailsFragment.class.getName(), args, - R.string.device_details_title, null, null, 0); + + new SubSettingLauncher(mFragment.getContext()) + .setDestination(BluetoothDeviceDetailsFragment.class.getName()) + .setArguments(args) + .setTitle(R.string.device_details_title) + .setSourceMetricsCategory(mFragment.getMetricsCategory()) + .launch(); }; diff --git a/src/com/android/settings/bluetooth/BluetoothSettings.java b/src/com/android/settings/bluetooth/BluetoothSettings.java index 3acd4775102..8b648788b99 100644 --- a/src/com/android/settings/bluetooth/BluetoothSettings.java +++ b/src/com/android/settings/bluetooth/BluetoothSettings.java @@ -39,6 +39,7 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.LinkifyUtils; import com.android.settings.R; import com.android.settings.SettingsActivity; +import com.android.settings.core.SubSettingLauncher; import com.android.settings.dashboard.SummaryLoader; import com.android.settings.location.ScanningSettings; import com.android.settings.overlay.FeatureFactory; @@ -248,11 +249,11 @@ public class BluetoothSettings extends DeviceListPreferenceFragment implements I LinkifyUtils.linkify(emptyView, contentBuilder, new LinkifyUtils.OnClickListener() { @Override public void onClick() { - final SettingsActivity activity = - (SettingsActivity) BluetoothSettings.this.getActivity(); - activity.startPreferencePanel(BluetoothSettings.this, - ScanningSettings.class.getName(), null, - R.string.location_scanning_screen_title, null, null, 0); + new SubSettingLauncher(getActivity()) + .setSourceMetricsCategory(getMetricsCategory()) + .setDestination(ScanningSettings.class.getName()) + .setTitle(R.string.location_scanning_screen_title) + .launch(); } }); } @@ -322,11 +323,12 @@ public class BluetoothSettings extends DeviceListPreferenceFragment implements I // New version - uses a separate screen. args.putString(BluetoothDeviceDetailsFragment.KEY_DEVICE_ADDRESS, device.getDevice().getAddress()); - final SettingsActivity activity = - (SettingsActivity) BluetoothSettings.this.getActivity(); - activity.startPreferencePanel(this, - BluetoothDeviceDetailsFragment.class.getName(), args, - R.string.device_details_title, null, null, 0); + new SubSettingLauncher(context) + .setDestination(BluetoothDeviceDetailsFragment.class.getName()) + .setArguments(args) + .setTitle(R.string.device_details_title) + .setSourceMetricsCategory(getMetricsCategory()) + .launch(); } }; diff --git a/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java b/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java index dd2990299aa..b637e35a98a 100644 --- a/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java +++ b/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java @@ -16,13 +16,11 @@ package com.android.settings.connecteddevice.usb; import android.content.Context; -import android.os.Bundle; import android.support.annotation.VisibleForTesting; -import android.support.v14.preference.PreferenceFragment; import com.android.settings.R; -import com.android.settings.SettingsActivity; import com.android.settings.connecteddevice.DevicePreferenceCallback; +import com.android.settings.core.SubSettingLauncher; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.widget.GearPreference; @@ -30,7 +28,7 @@ import com.android.settings.widget.GearPreference; * Controller to maintain connected usb device */ public class ConnectedUsbDeviceUpdater { - private PreferenceFragment mFragment; + private DashboardFragment mFragment; private UsbBackend mUsbBackend; private DevicePreferenceCallback mDevicePreferenceCallback; @VisibleForTesting @@ -81,11 +79,11 @@ public class ConnectedUsbDeviceUpdater { mUsbPreference.setSelectable(false); mUsbPreference.setOnGearClickListener((GearPreference p) -> { // New version - uses a separate screen. - final Bundle args = new Bundle(); - final SettingsActivity activity = (SettingsActivity) mFragment.getContext(); - activity.startPreferencePanel(mFragment, - UsbDetailsFragment.class.getName(), args, - R.string.device_details_title, null /* titleText */, null /* resultTo */, 0); + new SubSettingLauncher(mFragment.getContext()) + .setDestination(UsbDetailsFragment.class.getName()) + .setTitle(R.string.device_details_title) + .setSourceMetricsCategory(mFragment.getMetricsCategory()) + .launch(); }); forceUpdate(); diff --git a/src/com/android/settings/core/SubSettingLauncher.java b/src/com/android/settings/core/SubSettingLauncher.java index 8e0f85942e5..bc79cf87589 100644 --- a/src/com/android/settings/core/SubSettingLauncher.java +++ b/src/com/android/settings/core/SubSettingLauncher.java @@ -108,7 +108,7 @@ public class SubSettingLauncher { } intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT, mLaunchRequest.destinationName); - if (mLaunchRequest.sourceMetricsCategory <= 0) { + if (mLaunchRequest.sourceMetricsCategory < 0) { throw new IllegalArgumentException("Source metrics category must be set"); } intent.putExtra(VisibilityLoggerMixin.EXTRA_SOURCE_METRICS_CATEGORY, diff --git a/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceController.java index da5b6c6dec3..ab3ce8da0a3 100644 --- a/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceController.java +++ b/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceController.java @@ -14,7 +14,6 @@ package com.android.settings.fuelgauge; -import android.app.Fragment; import android.os.Bundle; import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; @@ -24,6 +23,8 @@ import com.android.settings.Settings; import com.android.settings.SettingsActivity; import com.android.settings.applications.manageapplications.ManageApplications; import com.android.settings.core.PreferenceControllerMixin; +import com.android.settings.core.SubSettingLauncher; +import com.android.settings.dashboard.DashboardFragment; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.fuelgauge.PowerWhitelistBackend; @@ -37,12 +38,12 @@ public class BatteryOptimizationPreferenceController extends AbstractPreferenceC private PowerWhitelistBackend mBackend; - private Fragment mFragment; + private DashboardFragment mFragment; private SettingsActivity mSettingsActivity; private String mPackageName; public BatteryOptimizationPreferenceController(SettingsActivity settingsActivity, - Fragment fragment, String packageName) { + DashboardFragment fragment, String packageName) { super(settingsActivity); mFragment = fragment; mSettingsActivity = settingsActivity; @@ -52,7 +53,7 @@ public class BatteryOptimizationPreferenceController extends AbstractPreferenceC @VisibleForTesting BatteryOptimizationPreferenceController(SettingsActivity settingsActivity, - Fragment fragment, String packageName, PowerWhitelistBackend backend) { + DashboardFragment fragment, String packageName, PowerWhitelistBackend backend) { super(settingsActivity); mFragment = fragment; mSettingsActivity = settingsActivity; @@ -82,11 +83,16 @@ public class BatteryOptimizationPreferenceController extends AbstractPreferenceC return false; } - Bundle args = new Bundle(1); + final Bundle args = new Bundle(); args.putString(ManageApplications.EXTRA_CLASSNAME, Settings.HighPowerApplicationsActivity.class.getName()); - mSettingsActivity.startPreferencePanel(mFragment, ManageApplications.class.getName(), args, - R.string.high_power_apps, null, null, 0); + new SubSettingLauncher(mSettingsActivity) + .setDestination(ManageApplications.class.getName()) + .setArguments(args) + .setTitle(R.string.high_power_apps) + .setSourceMetricsCategory(mFragment.getMetricsCategory()) + .launch(); + return true; } diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java b/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java index e6c49237218..4fe193fa672 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java +++ b/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java @@ -54,6 +54,7 @@ import com.android.settings.SettingsActivity; import com.android.settings.Utils; import com.android.settings.applications.LayoutPreference; import com.android.settings.applications.manageapplications.ManageApplications; +import com.android.settings.core.SubSettingLauncher; import com.android.settings.dashboard.SummaryLoader; import com.android.settings.display.AmbientDisplayPreferenceController; import com.android.settings.display.AutoBrightnessPreferenceController; @@ -365,8 +366,12 @@ public class PowerUsageSummaryLegacy extends PowerUsageBase implements Bundle args = new Bundle(); args.putString(ManageApplications.EXTRA_CLASSNAME, HighPowerApplicationsActivity.class.getName()); - sa.startPreferencePanel(this, ManageApplications.class.getName(), args, - R.string.high_power_apps, null, null, 0); + new SubSettingLauncher(context) + .setDestination(ManageApplications.class.getName()) + .setArguments(args) + .setTitle(R.string.high_power_apps) + .setSourceMetricsCategory(getMetricsCategory()) + .launch(); metricsFeatureProvider.action(context, MetricsEvent.ACTION_SETTINGS_MENU_BATTERY_OPTIMIZATION); return true; diff --git a/src/com/android/settings/inputmethod/UserDictionarySettings.java b/src/com/android/settings/inputmethod/UserDictionarySettings.java index 3bbc581ac82..e80fdf37653 100644 --- a/src/com/android/settings/inputmethod/UserDictionarySettings.java +++ b/src/com/android/settings/inputmethod/UserDictionarySettings.java @@ -42,9 +42,9 @@ import android.widget.SimpleCursorAdapter; import android.widget.TextView; import com.android.internal.logging.nano.MetricsProto; -import com.android.settings.overlay.FeatureFactory; import com.android.settings.R; -import com.android.settings.SettingsActivity; +import com.android.settings.core.SubSettingLauncher; +import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.core.instrumentation.Instrumentable; import com.android.settingslib.core.instrumentation.VisibilityLoggerMixin; @@ -187,10 +187,14 @@ public class UserDictionarySettings extends ListFragment implements Instrumentab args.putString(UserDictionaryAddWordContents.EXTRA_WORD, editingWord); args.putString(UserDictionaryAddWordContents.EXTRA_SHORTCUT, editingShortcut); args.putString(UserDictionaryAddWordContents.EXTRA_LOCALE, mLocale); - SettingsActivity sa = (SettingsActivity) getActivity(); - sa.startPreferencePanel(this, - com.android.settings.inputmethod.UserDictionaryAddWordFragment.class.getName(), - args, R.string.user_dict_settings_add_dialog_title, null, null, 0); + + new SubSettingLauncher(getContext()) + .setDestination(UserDictionaryAddWordFragment.class.getName()) + .setArguments(args) + .setTitle(R.string.user_dict_settings_add_dialog_title) + .setSourceMetricsCategory(getMetricsCategory()) + .launch(); + } private String getWord(final int position) { diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java index f6bacd85565..3c16b073c7b 100644 --- a/src/com/android/settings/users/UserSettings.java +++ b/src/com/android/settings/users/UserSettings.java @@ -61,9 +61,9 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.util.UserIcons; import com.android.internal.widget.LockPatternUtils; import com.android.settings.R; -import com.android.settings.SettingsActivity; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; +import com.android.settings.core.SubSettingLauncher; import com.android.settings.dashboard.SummaryLoader; import com.android.settings.password.ChooseLockGeneric; import com.android.settings.search.BaseSearchIndexProvider; @@ -484,9 +484,12 @@ public class UserSettings extends SettingsPreferenceFragment if (userId == UserPreference.USERID_GUEST_DEFAULTS) { Bundle extras = new Bundle(); extras.putBoolean(UserDetailsSettings.EXTRA_USER_GUEST, true); - ((SettingsActivity) getActivity()).startPreferencePanel(this, - UserDetailsSettings.class.getName(), - extras, R.string.user_guest, null, null, 0); + new SubSettingLauncher(getContext()) + .setDestination(UserDetailsSettings.class.getName()) + .setArguments(extras) + .setTitle(R.string.user_guest) + .setSourceMetricsCategory(getMetricsCategory()) + .launch(); return; } UserInfo info = mUserManager.getUserInfo(userId); @@ -494,23 +497,24 @@ public class UserSettings extends SettingsPreferenceFragment Bundle extras = new Bundle(); extras.putInt(RestrictedProfileSettings.EXTRA_USER_ID, userId); extras.putBoolean(RestrictedProfileSettings.EXTRA_NEW_USER, newUser); - ((SettingsActivity) getActivity()).startPreferencePanel(this, - RestrictedProfileSettings.class.getName(), - extras, R.string.user_restrictions_title, null, - null, 0); + new SubSettingLauncher(getContext()) + .setDestination(RestrictedProfileSettings.class.getName()) + .setArguments(extras) + .setTitle(R.string.user_restrictions_title) + .setSourceMetricsCategory(getMetricsCategory()) + .launch(); } else if (info.id == UserHandle.myUserId()) { // Jump to owner info panel OwnerInfoSettings.show(this); } else if (mUserCaps.mIsAdmin) { - Bundle extras = new Bundle(); + final Bundle extras = new Bundle(); extras.putInt(UserDetailsSettings.EXTRA_USER_ID, userId); - ((SettingsActivity) getActivity()).startPreferencePanel(this, - UserDetailsSettings.class.getName(), - extras, - -1, /* No title res id */ - info.name, /* title */ - null, /* resultTo */ - 0 /* resultRequestCode */); + new SubSettingLauncher(getContext()) + .setDestination(UserDetailsSettings.class.getName()) + .setArguments(extras) + .setTitle(info.name) + .setSourceMetricsCategory(getMetricsCategory()) + .launch(); } } diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java index 69dc1304659..9fbeabef224 100644 --- a/src/com/android/settings/wifi/WifiSettings.java +++ b/src/com/android/settings/wifi/WifiSettings.java @@ -30,7 +30,6 @@ import android.net.NetworkInfo; import android.net.NetworkInfo.State; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiManager; -import android.net.wifi.WpsInfo; import android.nfc.NfcAdapter; import android.os.Bundle; import android.os.Handler; @@ -52,6 +51,7 @@ import com.android.settings.LinkifyUtils; import com.android.settings.R; import com.android.settings.RestrictedSettingsFragment; import com.android.settings.SettingsActivity; +import com.android.settings.core.SubSettingLauncher; import com.android.settings.dashboard.SummaryLoader; import com.android.settings.location.ScanningSettings; import com.android.settings.search.BaseSearchIndexProvider; @@ -861,10 +861,12 @@ public class WifiSettings extends RestrictedSettingsFragment pref.setOnPreferenceClickListener(preference -> { pref.getAccessPoint().saveWifiState(pref.getExtras()); - SettingsActivity activity = (SettingsActivity) WifiSettings.this.getActivity(); - activity.startPreferencePanel(this, - WifiNetworkDetailsFragment.class.getName(), pref.getExtras(), - -1 /* resId */, pref.getTitle(), null, 0 /* resultRequestCode */); + new SubSettingLauncher(getContext()) + .setTitle(pref.getTitle()) + .setDestination(WifiNetworkDetailsFragment.class.getName()) + .setArguments(pref.getExtras()) + .setSourceMetricsCategory(getMetricsCategory()) + .launch(); return true; }); @@ -922,15 +924,12 @@ public class WifiSettings extends RestrictedSettingsFragment Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE, 0) == 1; final CharSequence description = wifiScanningMode ? getText(R.string.wifi_scan_notify_text) : getText(R.string.wifi_scan_notify_text_scanning_off); - final LinkifyUtils.OnClickListener clickListener = new LinkifyUtils.OnClickListener() { - @Override - public void onClick() { - final SettingsActivity activity = (SettingsActivity) getActivity(); - activity.startPreferencePanel(WifiSettings.this, - ScanningSettings.class.getName(), - null, R.string.location_scanning_screen_title, null, null, 0); - } - }; + final LinkifyUtils.OnClickListener clickListener = + () -> new SubSettingLauncher(getContext()) + .setDestination(ScanningSettings.class.getName()) + .setTitle(R.string.location_scanning_screen_title) + .setSourceMetricsCategory(getMetricsCategory()) + .launch(); mStatusMessagePreference.setText(title, description, clickListener); removeConnectedAccessPointPreference(); mAccessPointsPreferenceCategory.removeAll(); diff --git a/tests/robotests/src/com/android/settings/MasterClearTest.java b/tests/robotests/src/com/android/settings/MasterClearTest.java index 3ba3edb8d7e..c9efe8e1545 100644 --- a/tests/robotests/src/com/android/settings/MasterClearTest.java +++ b/tests/robotests/src/com/android/settings/MasterClearTest.java @@ -23,6 +23,7 @@ import static org.mockito.Mockito.any; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -48,12 +49,14 @@ import android.widget.CheckBox; import android.widget.LinearLayout; import android.widget.ScrollView; +import com.android.settings.SettingsActivity; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.shadow.ShadowUtils; 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.Robolectric; @@ -97,27 +100,12 @@ public class MasterClearTest { private Activity mActivity; private View mContentView; - private class ActivityForTest extends SettingsActivity { - private Bundle mArgs; - - @Override - public void startPreferencePanel(Fragment caller, String fragmentClass, Bundle args, - int titleRes, CharSequence titleText, Fragment resultTo, int resultRequestCode) { - mArgs = args; - } - - public Bundle getArgs() { - return mArgs; - } - } - @Before public void setUp() { MockitoAnnotations.initMocks(this); mMasterClear = spy(new MasterClear()); mActivity = Robolectric.setupActivity(Activity.class); - mShadowActivity = shadowOf(mActivity);https://stackoverflow.com/questions/14889951/how-to-verify-a-method-is-called-two-times-with-mockito-verify - // mShadowAccountManager = shadowOf(AccountManager.get(mActivity)); + mShadowActivity = shadowOf(mActivity); mContentView = LayoutInflater.from(mActivity).inflate(R.layout.master_clear, null); // Make scrollView only have one child @@ -127,28 +115,37 @@ public class MasterClearTest { @Test public void testShowFinalConfirmation_eraseEsimChecked() { - ActivityForTest testActivity = new ActivityForTest(); - when(mMasterClear.getActivity()).thenReturn(testActivity); + final Context context = mock(Context.class); + when(mMasterClear.getContext()).thenReturn(context); mMasterClear.mEsimStorage = mContentView.findViewById(R.id.erase_esim); mMasterClear.mExternalStorage = mContentView.findViewById(R.id.erase_external); mMasterClear.mEsimStorage.setChecked(true); mMasterClear.showFinalConfirmation(); - assertThat(testActivity.getArgs().getBoolean(MasterClear.ERASE_ESIMS_EXTRA, false)) - .isTrue(); + + final ArgumentCaptor intent = ArgumentCaptor.forClass(Intent.class); + + verify(context).startActivity(intent.capture()); + assertThat(intent.getValue().getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS) + .getBoolean(MasterClear.ERASE_ESIMS_EXTRA, false)) + .isTrue(); } @Test public void testShowFinalConfirmation_eraseEsimUnchecked() { - ActivityForTest testActivity = new ActivityForTest(); - when(mMasterClear.getActivity()).thenReturn(testActivity); + final Context context = mock(Context.class); + when(mMasterClear.getContext()).thenReturn(context); mMasterClear.mEsimStorage = mContentView.findViewById(R.id.erase_esim); mMasterClear.mExternalStorage = mContentView.findViewById(R.id.erase_external); mMasterClear.mEsimStorage.setChecked(false); mMasterClear.showFinalConfirmation(); - assertThat(testActivity.getArgs().getBoolean(MasterClear.ERASE_ESIMS_EXTRA, true)) - .isFalse(); + final ArgumentCaptor intent = ArgumentCaptor.forClass(Intent.class); + + verify(context).startActivity(intent.capture()); + assertThat(intent.getValue().getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS) + .getBoolean(MasterClear.ERASE_ESIMS_EXTRA, false)) + .isFalse(); } @Test diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java index 226ea384419..1abbed575a0 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoDashboardFragmentTest.java @@ -325,6 +325,7 @@ public final class AppInfoDashboardFragmentTest { final SettingsPreferenceFragment caller = mock(SettingsPreferenceFragment.class); final SettingsActivity sa = mock (SettingsActivity.class); when(caller.getActivity()).thenReturn(sa); + when(caller.getContext()).thenReturn(sa); final AppEntry appEntry = mock(AppEntry.class); appEntry.info = mock(ApplicationInfo.class); @@ -337,6 +338,7 @@ public final class AppInfoDashboardFragmentTest { final SettingsPreferenceFragment caller = mock(SettingsPreferenceFragment.class); final SettingsActivity sa = mock (SettingsActivity.class); when(caller.getActivity()).thenReturn(sa); + when(caller.getContext()).thenReturn(sa); final AppEntry appEntry = mock(AppEntry.class); appEntry.info = mock(ApplicationInfo.class); @@ -346,11 +348,14 @@ public final class AppInfoDashboardFragmentTest { AppInfoDashboardFragment.startAppInfoFragment(AppInfoDashboardFragment.class, 0, bundle, caller, appEntry); - final ArgumentCaptor captor = ArgumentCaptor.forClass(Bundle.class); - verify(sa).startPreferencePanel(any(), anyString(), captor.capture(), anyInt(), any(), - any(), anyInt()); + final ArgumentCaptor intent = ArgumentCaptor.forClass(Intent.class); - assertThat(captor.getValue().containsKey("test")); - assertThat(captor.getValue().containsKey(ARG_PACKAGE_NAME)); + verify(sa).startActivityForResult(intent.capture(), any(Integer.class)); + assertThat(intent.getValue().getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS) + .containsKey("test")) + .isTrue(); + assertThat(intent.getValue().getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS) + .containsKey(ARG_PACKAGE_NAME)) + .isTrue(); } } diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBaseTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBaseTest.java index 0c80ef42193..0715724ac29 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBaseTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppInfoPreferenceControllerBaseTest.java @@ -16,15 +16,14 @@ package com.android.settings.applications.appinfo; +import static com.android.settings.applications.appinfo.AppInfoDashboardFragment.SUB_INFO_FRAGMENT; 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.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.content.Intent; import android.content.pm.ApplicationInfo; import android.os.Bundle; import android.support.v7.preference.Preference; @@ -68,6 +67,7 @@ public class AppInfoPreferenceControllerBaseTest { final String key = mController.getPreferenceKey(); when(mScreen.findPreference(key)).thenReturn(mPreference); when(mPreference.getKey()).thenReturn(key); + when(mFragment.getContext()).thenReturn(mActivity); when(mFragment.getActivity()).thenReturn(mActivity); } @@ -91,13 +91,11 @@ public class AppInfoPreferenceControllerBaseTest { when(mFragment.getAppEntry()).thenReturn(appEntry); mController.handlePreferenceTreeClick(mPreference); + final ArgumentCaptor intentCaptor = ArgumentCaptor.forClass(Intent.class); - ArgumentCaptor captor = ArgumentCaptor.forClass(Bundle.class); - verify(mActivity).startPreferencePanel(any(), - eq(mController.getDetailFragmentClass().getName()), captor.capture(), anyInt(), - any(), any(), anyInt()); - - assertThat(captor.getValue().containsKey("test")); + verify(mActivity).startActivityForResult(intentCaptor.capture(), eq(SUB_INFO_FRAGMENT)); + assertThat(intentCaptor.getValue().getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)) + .isEqualTo(mController.getDetailFragmentClass().getName()); } private class TestPreferenceController extends AppInfoPreferenceControllerBase { diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppMemoryPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppMemoryPreferenceControllerTest.java index 532522c3db3..1446c758906 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppMemoryPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppMemoryPreferenceControllerTest.java @@ -17,21 +17,17 @@ package com.android.settings.applications.appinfo; 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.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; +import android.content.Intent; import android.provider.Settings; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; -import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.TestConfig; import com.android.settings.applications.ProcStatsData; @@ -43,6 +39,7 @@ import org.junit.After; 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; @@ -128,8 +125,11 @@ public class AppMemoryPreferenceControllerTest { mController.handlePreferenceTreeClick(mPreference); - verify(mActivity).startPreferencePanel(any(), eq(ProcessStatsDetail.class.getName()), any(), - eq(R.string.memory_usage), any(), any(), anyInt()); + final ArgumentCaptor intentCaptor = ArgumentCaptor.forClass(Intent.class); + + verify(mActivity).startActivity(intentCaptor.capture()); + assertThat(intentCaptor.getValue().getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)) + .isEqualTo(ProcessStatsDetail.class.getName()); } } diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceUpdaterTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceUpdaterTest.java index 4294dfbbc76..f53d3ea8623 100644 --- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceUpdaterTest.java +++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceUpdaterTest.java @@ -16,18 +16,16 @@ package com.android.settings.bluetooth; import static com.google.common.truth.Truth.assertThat; - import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import android.bluetooth.BluetoothDevice; import android.content.Context; +import android.content.Intent; import android.support.v7.preference.Preference; -import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.TestConfig; import com.android.settings.connecteddevice.DevicePreferenceCallback; @@ -38,6 +36,7 @@ import com.android.settingslib.bluetooth.CachedBluetoothDevice; 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; @@ -117,12 +116,13 @@ public class BluetoothDeviceUpdaterTest { @Test public void testDeviceProfilesListener_click_startBluetoothDeviceDetailPage() { - doReturn(mSettingsActivity).when(mDashboardFragment).getActivity(); + doReturn(mSettingsActivity).when(mDashboardFragment).getContext(); + final ArgumentCaptor intentCaptor = ArgumentCaptor.forClass(Intent.class); mBluetoothDeviceUpdater.mDeviceProfilesListener.onGearClick(mPreference); - verify(mSettingsActivity).startPreferencePanel(eq(mDashboardFragment), - eq(BluetoothDeviceDetailsFragment.class.getName()), any(), - eq(R.string.device_details_title), eq(null), eq(null), eq(0)); + verify(mSettingsActivity).startActivity(intentCaptor.capture()); + assertThat(intentCaptor.getValue().getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)) + .isEqualTo(BluetoothDeviceDetailsFragment.class.getName()); } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceControllerTest.java index 426f3cbfd33..bc2b3412702 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceControllerTest.java @@ -17,23 +17,21 @@ package com.android.settings.fuelgauge; import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.ArgumentMatchers.nullable; -import static org.mockito.Matchers.anyInt; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; -import android.app.Fragment; import android.content.Context; -import android.os.Bundle; +import android.content.Intent; import android.support.v14.preference.SwitchPreference; import android.support.v7.preference.Preference; import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.TestConfig; +import com.android.settings.dashboard.DashboardFragment; import org.junit.Before; import org.junit.Test; @@ -54,7 +52,7 @@ public class BatteryOptimizationPreferenceControllerTest { @Mock private SettingsActivity mSettingsActivity; @Mock - private Fragment mFragment; + private DashboardFragment mFragment; @Mock private TestPowerWhitelistBackend mBackend; @@ -82,9 +80,7 @@ public class BatteryOptimizationPreferenceControllerTest { final boolean handled = mController.handlePreferenceTreeClick(mPreference); assertThat(handled).isTrue(); - verify(mSettingsActivity).startPreferencePanel(nullable(Fragment.class), - nullable(String.class), nullable(Bundle.class), anyInt(), - nullable(CharSequence.class), nullable(Fragment.class), anyInt()); + verify(mSettingsActivity).startActivity(any(Intent.class)); } @Test @@ -94,9 +90,7 @@ public class BatteryOptimizationPreferenceControllerTest { final boolean handled = mController.handlePreferenceTreeClick(mPreference); assertThat(handled).isFalse(); - verify(mSettingsActivity, never()).startPreferencePanel(nullable(Fragment.class), - nullable(String.class), nullable(Bundle.class), anyInt(), - nullable(CharSequence.class), nullable(Fragment.class), anyInt()); + verify(mSettingsActivity, never()).startActivity(any(Intent.class)); } @Test diff --git a/tests/unit/src/com/android/settings/bluetooth/BluetoothDeviceDetailsRotationTest.java b/tests/unit/src/com/android/settings/bluetooth/BluetoothDeviceDetailsRotationTest.java index 5b372ad4b1b..2810b530c52 100644 --- a/tests/unit/src/com/android/settings/bluetooth/BluetoothDeviceDetailsRotationTest.java +++ b/tests/unit/src/com/android/settings/bluetooth/BluetoothDeviceDetailsRotationTest.java @@ -29,8 +29,10 @@ import android.support.test.runner.AndroidJUnit4; import android.support.test.uiautomator.UiDevice; import com.android.settings.SettingsActivity; +import com.android.settings.core.SubSettingLauncher; import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.bluetooth.LocalBluetoothManager; +import com.android.settingslib.core.instrumentation.Instrumentable; import org.junit.Before; import org.junit.Test; @@ -85,8 +87,12 @@ public class BluetoothDeviceDetailsRotationTest { SettingsActivity activity = (SettingsActivity) mInstrumentation.startActivitySync(intent); Bundle args = new Bundle(1); args.putString(BluetoothDeviceDetailsFragment.KEY_DEVICE_ADDRESS, mDeviceAddress); - activity.startPreferencePanel(null, BluetoothDeviceDetailsFragment.class.getName(), args, - 0, null, null, 0); + new SubSettingLauncher(activity) + .setDestination(BluetoothDeviceDetailsFragment.class.getName()) + .setTitle("test") + .setArguments(args) + .setSourceMetricsCategory(Instrumentable.METRICS_CATEGORY_UNKNOWN) + .launch(); try { mUiDevice.setOrientationLeft(); mUiDevice.setOrientationNatural();