Migrate more settings to use SubSettingsLauncher

Bug: 73250851
Test: robotests
Change-Id: I08f6f380489646231d6d8ceb1488e2efb036bf69
This commit is contained in:
Fan Zhang
2018-02-16 10:37:37 -08:00
parent 6f367a79ce
commit 7cf99f5f12
26 changed files with 260 additions and 197 deletions

View File

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

View File

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

View File

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

View File

@@ -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<ProfileData> getProfileData() {
return mProfiles;
}
private void updateUi() {
if (!isAvailable()) {
// This should not happen

View File

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

View File

@@ -27,15 +27,14 @@ 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) {
@@ -56,13 +55,11 @@ public class ConvertToFbe extends InstrumentedFragment {
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) {
final Button button = rootView.findViewById(R.id.button_convert_fbe);
button.setOnClickListener(v -> {
if (!runKeyguardConfirmation(KEYGUARD_REQUEST)) {
convert();
}
}
});
return rootView;
@@ -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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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;
}

View File

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

View File

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

View File

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

View File

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

View File

@@ -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,27 +115,36 @@ 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))
final ArgumentCaptor<Intent> 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))
final ArgumentCaptor<Intent> 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();
}

View File

@@ -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<Bundle> captor = ArgumentCaptor.forClass(Bundle.class);
verify(sa).startPreferencePanel(any(), anyString(), captor.capture(), anyInt(), any(),
any(), anyInt());
final ArgumentCaptor<Intent> 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();
}
}

View File

@@ -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<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
ArgumentCaptor<Bundle> 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 {

View File

@@ -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<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
verify(mActivity).startActivity(intentCaptor.capture());
assertThat(intentCaptor.getValue().getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT))
.isEqualTo(ProcessStatsDetail.class.getName());
}
}

View File

@@ -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<Intent> 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());
}
}

View File

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

View File

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