diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java index d28eed6f225..a21153d38f7 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -75,7 +75,6 @@ import com.android.settingslib.drawer.SettingsDrawerActivity; import java.util.ArrayList; import java.util.List; -import java.util.Set; public class SettingsActivity extends SettingsDrawerActivity implements PreferenceManager.OnPreferenceTreeClickListener, @@ -157,10 +156,6 @@ public class SettingsActivity extends SettingsDrawerActivity private CharSequence mInitialTitle; private int mInitialTitleResId; - private static final String[] LIKE_SHORTCUT_INTENT_ACTION_ARRAY = { - "android.settings.APPLICATION_DETAILS_SETTINGS" - }; - private BroadcastReceiver mDevelopmentSettingsListener; private boolean mBatteryPresent = true; @@ -184,12 +179,9 @@ public class SettingsActivity extends SettingsDrawerActivity private Button mNextButton; private boolean mIsShowingDashboard; - private boolean mIsShortcut; private ViewGroup mContent; - private MetricsFeatureProvider mMetricsFeatureProvider; - // Categories private ArrayList mCategories = new ArrayList<>(); @@ -237,22 +229,6 @@ public class SettingsActivity extends SettingsDrawerActivity return tag; } - private static boolean isShortCutIntent(final Intent intent) { - Set categories = intent.getCategories(); - return (categories != null) && categories.contains("com.android.settings.SHORTCUT"); - } - - private static boolean isLikeShortCutIntent(final Intent intent) { - String action = intent.getAction(); - if (action == null) { - return false; - } - for (int i = 0; i < LIKE_SHORTCUT_INTENT_ACTION_ARRAY.length; i++) { - if (LIKE_SHORTCUT_INTENT_ACTION_ARRAY[i].equals(action)) return true; - } - return false; - } - @Override protected void onCreate(Bundle savedState) { super.onCreate(savedState); @@ -261,7 +237,6 @@ public class SettingsActivity extends SettingsDrawerActivity final FeatureFactory factory = FeatureFactory.getFactory(this); mDashboardFeatureProvider = factory.getDashboardFeatureProvider(this); - mMetricsFeatureProvider = factory.getMetricsFeatureProvider(); // Should happen before any call to getIntent() getMetaData(); @@ -274,9 +249,6 @@ public class SettingsActivity extends SettingsDrawerActivity // Getting Intent properties can only be done after the super.onCreate(...) final String initialFragmentName = intent.getStringExtra(EXTRA_SHOW_FRAGMENT); - mIsShortcut = isShortCutIntent(intent) || isLikeShortCutIntent(intent) || - intent.getBooleanExtra(EXTRA_SHOW_FRAGMENT_AS_SHORTCUT, false); - final ComponentName cn = intent.getComponent(); final String className = cn.getClassName(); @@ -583,74 +555,6 @@ public class SettingsActivity extends SettingsDrawerActivity return intentClass; } - /** - * Start a new fragment containing a preference panel. If the preferences - * are being displayed in multi-pane mode, the given fragment class will - * be instantiated and placed in the appropriate pane. If running in - * single-pane mode, a new activity will be launched in which to show the - * fragment. - * - * @param fragmentClass Full name of the class implementing the fragment. - * @param args Any desired arguments to supply to the fragment. - * @param titleRes Optional resource identifier of the title of this - * fragment. - * @param titleText Optional text of the title of this fragment. - * @param resultTo Optional fragment that result data should be sent to. - * If non-null, resultTo.onActivityResult() will be called when this - * preference panel is done. The launched panel must use - * {@link #finishPreferencePanel(Fragment, int, Intent)} when done. - * @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; - if (titleRes < 0 && titleText != null) { - title = titleText.toString(); - } - Utils.startWithFragment(this, fragmentClass, args, resultTo, resultRequestCode, - titleRes, title, mIsShortcut, mMetricsFeatureProvider.getMetricsCategory(caller)); - } - - /** - * Start a new fragment in a new activity containing a preference panel for a given user. If the - * preferences are being displayed in multi-pane mode, the given fragment class will be - * instantiated and placed in the appropriate pane. If running in single-pane mode, a new - * activity will be launched in which to show the fragment. - * - * @param fragmentClass Full name of the class implementing the fragment. - * @param args Any desired arguments to supply to the fragment. - * @param titleRes Optional resource identifier of the title of this fragment. - * @param userHandle The user for which the panel has to be started. - */ - public void startPreferencePanelAsUser(Fragment caller, String fragmentClass, - Bundle args, int titleRes, UserHandle userHandle) { - // This is a workaround. - // - // Calling startWithFragmentAsUser() without specifying FLAG_ACTIVITY_NEW_TASK to the intent - // starting the fragment could cause a native stack corruption. See b/17523189. However, - // adding that flag and start the preference panel with the same UserHandler will make it - // impossible to use back button to return to the previous screen. See b/20042570. - // - // We work around this issue by adding FLAG_ACTIVITY_NEW_TASK to the intent, while doing - // another check here to call startPreferencePanel() instead of startWithFragmentAsUser() - // when we're calling it as the same user. - if (userHandle.getIdentifier() == UserHandle.myUserId()) { - startPreferencePanel(caller, fragmentClass, args, titleRes, null /* titleText */, - null, 0); - } else { - new SubSettingLauncher(this) - .setDestination(fragmentClass) - .setArguments(args) - .setTitle(titleRes) - .setIsShortCut(mIsShortcut) - .setSourceMetricsCategory(mMetricsFeatureProvider.getMetricsCategory(caller)) - .setUserHandle(userHandle) - .launch(); - } - } - /** * Called by a preference panel fragment to finish itself. * diff --git a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java index f6e044eeb36..44fc9d83948 100644 --- a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java +++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java @@ -16,22 +16,22 @@ package com.android.settings.accessibility; -import android.app.Fragment; import android.os.Bundle; -import android.text.TextUtils; +import android.support.v14.preference.PreferenceFragment; +import android.support.v7.preference.Preference; import android.view.Menu; import android.view.accessibility.AccessibilityEvent; import com.android.settings.SettingsActivity; +import com.android.settings.core.SubSettingLauncher; import com.android.settings.search.actionbar.SearchMenuController; import com.android.settings.support.actionbar.HelpResourceProvider; +import com.android.settingslib.core.instrumentation.Instrumentable; public class AccessibilitySettingsForSetupWizardActivity extends SettingsActivity { private static final String SAVE_KEY_TITLE = "activity_title"; - private boolean mSendExtraWindowStateChanged; - @Override protected void onCreate(Bundle savedState) { super.onCreate(savedState); @@ -52,12 +52,6 @@ public class AccessibilitySettingsForSetupWizardActivity extends SettingsActivit setTitle(savedState.getCharSequence(SAVE_KEY_TITLE)); } - @Override - public void onResume() { - super.onResume(); - mSendExtraWindowStateChanged = false; - } - @Override public boolean onCreateOptionsMenu(Menu menu) { // Return true, so we get notified when items in the menu are clicked. @@ -76,28 +70,20 @@ public class AccessibilitySettingsForSetupWizardActivity extends SettingsActivit } @Override - public void startPreferencePanel(Fragment caller, String fragmentClass, Bundle args, - int titleRes, CharSequence titleText, Fragment resultTo, int resultRequestCode) { - // Set the title. - if (!TextUtils.isEmpty(titleText)) { - setTitle(titleText); - } else if (titleRes > 0) { - setTitle(getString(titleRes)); + public boolean onPreferenceStartFragment(PreferenceFragment caller, Preference pref) { + Bundle args = pref.getExtras(); + if (args == null) { + args = new Bundle(); } - - // Start the new Fragment. args.putInt(HelpResourceProvider.HELP_URI_RESOURCE_KEY, 0); args.putBoolean(SearchMenuController.NEED_SEARCH_ICON_IN_ACTION_BAR, false); - startPreferenceFragment(Fragment.instantiate(this, fragmentClass, args), true); - mSendExtraWindowStateChanged = true; - } - - @Override - public void onAttachFragment(Fragment fragment) { - if (mSendExtraWindowStateChanged) { - // Clear accessibility focus and let the screen reader announce the new title. - getWindow().getDecorView() - .sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); - } + new SubSettingLauncher(this) + .setDestination(pref.getFragment()) + .setArguments(args) + .setSourceMetricsCategory(caller instanceof Instrumentable + ? ((Instrumentable) caller).getMetricsCategory() + : Instrumentable.METRICS_CATEGORY_UNKNOWN) + .launch(); + return true; } } diff --git a/src/com/android/settings/bluetooth/BluetoothMasterSwitchPreferenceController.java b/src/com/android/settings/bluetooth/BluetoothMasterSwitchPreferenceController.java index 35b7c27605c..2f06b9387eb 100644 --- a/src/com/android/settings/bluetooth/BluetoothMasterSwitchPreferenceController.java +++ b/src/com/android/settings/bluetooth/BluetoothMasterSwitchPreferenceController.java @@ -15,17 +15,16 @@ */ package com.android.settings.bluetooth; -import android.app.Fragment; import android.content.Context; -import android.os.UserHandle; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; -import com.android.settings.SettingsActivity; +import com.android.settings.core.InstrumentedPreferenceFragment; import com.android.settings.core.PreferenceControllerMixin; +import com.android.settings.core.SubSettingLauncher; import com.android.settings.overlay.FeatureFactory; import com.android.settings.widget.MasterSwitchController; import com.android.settings.widget.MasterSwitchPreference; @@ -50,27 +49,22 @@ public class BluetoothMasterSwitchPreferenceController extends AbstractPreferenc private BluetoothEnabler mBluetoothEnabler; private BluetoothSummaryUpdater mSummaryUpdater; private RestrictionUtils mRestrictionUtils; - private Fragment mFragment; - private SettingsActivity mActivity; - private BluetoothFeatureProvider mBluetoothFeatureProvider; + private InstrumentedPreferenceFragment mFragment; public BluetoothMasterSwitchPreferenceController(Context context, - LocalBluetoothManager bluetoothManager, Fragment fragment, SettingsActivity activity) { - this(context, bluetoothManager, new RestrictionUtils(), fragment, activity); + LocalBluetoothManager bluetoothManager, InstrumentedPreferenceFragment fragment) { + this(context, bluetoothManager, new RestrictionUtils(), fragment); } @VisibleForTesting public BluetoothMasterSwitchPreferenceController(Context context, LocalBluetoothManager bluetoothManager, RestrictionUtils restrictionUtils, - Fragment fragment, SettingsActivity activity) { + InstrumentedPreferenceFragment fragment) { super(context); mBluetoothManager = bluetoothManager; mSummaryUpdater = new BluetoothSummaryUpdater(mContext, this, mBluetoothManager); mRestrictionUtils = restrictionUtils; mFragment = fragment; - mActivity = activity; - mBluetoothFeatureProvider = FeatureFactory.getFactory( - mContext).getBluetoothFeatureProvider(mContext); } @Override @@ -87,8 +81,11 @@ public class BluetoothMasterSwitchPreferenceController extends AbstractPreferenc @Override public boolean handlePreferenceTreeClick(Preference preference) { if (KEY_TOGGLE_BLUETOOTH.equals(preference.getKey())) { - mActivity.startPreferencePanelAsUser(mFragment, BluetoothSettings.class.getName(), null, - R.string.bluetooth, new UserHandle(UserHandle.myUserId())); + new SubSettingLauncher(mContext) + .setDestination(BluetoothSettings.class.getName()) + .setTitle(R.string.bluetooth) + .setSourceMetricsCategory(mFragment.getMetricsCategory()) + .launch(); return true; } return super.handlePreferenceTreeClick(preference); diff --git a/src/com/android/settings/bluetooth/BluetoothPairingPreferenceController.java b/src/com/android/settings/bluetooth/BluetoothPairingPreferenceController.java index 89826fe17d6..2aaf4014898 100644 --- a/src/com/android/settings/bluetooth/BluetoothPairingPreferenceController.java +++ b/src/com/android/settings/bluetooth/BluetoothPairingPreferenceController.java @@ -17,13 +17,12 @@ package com.android.settings.bluetooth; import android.content.Context; -import android.support.v14.preference.PreferenceFragment; import android.support.v7.preference.Preference; -import android.os.UserHandle; -import com.android.settings.SettingsActivity; -import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.R; +import com.android.settings.core.PreferenceControllerMixin; +import com.android.settings.core.SubSettingLauncher; +import com.android.settings.dashboard.DashboardFragment; import com.android.settingslib.core.AbstractPreferenceController; @@ -35,15 +34,12 @@ public class BluetoothPairingPreferenceController extends AbstractPreferenceCont private static final String TAG = "BluetoothPairingPrefCtrl"; public static final String KEY_PAIRING = "pref_bt_pairing"; - private PreferenceFragment mFragment; - private SettingsActivity mActivity; + private DashboardFragment mFragment; private Preference mPreference; - public BluetoothPairingPreferenceController(Context context, PreferenceFragment fragment, - SettingsActivity activity) { + public BluetoothPairingPreferenceController(Context context, DashboardFragment fragment) { super(context); mFragment = fragment; - mActivity = activity; } @Override @@ -59,9 +55,12 @@ public class BluetoothPairingPreferenceController extends AbstractPreferenceCont @Override public boolean handlePreferenceTreeClick(Preference preference) { if (KEY_PAIRING.equals(preference.getKey())) { - mActivity.startPreferencePanelAsUser(mFragment, BluetoothPairingDetail.class.getName(), - null, R.string.bluetooth_pairing_page_title, - new UserHandle(UserHandle.myUserId())); + new SubSettingLauncher(mContext) + .setDestination(BluetoothPairingDetail.class.getName()) + .setTitle(R.string.bluetooth_pairing_page_title) + .setSourceMetricsCategory(mFragment.getMetricsCategory()) + .launch(); + return true; } diff --git a/src/com/android/settings/bluetooth/BluetoothSettings.java b/src/com/android/settings/bluetooth/BluetoothSettings.java index 8b648788b99..7ec0a67fa33 100644 --- a/src/com/android/settings/bluetooth/BluetoothSettings.java +++ b/src/com/android/settings/bluetooth/BluetoothSettings.java @@ -367,8 +367,7 @@ public class BluetoothSettings extends DeviceListPreferenceFragment implements I final List controllers = new ArrayList<>(); final Lifecycle lifecycle = getLifecycle(); mDeviceNamePrefController = new BluetoothDeviceNamePreferenceController(context, lifecycle); - mPairingPrefController = new BluetoothPairingPreferenceController(context, this, - (SettingsActivity) getActivity()); + mPairingPrefController = new BluetoothPairingPreferenceController(context, this); controllers.add(mDeviceNamePrefController); controllers.add(mPairingPrefController); controllers.add(new BluetoothFilesPreferenceController(context)); diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentOld.java b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentOld.java index 54ae8f6dc89..a9ba6e51c9a 100644 --- a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentOld.java +++ b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentOld.java @@ -23,7 +23,6 @@ import android.support.annotation.VisibleForTesting; import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; -import com.android.settings.SettingsActivity; import com.android.settings.bluetooth.BluetoothMasterSwitchPreferenceController; import com.android.settings.bluetooth.Utils; import com.android.settings.connecteddevice.usb.UsbBackend; @@ -31,7 +30,6 @@ import com.android.settings.connecteddevice.usb.UsbModePreferenceController; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.SummaryLoader; import com.android.settings.nfc.NfcPreferenceController; -import com.android.settings.overlay.FeatureFactory; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.lifecycle.Lifecycle; @@ -85,8 +83,7 @@ public class ConnectedDeviceDashboardFragmentOld extends DashboardFragment { controllers.add(mUsbPrefController); final BluetoothMasterSwitchPreferenceController bluetoothPreferenceController = new BluetoothMasterSwitchPreferenceController( - context, Utils.getLocalBtManager(context), this, - (SettingsActivity) getActivity()); + context, Utils.getLocalBtManager(context), this); lifecycle.addObserver(bluetoothPreferenceController); controllers.add(bluetoothPreferenceController); diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java index 6cf07a40f9e..1bbb035612b 100644 --- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java +++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java @@ -30,7 +30,6 @@ import android.os.Bundle; import android.os.UserHandle; import android.os.UserManager; import android.support.annotation.VisibleForTesting; -import android.support.v14.preference.PreferenceFragment; import android.support.v7.preference.Preference; import android.text.TextUtils; import android.util.Log; @@ -44,6 +43,8 @@ import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.Utils; import com.android.settings.applications.LayoutPreference; +import com.android.settings.core.InstrumentedPreferenceFragment; +import com.android.settings.core.SubSettingLauncher; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.fuelgauge.anomaly.Anomaly; import com.android.settings.fuelgauge.anomaly.AnomalyDialogFragment; @@ -74,7 +75,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements LoaderManager.LoaderCallbacks>, BatteryTipPreferenceController.BatteryTipListener { - public static final String TAG = "AdvancedPowerUsageDetail"; + public static final String TAG = "AdvancedPowerDetail"; public static final String EXTRA_UID = "extra_uid"; public static final String EXTRA_PACKAGE_NAME = "extra_package_name"; public static final String EXTRA_FOREGROUND_TIME = "extra_foreground_time"; @@ -122,9 +123,9 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements private String mPackageName; @VisibleForTesting - static void startBatteryDetailPage(SettingsActivity caller, BatteryUtils batteryUtils, - PreferenceFragment fragment, BatteryStatsHelper helper, int which, BatteryEntry entry, - String usagePercent, List anomalies) { + static void startBatteryDetailPage(Activity caller, BatteryUtils batteryUtils, + InstrumentedPreferenceFragment fragment, BatteryStatsHelper helper, int which, + BatteryEntry entry, String usagePercent, List anomalies) { // Initialize mStats if necessary. helper.getStats(); @@ -157,9 +158,13 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements args.putInt(EXTRA_POWER_USAGE_AMOUNT, (int) sipper.totalPowerMah); args.putParcelableList(EXTRA_ANOMALY_LIST, anomalies); - caller.startPreferencePanelAsUser(fragment, AdvancedPowerUsageDetail.class.getName(), args, - R.string.battery_details_title, - new UserHandle(getUserIdToLaunchAdvancePowerUsageDetail(sipper))); + new SubSettingLauncher(caller) + .setDestination(AdvancedPowerUsageDetail.class.getName()) + .setTitle(R.string.battery_details_title) + .setArguments(args) + .setSourceMetricsCategory(fragment.getMetricsCategory()) + .setUserHandle(new UserHandle(getUserIdToLaunchAdvancePowerUsageDetail(sipper))) + .launch(); } private static @UserIdInt int getUserIdToLaunchAdvancePowerUsageDetail(BatterySipper bs) { @@ -169,15 +174,15 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements return UserHandle.getUserId(bs.getUid()); } - public static void startBatteryDetailPage(SettingsActivity caller, PreferenceFragment fragment, - BatteryStatsHelper helper, int which, BatteryEntry entry, String usagePercent, - List anomalies) { + public static void startBatteryDetailPage(Activity caller, + InstrumentedPreferenceFragment fragment, BatteryStatsHelper helper, int which, + BatteryEntry entry, String usagePercent, List anomalies) { startBatteryDetailPage(caller, BatteryUtils.getInstance(caller), fragment, helper, which, entry, usagePercent, anomalies); } - public static void startBatteryDetailPage(SettingsActivity caller, PreferenceFragment fragment, - String packageName) { + public static void startBatteryDetailPage(Activity caller, + InstrumentedPreferenceFragment fragment, String packageName) { final Bundle args = new Bundle(3); final PackageManager packageManager = caller.getPackageManager(); args.putString(EXTRA_PACKAGE_NAME, packageName); @@ -188,8 +193,12 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements Log.e(TAG, "Cannot find package: " + packageName, e); } - caller.startPreferencePanelAsUser(fragment, AdvancedPowerUsageDetail.class.getName(), args, - R.string.battery_details_title, new UserHandle(UserHandle.myUserId())); + new SubSettingLauncher(caller) + .setDestination(AdvancedPowerUsageDetail.class.getName()) + .setTitle(R.string.battery_details_title) + .setArguments(args) + .setSourceMetricsCategory(fragment.getMetricsCategory()) + .launch(); } @Override @@ -210,7 +219,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements mPackageName = getArguments().getString(EXTRA_PACKAGE_NAME); mAnomalySummaryPreferenceController = new AnomalySummaryPreferenceController( - (SettingsActivity) getActivity(), this, MetricsEvent.FUELGAUGE_POWER_USAGE_DETAIL); + (SettingsActivity) getActivity(), this); mForegroundPreference = findPreference(KEY_PREF_FOREGROUND); mBackgroundPreference = findPreference(KEY_PREF_BACKGROUND); mPowerUsagePreference = findPreference(KEY_PREF_POWER_USAGE); diff --git a/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java index 2f93d0a6ce0..3ba5ee47fc0 100644 --- a/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java +++ b/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java @@ -27,7 +27,6 @@ import android.os.Process; import android.os.UserHandle; import android.os.UserManager; import android.support.annotation.VisibleForTesting; -import android.support.v14.preference.PreferenceFragment; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceGroup; import android.support.v7.preference.PreferenceScreen; @@ -45,6 +44,7 @@ import com.android.internal.os.PowerProfile; import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.core.FeatureFlags; +import com.android.settings.core.InstrumentedPreferenceFragment; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.fuelgauge.anomaly.Anomaly; import com.android.settingslib.core.AbstractPreferenceController; @@ -52,8 +52,8 @@ import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnDestroy; import com.android.settingslib.core.lifecycle.events.OnPause; - import com.android.settingslib.utils.StringUtil; + import java.util.ArrayList; import java.util.List; @@ -77,7 +77,7 @@ public class BatteryAppListPreferenceController extends AbstractPreferenceContro BatteryUtils mBatteryUtils; private UserManager mUserManager; private SettingsActivity mActivity; - private PreferenceFragment mFragment; + private InstrumentedPreferenceFragment mFragment; private Context mPrefContext; SparseArray> mAnomalySparseArray; @@ -112,7 +112,8 @@ public class BatteryAppListPreferenceController extends AbstractPreferenceContro }; public BatteryAppListPreferenceController(Context context, String preferenceKey, - Lifecycle lifecycle, SettingsActivity activity, PreferenceFragment fragment) { + Lifecycle lifecycle, SettingsActivity activity, + InstrumentedPreferenceFragment fragment) { super(context); if (lifecycle != null) { diff --git a/src/com/android/settings/fuelgauge/PowerUsageAnomalyDetails.java b/src/com/android/settings/fuelgauge/PowerUsageAnomalyDetails.java index c7972e203a8..2e771bd5cc5 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageAnomalyDetails.java +++ b/src/com/android/settings/fuelgauge/PowerUsageAnomalyDetails.java @@ -21,7 +21,6 @@ import android.content.pm.PackageManager; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.UserHandle; -import android.support.v14.preference.PreferenceFragment; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceGroup; import android.util.IconDrawableFactory; @@ -31,6 +30,8 @@ import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.Utils; +import com.android.settings.core.InstrumentedPreferenceFragment; +import com.android.settings.core.SubSettingLauncher; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.fuelgauge.anomaly.Anomaly; import com.android.settings.fuelgauge.anomaly.AnomalyDialogFragment; @@ -63,12 +64,16 @@ public class PowerUsageAnomalyDetails extends DashboardFragment implements IconDrawableFactory mIconDrawableFactory; public static void startBatteryAbnormalPage(SettingsActivity caller, - PreferenceFragment fragment, List anomalies) { + InstrumentedPreferenceFragment fragment, List anomalies) { Bundle args = new Bundle(); args.putParcelableList(EXTRA_ANOMALY_LIST, anomalies); - caller.startPreferencePanelAsUser(fragment, PowerUsageAnomalyDetails.class.getName(), args, - R.string.battery_abnormal_details_title, new UserHandle(UserHandle.myUserId())); + new SubSettingLauncher(caller) + .setDestination(PowerUsageAnomalyDetails.class.getName()) + .setTitle(R.string.battery_abnormal_details_title) + .setArguments(args) + .setSourceMetricsCategory(fragment.getMetricsCategory()) + .launch(); } @Override diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java b/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java index 4fe193fa672..a95320b59e8 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java +++ b/src/com/android/settings/fuelgauge/PowerUsageSummaryLegacy.java @@ -243,7 +243,7 @@ public class PowerUsageSummaryLegacy extends PowerUsageBase implements KEY_TIME_SINCE_LAST_FULL_CHARGE); mFooterPreferenceMixin.createFooterPreference().setTitle(R.string.battery_footer_summary); mAnomalySummaryPreferenceController = new AnomalySummaryPreferenceController( - (SettingsActivity) getActivity(), this, MetricsEvent.FUELGAUGE_POWER_USAGE_SUMMARY); + (SettingsActivity) getActivity(), this); mBatteryUtils = BatteryUtils.getInstance(getContext()); mAnomalySparseArray = new SparseArray<>(); diff --git a/src/com/android/settings/fuelgauge/RestrictAppPreferenceController.java b/src/com/android/settings/fuelgauge/RestrictAppPreferenceController.java index 0a40f1ee89e..92ecd4bc3bd 100644 --- a/src/com/android/settings/fuelgauge/RestrictAppPreferenceController.java +++ b/src/com/android/settings/fuelgauge/RestrictAppPreferenceController.java @@ -20,13 +20,12 @@ package com.android.settings.fuelgauge; import android.app.AppOpsManager; import android.content.Context; import android.support.annotation.VisibleForTesting; -import android.support.v14.preference.PreferenceFragment; import android.support.v7.preference.Preference; import com.android.settings.R; import com.android.settings.SettingsActivity; -import com.android.settings.applications.LayoutPreference; import com.android.settings.core.BasePreferenceController; +import com.android.settings.core.InstrumentedPreferenceFragment; import java.util.List; @@ -40,7 +39,7 @@ public class RestrictAppPreferenceController extends BasePreferenceController { private AppOpsManager mAppOpsManager; private List mPackageOps; private SettingsActivity mSettingsActivity; - private PreferenceFragment mPreferenceFragment; + private InstrumentedPreferenceFragment mPreferenceFragment; public RestrictAppPreferenceController(Context context) { super(context, KEY_RESTRICT_APP); @@ -48,7 +47,7 @@ public class RestrictAppPreferenceController extends BasePreferenceController { } public RestrictAppPreferenceController(SettingsActivity settingsActivity, - PreferenceFragment preferenceFragment) { + InstrumentedPreferenceFragment preferenceFragment) { this(settingsActivity.getApplicationContext()); mSettingsActivity = settingsActivity; mPreferenceFragment = preferenceFragment; diff --git a/src/com/android/settings/fuelgauge/RestrictedAppDetails.java b/src/com/android/settings/fuelgauge/RestrictedAppDetails.java index 3045261311c..26386b6e0ff 100644 --- a/src/com/android/settings/fuelgauge/RestrictedAppDetails.java +++ b/src/com/android/settings/fuelgauge/RestrictedAppDetails.java @@ -22,7 +22,6 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.os.Bundle; import android.os.UserHandle; -import android.support.v14.preference.PreferenceFragment; import android.support.v7.preference.CheckBoxPreference; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceGroup; @@ -33,6 +32,8 @@ import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.Utils; +import com.android.settings.core.InstrumentedPreferenceFragment; +import com.android.settings.core.SubSettingLauncher; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.widget.AppCheckBoxPreference; import com.android.settingslib.core.AbstractPreferenceController; @@ -61,13 +62,16 @@ public class RestrictedAppDetails extends DashboardFragment { PackageManager mPackageManager; public static void startRestrictedAppDetails(SettingsActivity caller, - PreferenceFragment fragment, List packageOpsList) { - Bundle args = new Bundle(); + InstrumentedPreferenceFragment fragment, List packageOpsList) { + final Bundle args = new Bundle(); args.putParcelableList(EXTRA_PACKAGE_OPS_LIST, packageOpsList); - caller.startPreferencePanelAsUser(fragment, RestrictedAppDetails.class.getName(), args, - R.string.restricted_app_title, - new UserHandle(UserHandle.myUserId())); + new SubSettingLauncher(caller) + .setDestination(RestrictedAppDetails.class.getName()) + .setArguments(args) + .setTitle(R.string.restricted_app_title) + .setSourceMetricsCategory(fragment.getMetricsCategory()) + .launch(); } @Override diff --git a/src/com/android/settings/fuelgauge/SmartBatterySettings.java b/src/com/android/settings/fuelgauge/SmartBatterySettings.java index 52c0cef6b2e..6aeb8a39135 100644 --- a/src/com/android/settings/fuelgauge/SmartBatterySettings.java +++ b/src/com/android/settings/fuelgauge/SmartBatterySettings.java @@ -19,11 +19,11 @@ package com.android.settings.fuelgauge; import android.content.Context; import android.os.Bundle; import android.provider.SearchIndexableResource; -import android.support.v14.preference.PreferenceFragment; import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; import com.android.settings.SettingsActivity; +import com.android.settings.core.InstrumentedPreferenceFragment; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settingslib.core.AbstractPreferenceController; @@ -69,7 +69,8 @@ public class SmartBatterySettings extends DashboardFragment { } private static List buildPreferenceControllers( - Context context, SettingsActivity settingsActivity, PreferenceFragment fragment) { + Context context, SettingsActivity settingsActivity, + InstrumentedPreferenceFragment fragment) { final List controllers = new ArrayList<>(); controllers.add(new SmartBatteryPreferenceController(context)); if (settingsActivity != null && fragment != null) { diff --git a/src/com/android/settings/fuelgauge/anomaly/AnomalySummaryPreferenceController.java b/src/com/android/settings/fuelgauge/anomaly/AnomalySummaryPreferenceController.java index 6bfc9ffb76a..a3eefa57f43 100644 --- a/src/com/android/settings/fuelgauge/anomaly/AnomalySummaryPreferenceController.java +++ b/src/com/android/settings/fuelgauge/anomaly/AnomalySummaryPreferenceController.java @@ -18,11 +18,11 @@ package com.android.settings.fuelgauge.anomaly; import android.content.Context; import android.support.annotation.VisibleForTesting; -import android.support.v14.preference.PreferenceFragment; import android.support.v7.preference.Preference; import com.android.settings.R; import com.android.settings.SettingsActivity; +import com.android.settings.core.InstrumentedPreferenceFragment; import com.android.settings.fuelgauge.BatteryUtils; import com.android.settings.fuelgauge.PowerUsageAnomalyDetails; @@ -37,7 +37,7 @@ public class AnomalySummaryPreferenceController { public static final String ANOMALY_KEY = "high_usage"; private static final int REQUEST_ANOMALY_ACTION = 0; - private PreferenceFragment mFragment; + private InstrumentedPreferenceFragment mFragment; @VisibleForTesting Preference mAnomalyPreference; @VisibleForTesting @@ -54,11 +54,11 @@ public class AnomalySummaryPreferenceController { private int mMetricsKey; public AnomalySummaryPreferenceController(SettingsActivity activity, - PreferenceFragment fragment, int metricsKey) { + InstrumentedPreferenceFragment fragment) { mFragment = fragment; mSettingsActivity = activity; mAnomalyPreference = mFragment.getPreferenceScreen().findPreference(ANOMALY_KEY); - mMetricsKey = metricsKey; + mMetricsKey = fragment.getMetricsCategory(); mBatteryUtils = BatteryUtils.getInstance(activity.getApplicationContext()); hideHighUsagePreference(); } diff --git a/src/com/android/settings/fuelgauge/batterytip/actions/SmartBatteryAction.java b/src/com/android/settings/fuelgauge/batterytip/actions/SmartBatteryAction.java index 58a95ac3e19..750ece9b82b 100644 --- a/src/com/android/settings/fuelgauge/batterytip/actions/SmartBatteryAction.java +++ b/src/com/android/settings/fuelgauge/batterytip/actions/SmartBatteryAction.java @@ -17,11 +17,12 @@ package com.android.settings.fuelgauge.batterytip.actions; import android.app.Fragment; -import android.os.UserHandle; import com.android.settings.R; import com.android.settings.SettingsActivity; +import com.android.settings.core.SubSettingLauncher; import com.android.settings.fuelgauge.SmartBatterySettings; +import com.android.settingslib.core.instrumentation.Instrumentable; public class SmartBatteryAction extends BatteryTipAction { private SettingsActivity mSettingsActivity; @@ -38,9 +39,13 @@ public class SmartBatteryAction extends BatteryTipAction { */ @Override public void handlePositiveAction() { - mSettingsActivity.startPreferencePanelAsUser(mFragment, - SmartBatterySettings.class.getName(), null /* args */, - R.string.smart_battery_manager_title, - new UserHandle(UserHandle.myUserId())); + new SubSettingLauncher(mSettingsActivity) + .setSourceMetricsCategory(mFragment instanceof Instrumentable + ? ((Instrumentable) mFragment).getMetricsCategory() + : Instrumentable.METRICS_CATEGORY_UNKNOWN) + .setDestination(SmartBatterySettings.class.getName()) + .setTitle(R.string.smart_battery_manager_title) + .launch(); + } } diff --git a/src/com/android/settings/location/RecentLocationRequestPreferenceController.java b/src/com/android/settings/location/RecentLocationRequestPreferenceController.java index afcdb646c0f..8238a9b4bc6 100644 --- a/src/com/android/settings/location/RecentLocationRequestPreferenceController.java +++ b/src/com/android/settings/location/RecentLocationRequestPreferenceController.java @@ -22,8 +22,8 @@ import android.support.v7.preference.PreferenceCategory; import android.support.v7.preference.PreferenceScreen; import com.android.settings.R; -import com.android.settings.SettingsActivity; import com.android.settings.applications.appinfo.AppInfoDashboardFragment; +import com.android.settings.core.SubSettingLauncher; import com.android.settings.widget.AppPreference; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.location.RecentLocationApps; @@ -57,10 +57,14 @@ public class RecentLocationRequestPreferenceController extends LocationBasePrefe // start new fragment to display extended information final Bundle args = new Bundle(); args.putString(AppInfoDashboardFragment.ARG_PACKAGE_NAME, mPackage); - ((SettingsActivity) mFragment.getActivity()).startPreferencePanelAsUser( - mFragment, - AppInfoDashboardFragment.class.getName(), args, - R.string.application_info_label, mUserHandle); + + new SubSettingLauncher(mFragment.getContext()) + .setDestination(AppInfoDashboardFragment.class.getName()) + .setArguments(args) + .setTitle(R.string.application_info_label) + .setUserHandle(mUserHandle) + .setSourceMetricsCategory(mFragment.getMetricsCategory()) + .launch(); return true; } } diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothMasterSwitchPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothMasterSwitchPreferenceControllerTest.java index 70d42980810..8048c0f0266 100644 --- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothMasterSwitchPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothMasterSwitchPreferenceControllerTest.java @@ -22,13 +22,12 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import android.app.Fragment; import android.content.Context; import android.support.v7.preference.Preference.OnPreferenceChangeListener; import android.support.v7.preference.PreferenceScreen; -import com.android.settings.SettingsActivity; import com.android.settings.TestConfig; +import com.android.settings.core.InstrumentedPreferenceFragment; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.widget.MasterSwitchPreference; @@ -57,9 +56,7 @@ public class BluetoothMasterSwitchPreferenceControllerTest { @Mock private RestrictionUtils mRestrictionUtils; @Mock - private Fragment mFragment; - @Mock - private SettingsActivity mActivity; + private InstrumentedPreferenceFragment mFragment; private Context mContext; private BluetoothMasterSwitchPreferenceController mController; @@ -72,7 +69,7 @@ public class BluetoothMasterSwitchPreferenceControllerTest { mFeatureFactory = FakeFeatureFactory.setupForTest(); mController = new BluetoothMasterSwitchPreferenceController( - mContext, mBluetoothManager, mRestrictionUtils, mFragment, mActivity); + mContext, mBluetoothManager, mRestrictionUtils, mFragment); when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference); when(mPreference.getKey()).thenReturn(mController.getPreferenceKey()); } diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingPreferenceControllerTest.java index 61987bfa76e..172d0094476 100644 --- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingPreferenceControllerTest.java @@ -17,27 +17,20 @@ package com.android.settings.bluetooth; import static com.google.common.truth.Truth.assertThat; - import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.anyString; -import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import android.app.FragmentManager; -import android.app.FragmentTransaction; import android.content.Context; -import android.support.v14.preference.PreferenceFragment; +import android.content.Intent; import android.support.v7.preference.Preference; -import android.support.v7.preference.PreferenceScreen; -import com.android.settings.SettingsActivity; -import com.android.settings.testutils.SettingsRobolectricTestRunner; -import com.android.settings.TestConfig; import com.android.settings.R; -import com.android.settingslib.bluetooth.LocalBluetoothAdapter; -import com.android.settingslib.core.lifecycle.Lifecycle; +import com.android.settings.TestConfig; +import com.android.settings.dashboard.DashboardFragment; +import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; import org.junit.Test; @@ -52,21 +45,11 @@ import org.robolectric.annotation.Config; @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class BluetoothPairingPreferenceControllerTest { private static final int ORDER = 1; - private Context mContext; + @Mock(answer = Answers.RETURNS_DEEP_STUBS) - private PreferenceFragment mFragment; - @Mock - private Lifecycle mLifecycle; - @Mock - private LocalBluetoothAdapter mLocalAdapter; - @Mock - private FragmentManager mFragmentManager; - @Mock - private FragmentTransaction mFragmentTransaction; - @Mock - private PreferenceScreen mPreferenceScreen; - @Mock - private SettingsActivity mSettingsActivity; + private DashboardFragment mFragment; + + private Context mContext; private Preference mPreference; private BluetoothPairingPreferenceController mController; @@ -75,14 +58,13 @@ public class BluetoothPairingPreferenceControllerTest { public void setUp() { MockitoAnnotations.initMocks(this); - mContext = RuntimeEnvironment.application; + mContext = spy(RuntimeEnvironment.application); when(mFragment.getPreferenceScreen().getContext()).thenReturn(mContext); mPreference = new Preference(mContext); mPreference.setKey(BluetoothPairingPreferenceController.KEY_PAIRING); - mController = new BluetoothPairingPreferenceController(mContext, mFragment, - mSettingsActivity); + mController = new BluetoothPairingPreferenceController(mContext, mFragment); } @Test @@ -98,9 +80,10 @@ public class BluetoothPairingPreferenceControllerTest { @Test public void testHandlePreferenceTreeClick_startFragment() { + doNothing().when(mContext).startActivity(any(Intent.class)); + mController.handlePreferenceTreeClick(mPreference); - verify(mSettingsActivity).startPreferencePanelAsUser(eq(mFragment), anyString(), any(), - anyInt(), any()); + verify(mContext).startActivity(any(Intent.class)); } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java index a188ce11f71..506e394d5b1 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java @@ -16,6 +16,7 @@ package com.android.settings.fuelgauge; +import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Matchers.any; @@ -30,9 +31,9 @@ import static org.mockito.Mockito.verify; import android.app.Activity; import android.app.AppOpsManager; -import android.app.Fragment; import android.app.LoaderManager; import android.content.Context; +import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.graphics.drawable.Drawable; @@ -196,21 +197,22 @@ public class AdvancedPowerUsageDetailTest { mTestActivity = spy(new SettingsActivity()); doReturn(mPackageManager).when(mTestActivity).getPackageManager(); + doReturn(mPackageManager).when(mActivity).getPackageManager(); doReturn(mAppOpsManager).when(mTestActivity).getSystemService(Context.APP_OPS_SERVICE); mBatteryUtils = spy(new BatteryUtils(mContext)); doReturn(FOREGROUND_SERVICE_TIME_US).when(mBatteryUtils).getForegroundServiceTotalTimeUs( any(BatteryStats.Uid.class), anyLong()); - final ArgumentCaptor captor = ArgumentCaptor.forClass(Bundle.class); + final ArgumentCaptor captor = ArgumentCaptor.forClass(Intent.class); Answer callable = invocation -> { - mBundle = captor.getValue(); + mBundle = captor.getValue().getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS); return null; }; - doAnswer(callable).when(mTestActivity).startPreferencePanelAsUser( - nullable(Fragment.class), nullable(String.class), captor.capture(), anyInt(), + doAnswer(callable).when(mActivity).startActivityAsUser(captor.capture(), nullable(UserHandle.class)); + doAnswer(callable).when(mActivity).startActivity(captor.capture()); mForegroundPreference = new Preference(mContext); mBackgroundPreference = new Preference(mContext); @@ -276,7 +278,7 @@ public class AdvancedPowerUsageDetailTest { @Test public void testStartBatteryDetailPage_hasBasicData() { - AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, mBatteryUtils, null, + AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mBatteryUtils, mFragment, mBatteryStatsHelper, 0, mBatteryEntry, USAGE_PERCENT, mAnomalies); assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_UID)).isEqualTo(UID); @@ -295,7 +297,7 @@ public class AdvancedPowerUsageDetailTest { mBatterySipper.drainType = BatterySipper.DrainType.PHONE; mBatterySipper.usageTimeMs = PHONE_FOREGROUND_TIME_MS; - AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, mBatteryUtils, null, + AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mBatteryUtils, mFragment, mBatteryStatsHelper, 0, mBatteryEntry, USAGE_PERCENT, null); assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_UID)).isEqualTo(UID); @@ -313,7 +315,7 @@ public class AdvancedPowerUsageDetailTest { public void testStartBatteryDetailPage_NormalApp() { mBatterySipper.mPackages = PACKAGE_NAME; mBatteryEntry.defaultPackageName = PACKAGE_NAME[0]; - AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, mBatteryUtils, null, + AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mBatteryUtils, mFragment, mBatteryStatsHelper, 0, mBatteryEntry, USAGE_PERCENT, mAnomalies); assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME)).isEqualTo( @@ -325,7 +327,7 @@ public class AdvancedPowerUsageDetailTest { @Test public void testStartBatteryDetailPage_SystemApp() { mBatterySipper.mPackages = null; - AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, mBatteryUtils, null, + AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mBatteryUtils, mFragment, mBatteryStatsHelper, 0, mBatteryEntry, USAGE_PERCENT, null); assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_LABEL)).isEqualTo(APP_LABEL); @@ -340,12 +342,11 @@ public class AdvancedPowerUsageDetailTest { final int appUid = 1010019; mBatterySipper.mPackages = PACKAGE_NAME; doReturn(appUid).when(mBatterySipper).getUid(); - AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, mBatteryUtils, null, + AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mBatteryUtils, mFragment, mBatteryStatsHelper, 0, mBatteryEntry, USAGE_PERCENT, null); - verify(mTestActivity).startPreferencePanelAsUser( - nullable(Fragment.class), nullable(String.class), nullable(Bundle.class), anyInt(), - eq(new UserHandle(10))); + + verify(mActivity).startActivityAsUser(any(Intent.class), eq(new UserHandle(10))); } @Test @@ -355,32 +356,27 @@ public class AdvancedPowerUsageDetailTest { final int currentUser = 20; ShadowActivityManager.setCurrentUser(currentUser); - AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, mBatteryUtils, null, + AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mBatteryUtils, mFragment, mBatteryStatsHelper, 0, mBatteryEntry, USAGE_PERCENT, null); - - verify(mTestActivity).startPreferencePanelAsUser( - nullable(Fragment.class), nullable(String.class), nullable(Bundle.class), anyInt(), - eq(new UserHandle(currentUser))); + verify(mActivity).startActivityAsUser(any(Intent.class), eq(new UserHandle(currentUser))); } @Test public void testStartBatteryDetailPage_noBatteryUsage_hasBasicData() { - final ArgumentCaptor captor = ArgumentCaptor.forClass(Bundle.class); - Answer callable = invocation -> { - mBundle = captor.getValue(); - return null; - }; - doAnswer(callable).when(mTestActivity).startPreferencePanelAsUser(nullable(Fragment.class), - nullable(String.class), captor.capture(), anyInt(), - nullable(UserHandle.class)); + final ArgumentCaptor captor = ArgumentCaptor.forClass(Intent.class); - AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, null, PACKAGE_NAME[0]); + AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mFragment, PACKAGE_NAME[0]); - assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME)).isEqualTo( - PACKAGE_NAME[0]); - assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT)).isEqualTo( - "0%"); + verify(mActivity).startActivity(captor.capture()); + + assertThat(captor.getValue().getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS) + .getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME)) + .isEqualTo(PACKAGE_NAME[0]); + + assertThat(captor.getValue().getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS) + .getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT)) + .isEqualTo("0%"); } @Test @@ -388,7 +384,7 @@ public class AdvancedPowerUsageDetailTest { PackageManager.NameNotFoundException { doReturn(UID).when(mPackageManager).getPackageUid(PACKAGE_NAME[0], 0 /* no flag */); - AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, null, PACKAGE_NAME[0]); + AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mFragment, PACKAGE_NAME[0]); assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_UID)).isEqualTo(UID); } @@ -398,7 +394,7 @@ public class AdvancedPowerUsageDetailTest { mBatteryEntry.defaultPackageName = null; mBatteryEntry.sipper.mPackages = PACKAGE_NAME; - AdvancedPowerUsageDetail.startBatteryDetailPage(mTestActivity, mBatteryUtils, null, + AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mBatteryUtils, mFragment, mBatteryStatsHelper, 0, mBatteryEntry, USAGE_PERCENT, null); assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME)).isEqualTo( diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryAppListPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryAppListPreferenceControllerTest.java index cee84dea3ee..cf384327b09 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryAppListPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryAppListPreferenceControllerTest.java @@ -17,13 +17,11 @@ package com.android.settings.fuelgauge; import static com.google.common.truth.Truth.assertThat; - import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import android.content.Context; -import android.support.v14.preference.PreferenceFragment; import android.support.v7.preference.PreferenceGroup; import android.text.TextUtils; import android.text.format.DateUtils; @@ -36,6 +34,7 @@ import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.TestConfig; import com.android.settings.core.FeatureFlags; +import com.android.settings.core.InstrumentedPreferenceFragment; import com.android.settings.fuelgauge.anomaly.Anomaly; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.shadow.SettingsShadowSystemProperties; @@ -66,7 +65,7 @@ public class BatteryAppListPreferenceControllerTest { @Mock private PreferenceGroup mAppListGroup; @Mock - private PreferenceFragment mFragment; + private InstrumentedPreferenceFragment mFragment; @Mock private BatteryUtils mBatteryUtils; diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAnomalyDetailsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAnomalyDetailsTest.java index 37b279e3ce0..693117ede10 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAnomalyDetailsTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageAnomalyDetailsTest.java @@ -16,20 +16,19 @@ package com.android.settings.fuelgauge; +import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS; import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; import android.content.Context; -import android.content.pm.ApplicationInfo; +import android.content.Intent; import android.content.pm.PackageManager; import android.graphics.drawable.Drawable; -import android.os.Bundle; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceCategory; import android.support.v7.preference.PreferenceGroup; @@ -79,12 +78,9 @@ public class PowerUsageAnomalyDetailsTest { private PackageManager mPackageManager; @Mock private IconDrawableFactory mIconDrawableFactory; - @Mock - private ApplicationInfo mApplicationInfo; private Context mContext; private PowerUsageAnomalyDetails mFragment; private PreferenceGroup mAbnormalListGroup; - private Bundle mBundle; private List mAnomalyList; @Before @@ -176,21 +172,14 @@ public class PowerUsageAnomalyDetailsTest { @Test public void testStartBatteryAbnormalPage_dataCorrect() { - final ArgumentCaptor bundleCaptor = ArgumentCaptor.forClass(Bundle.class); - Answer bundleCallable = new Answer() { - @Override - public Void answer(InvocationOnMock invocation) throws Exception { - mBundle = bundleCaptor.getValue(); - return null; - } - }; - doAnswer(bundleCallable).when(mSettingsActivity).startPreferencePanelAsUser(any(), - anyString(), bundleCaptor.capture(), anyInt(), any()); + final ArgumentCaptor intent = ArgumentCaptor.forClass(Intent.class); PowerUsageAnomalyDetails.startBatteryAbnormalPage(mSettingsActivity, mFragment, mAnomalyList); - assertThat(mBundle.getParcelableArrayList( - PowerUsageAnomalyDetails.EXTRA_ANOMALY_LIST)).isEqualTo(mAnomalyList); + verify(mSettingsActivity).startActivity(intent.capture()); + assertThat(intent.getValue().getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS) + .getParcelableArrayList(PowerUsageAnomalyDetails.EXTRA_ANOMALY_LIST)) + .isEqualTo(mAnomalyList); } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/RestrictAppPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/RestrictAppPreferenceControllerTest.java index fbcedb7d8a3..45037363fcc 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/RestrictAppPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/RestrictAppPreferenceControllerTest.java @@ -16,25 +16,28 @@ package com.android.settings.fuelgauge; +import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT; +import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID; 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.spy; import static org.mockito.Mockito.verify; import android.app.AppOpsManager; import android.content.Context; -import android.support.v14.preference.PreferenceFragment; +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.core.InstrumentedPreferenceFragment; 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.RobolectricTestRunner; @@ -55,7 +58,7 @@ public class RestrictAppPreferenceControllerTest { @Mock private SettingsActivity mSettingsActivity; @Mock - private PreferenceFragment mFragment; + private InstrumentedPreferenceFragment mFragment; private List mPackageOpsList; private RestrictAppPreferenceController mRestrictAppPreferenceController; private Preference mPreference; @@ -107,11 +110,15 @@ public class RestrictAppPreferenceControllerTest { @Test public void testHandlePreferenceTreeClick_startFragment() { + final ArgumentCaptor intent = ArgumentCaptor.forClass(Intent.class); + mRestrictAppPreferenceController.handlePreferenceTreeClick(mPreference); - verify(mSettingsActivity).startPreferencePanelAsUser(eq(mFragment), - eq(RestrictedAppDetails.class.getName()), any(), eq(R.string.restricted_app_title), - any()); + verify(mSettingsActivity).startActivity(intent.capture()); + assertThat(intent.getValue().getStringExtra(EXTRA_SHOW_FRAGMENT)) + .isEqualTo(RestrictedAppDetails.class.getName()); + assertThat(intent.getValue().getIntExtra(EXTRA_SHOW_FRAGMENT_TITLE_RESID, -1)) + .isEqualTo(R.string.restricted_app_title); } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/anomaly/AnomalySummaryPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/anomaly/AnomalySummaryPreferenceControllerTest.java index d1d540dd760..f5c16b476ae 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/anomaly/AnomalySummaryPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/anomaly/AnomalySummaryPreferenceControllerTest.java @@ -17,24 +17,21 @@ package com.android.settings.fuelgauge.anomaly; import static com.google.common.truth.Truth.assertThat; - import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; -import static org.mockito.Matchers.eq; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import static org.robolectric.Shadows.shadowOf; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.content.Context; -import android.support.v14.preference.PreferenceFragment; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import com.android.settings.SettingsActivity; -import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; +import com.android.settings.core.InstrumentedPreferenceFragment; +import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; import org.junit.Test; @@ -57,7 +54,7 @@ public class AnomalySummaryPreferenceControllerTest { private static final int UID = 111; @Mock - private PreferenceFragment mFragment; + private InstrumentedPreferenceFragment mFragment; @Mock private FragmentManager mFragmentManager; @Mock @@ -89,7 +86,7 @@ public class AnomalySummaryPreferenceControllerTest { mAnomalyList = new ArrayList<>(); mAnomalySummaryPreferenceController = new AnomalySummaryPreferenceController( - mSettingsActivity, mFragment, 0 /* metricskey */); + mSettingsActivity, mFragment); } @Test diff --git a/tests/robotests/src/com/android/settings/location/RecentLocationRequestPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/location/RecentLocationRequestPreferenceControllerTest.java index a3c69c5b4ed..a33945128ff 100644 --- a/tests/robotests/src/com/android/settings/location/RecentLocationRequestPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/location/RecentLocationRequestPreferenceControllerTest.java @@ -15,8 +15,9 @@ */ package com.android.settings.location; +import static com.android.settings.SettingsActivity.EXTRA_SHOW_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.argThat; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; @@ -27,7 +28,7 @@ import static org.mockito.Mockito.when; import android.arch.lifecycle.LifecycleOwner; import android.content.Context; -import android.os.Bundle; +import android.content.Intent; import android.provider.Settings; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceCategory; @@ -35,7 +36,6 @@ import android.support.v7.preference.PreferenceScreen; import android.text.TextUtils; import com.android.settings.R; -import com.android.settings.SettingsActivity; import com.android.settings.TestConfig; import com.android.settings.applications.appinfo.AppInfoDashboardFragment; import com.android.settings.testutils.SettingsRobolectricTestRunner; @@ -47,6 +47,7 @@ import com.android.settingslib.location.RecentLocationApps.Request; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; import org.mockito.ArgumentMatcher; import org.mockito.InOrder; import org.mockito.Mock; @@ -163,8 +164,9 @@ public class RecentLocationRequestPreferenceControllerTest { @Test public void onPreferenceClick_shouldLaunchAppDetails() { - final SettingsActivity activity = mock(SettingsActivity.class); - when(mFragment.getActivity()).thenReturn(activity); + final Context context= mock(Context.class); + when(mFragment.getContext()).thenReturn(context); + final List requests = new ArrayList<>(); final Request request = mock(Request.class); requests.add(request); @@ -174,11 +176,14 @@ public class RecentLocationRequestPreferenceControllerTest { mController.displayPreference(mScreen); mController.updateState(mCategory); + final ArgumentCaptor intent = ArgumentCaptor.forClass(Intent.class); + preference.performClick(); - verify(activity).startPreferencePanelAsUser(any(), - eq(AppInfoDashboardFragment.class.getName()), - any(Bundle.class), anyInt(), any()); + verify(context).startActivity(intent.capture()); + + assertThat(intent.getValue().getStringExtra(EXTRA_SHOW_FRAGMENT)) + .isEqualTo(AppInfoDashboardFragment.class.getName()); } private static ArgumentMatcher titleMatches(String expected) {