diff --git a/res/drawable/ic_accessibility_visibility.xml b/res/drawable/ic_accessibility_visibility.xml
new file mode 100644
index 00000000000..2c04f390daf
--- /dev/null
+++ b/res/drawable/ic_accessibility_visibility.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 22f6c91a988..cb921ae7395 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -3768,6 +3768,8 @@
Edit access point
Not set
+
+ Not set
Name
@@ -6322,9 +6324,9 @@
Manage battery usage
- ^1 total • ^2 background for past 24 hr
+ ^1 total • ^2 background for past 24 hr
- ^1 total • ^2 background for ^3
+ ^1 total • ^2 background for ^3
Total less than a minute for past 24 hr
@@ -6332,9 +6334,9 @@
Total less than a minute for ^1
- Background less than a minute for past 24 hr
+ Background less than a minute for past 24 hr
- Background less than a minute for ^1
+ Background less than a minute for ^1
^1 total for past 24 hr
@@ -6342,14 +6344,14 @@
^1 total for ^2
- ^1 background for past 24 hr
+ ^1 background for past 24 hr
- ^1 background for ^2
+ ^1 background for ^2
- ^1 total • background less than a minute for past 24 hr
+ ^1 total • background less than a minute for past 24 hr
- ^1 total • background less than a minute for ^2
+ ^1 total • background less than a minute for ^2
No usage for past 24 hr
diff --git a/res/xml/accessibility_settings_for_setup_wizard.xml b/res/xml/accessibility_settings_for_setup_wizard.xml
index 1b9939a10a9..a3f56b534d6 100644
--- a/res/xml/accessibility_settings_for_setup_wizard.xml
+++ b/res/xml/accessibility_settings_for_setup_wizard.xml
@@ -14,46 +14,44 @@
limitations under the License.
-->
-
-
-
-
-
+ android:title="@string/title_font_size"/>
+ android:title="@string/screen_zoom_title"/>
+
+
+ android:summary="@string/select_to_speak_summary"/>
-
+ android:summary="@string/talkback_summary"/>
diff --git a/res/xml/date_time_prefs.xml b/res/xml/date_time_prefs.xml
index 27311322e28..a0801f9df1b 100644
--- a/res/xml/date_time_prefs.xml
+++ b/res/xml/date_time_prefs.xml
@@ -48,6 +48,12 @@
settings:allowDividerAbove="true"
settings:userRestriction="no_config_date_time"/>
+
+
+
-
-
diff --git a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java
index ffc8335c889..b5496a82b9b 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java
@@ -16,24 +16,32 @@
package com.android.settings.accessibility;
+import static com.android.settings.Utils.getAdaptiveIcon;
import static com.android.settings.accessibility.AccessibilityUtil.AccessibilityServiceFragmentType.VOLUME_SHORTCUT_TOGGLE;
+import static com.android.settingslib.widget.TwoTargetPreference.ICON_SIZE_MEDIUM;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.app.settings.SettingsEnums;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.ServiceInfo;
+import android.graphics.Color;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
+import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityManager;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
import androidx.preference.Preference;
import androidx.recyclerview.widget.RecyclerView;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
+import com.android.settingslib.RestrictedPreference;
import com.google.android.setupdesign.GlifPreferenceLayout;
@@ -61,8 +69,8 @@ public class AccessibilitySettingsForSetupWizard extends SettingsPreferenceFragm
// Preference controls.
private Preference mDisplayMagnificationPreference;
- private Preference mScreenReaderPreference;
- private Preference mSelectToSpeakPreference;
+ private RestrictedPreference mScreenReaderPreference;
+ private RestrictedPreference mSelectToSpeakPreference;
@Override
public int getMetricsCategory() {
@@ -73,16 +81,24 @@ public class AccessibilitySettingsForSetupWizard extends SettingsPreferenceFragm
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
- GlifPreferenceLayout layout = (GlifPreferenceLayout) view;
+ final GlifPreferenceLayout layout = (GlifPreferenceLayout) view;
layout.setDividerInsets(Integer.MAX_VALUE, 0);
-
+ layout.setDescriptionText(R.string.vision_settings_description);
layout.setHeaderText(R.string.vision_settings_title);
+ layout.setIcon(getResources().getDrawable(R.drawable.ic_accessibility_visibility));
+
+ final ImageView iconView = layout.findManagedViewById(R.id.sud_layout_icon);
+ final FrameLayout.LayoutParams params =
+ (FrameLayout.LayoutParams) iconView.getLayoutParams();
+ params.gravity = Gravity.START;
+ layout.getHeaderTextView().setGravity(Gravity.START);
+ layout.getDescriptionTextView().setGravity(Gravity.START);
}
@Override
public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent,
Bundle savedInstanceState) {
- GlifPreferenceLayout layout = (GlifPreferenceLayout) parent;
+ final GlifPreferenceLayout layout = (GlifPreferenceLayout) parent;
return layout.onCreateRecyclerView(inflater, parent, savedInstanceState);
}
@@ -145,7 +161,7 @@ public class AccessibilitySettingsForSetupWizard extends SettingsPreferenceFragm
return null;
}
- private void updateAccessibilityServicePreference(Preference preference,
+ private void updateAccessibilityServicePreference(RestrictedPreference preference,
String packageName, String serviceName, String targetFragment) {
final AccessibilityServiceInfo info = findService(packageName, serviceName);
if (info == null) {
@@ -153,24 +169,28 @@ public class AccessibilitySettingsForSetupWizard extends SettingsPreferenceFragm
return;
}
- ServiceInfo serviceInfo = info.getResolveInfo().serviceInfo;
- String title = info.getResolveInfo().loadLabel(getPackageManager()).toString();
+ final ServiceInfo serviceInfo = info.getResolveInfo().serviceInfo;
+ final Drawable icon = info.getResolveInfo().loadIcon(getPackageManager());
+ preference.setIcon(getAdaptiveIcon(getContext(), icon, Color.WHITE));
+ preference.setIconSize(ICON_SIZE_MEDIUM);
+ final String title = info.getResolveInfo().loadLabel(getPackageManager()).toString();
preference.setTitle(title);
- ComponentName componentName = new ComponentName(serviceInfo.packageName, serviceInfo.name);
+ final ComponentName componentName =
+ new ComponentName(serviceInfo.packageName, serviceInfo.name);
preference.setKey(componentName.flattenToString());
if (AccessibilityUtil.getAccessibilityServiceFragmentType(info) == VOLUME_SHORTCUT_TOGGLE) {
preference.setFragment(targetFragment);
}
// Update the extras.
- Bundle extras = preference.getExtras();
+ final Bundle extras = preference.getExtras();
extras.putParcelable(AccessibilitySettings.EXTRA_COMPONENT_NAME, componentName);
extras.putString(AccessibilitySettings.EXTRA_PREFERENCE_KEY,
preference.getKey());
extras.putString(AccessibilitySettings.EXTRA_TITLE, title);
- String description = info.loadDescription(getPackageManager());
+ final String description = info.loadDescription(getPackageManager());
extras.putString(AccessibilitySettings.EXTRA_SUMMARY, description);
extras.putInt(AccessibilitySettings.EXTRA_ANIMATED_IMAGE_RES, info.getAnimatedImageRes());
diff --git a/src/com/android/settings/biometrics/combination/BiometricsSettingsBase.java b/src/com/android/settings/biometrics/combination/BiometricsSettingsBase.java
index 4260c7c9130..c449ff4bfce 100644
--- a/src/com/android/settings/biometrics/combination/BiometricsSettingsBase.java
+++ b/src/com/android/settings/biometrics/combination/BiometricsSettingsBase.java
@@ -48,16 +48,15 @@ public abstract class BiometricsSettingsBase extends DashboardFragment {
private static final int CHOOSE_LOCK_REQUEST = 2002;
private static final String SAVE_STATE_CONFIRM_CREDETIAL = "confirm_credential";
+ private static final String DO_NOT_FINISH_ACTIVITY = "do_not_finish_activity";
protected int mUserId;
- protected long mFaceChallenge;
- protected long mFingerprintChallenge;
- protected int mFaceSensorId;
- protected int mFingerprintSensorId;
protected long mGkPwHandle;
private boolean mConfirmCredential;
@Nullable private FaceManager mFaceManager;
@Nullable private FingerprintManager mFingerprintManager;
+ // Do not finish() if choosing/confirming credential, or showing fp/face settings
+ private boolean mDoNotFinishActivity;
@Override
public void onAttach(Context context) {
@@ -78,6 +77,7 @@ public abstract class BiometricsSettingsBase extends DashboardFragment {
if (savedInstanceState != null) {
mConfirmCredential = savedInstanceState.getBoolean(SAVE_STATE_CONFIRM_CREDETIAL);
+ mDoNotFinishActivity = savedInstanceState.getBoolean(DO_NOT_FINISH_ACTIVITY);
if (savedInstanceState.containsKey(
ChooseLockSettingsHelper.EXTRA_KEY_REQUEST_GK_PW_HANDLE)) {
mGkPwHandle = savedInstanceState.getLong(
@@ -92,31 +92,47 @@ public abstract class BiometricsSettingsBase extends DashboardFragment {
}
@Override
- public void onDestroy() {
- super.onDestroy();
- if (getActivity().isFinishing()) {
- mFaceManager.revokeChallenge(mFaceSensorId, mUserId, mFaceChallenge);
- mFingerprintManager.revokeChallenge(mUserId, mFingerprintChallenge);
+ public void onResume() {
+ super.onResume();
+ if (!mConfirmCredential) {
+ mDoNotFinishActivity = false;
+ }
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ if (!getActivity().isChangingConfigurations() && !mDoNotFinishActivity) {
BiometricUtils.removeGatekeeperPasswordHandle(getActivity(), mGkPwHandle);
+ getActivity().finish();
}
}
@Override
public boolean onPreferenceTreeClick(Preference preference) {
final String key = preference.getKey();
+
+ // Generate challenge (and request LSS to create a HAT) each time the preference is clicked,
+ // since FingerprintSettings and FaceSettings revoke the challenge when finishing.
if (getFacePreferenceKey().equals(key)) {
- final byte[] token = BiometricUtils.requestGatekeeperHat(getActivity(), mGkPwHandle,
- mUserId, mFaceChallenge);
- final Bundle extras = preference.getExtras();
- extras.putByteArray(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);
- extras.putInt(BiometricEnrollBase.EXTRA_KEY_SENSOR_ID, mFaceSensorId);
- extras.putLong(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, mFaceChallenge);
+ mDoNotFinishActivity = true;
+ mFaceManager.generateChallenge((sensorId, challenge) -> {
+ final byte[] token = BiometricUtils.requestGatekeeperHat(getActivity(), mGkPwHandle,
+ mUserId, challenge);
+ final Bundle extras = preference.getExtras();
+ extras.putByteArray(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);
+ extras.putInt(BiometricEnrollBase.EXTRA_KEY_SENSOR_ID, sensorId);
+ extras.putLong(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, challenge);
+ });
} else if (getFingerprintPreferenceKey().equals(key)) {
- final byte[] token = BiometricUtils.requestGatekeeperHat(getActivity(), mGkPwHandle,
- mUserId, mFingerprintChallenge);
- final Bundle extras = preference.getExtras();
- extras.putByteArray(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);
- extras.putLong(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, mFingerprintChallenge);
+ mDoNotFinishActivity = true;
+ mFingerprintManager.generateChallenge(mUserId, (sensorId, challenge) -> {
+ final byte[] token = BiometricUtils.requestGatekeeperHat(getActivity(), mGkPwHandle,
+ mUserId, challenge);
+ final Bundle extras = preference.getExtras();
+ extras.putByteArray(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);
+ extras.putLong(BiometricEnrollBase.EXTRA_KEY_CHALLENGE, challenge);
+ });
}
return super.onPreferenceTreeClick(preference);
}
@@ -125,6 +141,7 @@ public abstract class BiometricsSettingsBase extends DashboardFragment {
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(SAVE_STATE_CONFIRM_CREDETIAL, mConfirmCredential);
+ outState.putBoolean(DO_NOT_FINISH_ACTIVITY, mDoNotFinishActivity);
if (mGkPwHandle != 0L) {
outState.putLong(ChooseLockSettingsHelper.EXTRA_KEY_REQUEST_GK_PW_HANDLE, mGkPwHandle);
}
@@ -135,17 +152,10 @@ public abstract class BiometricsSettingsBase extends DashboardFragment {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CONFIRM_REQUEST || requestCode == CHOOSE_LOCK_REQUEST) {
mConfirmCredential = false;
+ mDoNotFinishActivity = false;
if (resultCode == RESULT_FINISHED || resultCode == RESULT_OK) {
- if (data != null && BiometricUtils.containsGatekeeperPasswordHandle(data)) {
+ if (BiometricUtils.containsGatekeeperPasswordHandle(data)) {
mGkPwHandle = BiometricUtils.getGatekeeperPasswordHandle(data);
- mFaceManager.generateChallenge((sensorId, challenge) -> {
- mFaceSensorId = sensorId;
- mFaceChallenge = challenge;
- });
- mFingerprintManager.generateChallenge(mUserId, (sensorId, challenge) -> {
- mFingerprintSensorId = sensorId;
- mFingerprintChallenge = challenge;
- });
} else {
Log.d(getLogTag(), "Data null or GK PW missing.");
finish();
@@ -178,6 +188,7 @@ public abstract class BiometricsSettingsBase extends DashboardFragment {
if (mUserId != UserHandle.USER_NULL) {
builder.setUserId(mUserId);
}
+ mDoNotFinishActivity = true;
final boolean launched = builder.show();
if (!launched) {
diff --git a/src/com/android/settings/display/AdaptiveSleepPermissionPreferenceController.java b/src/com/android/settings/display/AdaptiveSleepPermissionPreferenceController.java
index 0d21e9caf80..8e4db0d26ad 100644
--- a/src/com/android/settings/display/AdaptiveSleepPermissionPreferenceController.java
+++ b/src/com/android/settings/display/AdaptiveSleepPermissionPreferenceController.java
@@ -37,26 +37,18 @@ public class AdaptiveSleepPermissionPreferenceController {
@VisibleForTesting
BannerMessagePreference mPreference;
private final PackageManager mPackageManager;
+ private final Context mContext;
public AdaptiveSleepPermissionPreferenceController(Context context) {
- final String packageName = context.getPackageManager().getAttentionServicePackageName();
mPackageManager = context.getPackageManager();
- final Intent intent = new Intent(
- android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
- intent.setData(Uri.parse("package:" + packageName));
- mPreference = new BannerMessagePreference(context);
- mPreference.setTitle(R.string.adaptive_sleep_title_no_permission);
- mPreference.setSummary(R.string.adaptive_sleep_summary_no_permission);
- mPreference.setPositiveButtonText(R.string.adaptive_sleep_manage_permission_button);
- mPreference.setPositiveButtonOnClickListener(p -> {
- context.startActivity(intent);
- });
+ mContext = context;
}
/**
* Adds the controlled preference to the provided preference screen.
*/
public void addToScreen(PreferenceScreen screen) {
+ initializePreference();
if (!hasSufficientPermission(mPackageManager)) {
screen.addPreference(mPreference);
}
@@ -68,4 +60,19 @@ public class AdaptiveSleepPermissionPreferenceController {
public void updateVisibility() {
mPreference.setVisible(!hasSufficientPermission(mPackageManager));
}
+
+ private void initializePreference() {
+ final String packageName = mContext.getPackageManager().getAttentionServicePackageName();
+ final Intent intent = new Intent(
+ android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
+ intent.setData(Uri.parse("package:" + packageName));
+ mPreference = new BannerMessagePreference(mContext);
+ mPreference.setTitle(R.string.adaptive_sleep_title_no_permission);
+ mPreference.setSummary(R.string.adaptive_sleep_summary_no_permission);
+ mPreference.setPositiveButtonText(R.string.adaptive_sleep_manage_permission_button);
+ mPreference.setPositiveButtonOnClickListener(p -> {
+ mContext.startActivity(intent);
+ });
+ }
+
}
diff --git a/src/com/android/settings/display/AdaptiveSleepPreferenceController.java b/src/com/android/settings/display/AdaptiveSleepPreferenceController.java
index 70d8a79f390..aa02ce51c81 100644
--- a/src/com/android/settings/display/AdaptiveSleepPreferenceController.java
+++ b/src/com/android/settings/display/AdaptiveSleepPreferenceController.java
@@ -49,10 +49,10 @@ public class AdaptiveSleepPreferenceController {
public static final String PREFERENCE_KEY = "adaptive_sleep";
private static final int DEFAULT_VALUE = 0;
private final SensorPrivacyManager mPrivacyManager;
- private RestrictionUtils mRestrictionUtils;
- private PackageManager mPackageManager;
- private Context mContext;
- private MetricsFeatureProvider mMetricsFeatureProvider;
+ private final RestrictionUtils mRestrictionUtils;
+ private final PackageManager mPackageManager;
+ private final Context mContext;
+ private final MetricsFeatureProvider mMetricsFeatureProvider;
@VisibleForTesting
RestrictedSwitchPreference mPreference;
@@ -62,19 +62,6 @@ public class AdaptiveSleepPreferenceController {
mRestrictionUtils = restrictionUtils;
mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
mPrivacyManager = SensorPrivacyManager.getInstance(context);
- mPreference = new RestrictedSwitchPreference(context);
- mPreference.setTitle(R.string.adaptive_sleep_title);
- mPreference.setSummary(R.string.adaptive_sleep_description);
- mPreference.setChecked(isChecked());
- mPreference.setKey(PREFERENCE_KEY);
- mPreference.setOnPreferenceClickListener(preference -> {
- final boolean isChecked = ((RestrictedSwitchPreference) preference).isChecked();
- mMetricsFeatureProvider.action(context, SettingsEnums.ACTION_SCREEN_ATTENTION_CHANGED,
- isChecked);
- Settings.Secure.putInt(context.getContentResolver(),
- Settings.Secure.ADAPTIVE_SLEEP, isChecked ? 1 : DEFAULT_VALUE);
- return true;
- });
mPackageManager = context.getPackageManager();
}
@@ -86,6 +73,7 @@ public class AdaptiveSleepPreferenceController {
* Adds the controlled preference to the provided preference screen.
*/
public void addToScreen(PreferenceScreen screen) {
+ initializePreference();
updatePreference();
screen.addPreference(mPreference);
}
@@ -103,6 +91,23 @@ public class AdaptiveSleepPreferenceController {
}
}
+ @VisibleForTesting
+ void initializePreference() {
+ mPreference = new RestrictedSwitchPreference(mContext);
+ mPreference.setTitle(R.string.adaptive_sleep_title);
+ mPreference.setSummary(R.string.adaptive_sleep_description);
+ mPreference.setChecked(isChecked());
+ mPreference.setKey(PREFERENCE_KEY);
+ mPreference.setOnPreferenceChangeListener((preference, value) -> {
+ final boolean isChecked = (Boolean) value;
+ mMetricsFeatureProvider.action(mContext, SettingsEnums.ACTION_SCREEN_ATTENTION_CHANGED,
+ isChecked);
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.ADAPTIVE_SLEEP, isChecked ? 1 : DEFAULT_VALUE);
+ return true;
+ });
+ }
+
@VisibleForTesting
boolean isChecked() {
return hasSufficientPermission(mContext.getPackageManager()) && !isCameraLocked()
diff --git a/src/com/android/settings/display/ScreenTimeoutSettings.java b/src/com/android/settings/display/ScreenTimeoutSettings.java
index 27e1e1bfc45..6dfb22529fe 100644
--- a/src/com/android/settings/display/ScreenTimeoutSettings.java
+++ b/src/com/android/settings/display/ScreenTimeoutSettings.java
@@ -71,11 +71,15 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
private CharSequence[] mInitialEntries;
private CharSequence[] mInitialValues;
private FooterPreference mPrivacyPreference;
- private MetricsFeatureProvider mMetricsFeatureProvider;
+ private final MetricsFeatureProvider mMetricsFeatureProvider;
private SensorPrivacyManager mPrivacyManager;
+ @VisibleForTesting
+ Context mContext;
+
@VisibleForTesting
RestrictedLockUtils.EnforcedAdmin mAdmin;
+
@VisibleForTesting
Preference mDisableOptionsPreference;
@@ -97,6 +101,7 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
@Override
public void onAttach(Context context) {
super.onAttach(context);
+ mContext = context;
mInitialEntries = getResources().getStringArray(R.array.screen_timeout_entries);
mInitialValues = getResources().getStringArray(R.array.screen_timeout_values);
mAdaptiveSleepController = new AdaptiveSleepPreferenceController(context);
@@ -104,11 +109,6 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
context);
mAdaptiveSleepCameraStatePreferenceController =
new AdaptiveSleepCameraStatePreferenceController(context);
- mPrivacyPreference = new FooterPreference(context);
- mPrivacyPreference.setIcon(R.drawable.ic_privacy_shield_24dp);
- mPrivacyPreference.setTitle(R.string.adaptive_sleep_privacy);
- mPrivacyPreference.setSelectable(false);
- mPrivacyPreference.setLayoutResource(R.layout.preference_footer);
mPrivacyManager = SensorPrivacyManager.getInstance(context);
mPrivacyManager.addSensorPrivacyListener(CAMERA,
(sensor, enabled) -> mAdaptiveSleepController.updatePreference());
@@ -167,6 +167,12 @@ public class ScreenTimeoutSettings extends RadioButtonPickerFragment implements
preferenceWithLargestTimeout.setChecked(true);
}
+ mPrivacyPreference = new FooterPreference(mContext);
+ mPrivacyPreference.setIcon(R.drawable.ic_privacy_shield_24dp);
+ mPrivacyPreference.setTitle(R.string.adaptive_sleep_privacy);
+ mPrivacyPreference.setSelectable(false);
+ mPrivacyPreference.setLayoutResource(R.layout.preference_footer);
+
if (isScreenAttentionAvailable(getContext())) {
mAdaptiveSleepPermissionController.addToScreen(screen);
mAdaptiveSleepCameraStatePreferenceController.addToScreen(screen);
diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
index 4dbde251276..21160d70cf4 100644
--- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
@@ -70,6 +70,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
public static final String EXTRA_PACKAGE_NAME = "extra_package_name";
public static final String EXTRA_FOREGROUND_TIME = "extra_foreground_time";
public static final String EXTRA_BACKGROUND_TIME = "extra_background_time";
+ public static final String EXTRA_SLOT_TIME = "extra_slot_time";
public static final String EXTRA_LABEL = "extra_label";
public static final String EXTRA_ICON_ID = "extra_icon_id";
public static final String EXTRA_POWER_USAGE_PERCENT = "extra_power_usage_percent";
@@ -184,6 +185,7 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
args.putInt(EXTRA_UID, launchArgs.mUid);
args.putLong(EXTRA_BACKGROUND_TIME, launchArgs.mBackgroundTimeMs);
args.putLong(EXTRA_FOREGROUND_TIME, launchArgs.mForegroundTimeMs);
+ args.putString(EXTRA_SLOT_TIME, launchArgs.mSlotInformation);
args.putString(EXTRA_POWER_USAGE_PERCENT, launchArgs.mUsagePercent);
args.putInt(EXTRA_POWER_USAGE_AMOUNT, launchArgs.mConsumedPower);
final int userId = launchArgs.mIsUserEntry ? ActivityManager.getCurrentUser()
@@ -294,8 +296,9 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
if (enableTriState) {
final long foregroundTimeMs = bundle.getLong(EXTRA_FOREGROUND_TIME);
final long backgroundTimeMs = bundle.getLong(EXTRA_BACKGROUND_TIME);
+ final String slotTime = bundle.getString(EXTRA_SLOT_TIME, null);
//TODO(b/178197718) Update layout to support multiple lines
- controller.setSummary(getAppActiveTime(foregroundTimeMs, backgroundTimeMs));
+ controller.setSummary(getAppActiveTime(foregroundTimeMs, backgroundTimeMs, slotTime));
}
controller.done(context, true /* rebindActions */);
@@ -430,32 +433,46 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
getContext(), getArguments().getInt(EXTRA_UID), packageName);
}
- //TODO(b/178197718) Update method to support time period
- private CharSequence getAppActiveTime(long foregroundTimeMs, long backgroundTimeMs) {
+ private CharSequence getAppActiveTime(
+ long foregroundTimeMs, long backgroundTimeMs, String slotTime) {
final long totalTimeMs = foregroundTimeMs + backgroundTimeMs;
final CharSequence usageTimeSummary;
if (totalTimeMs == 0) {
usageTimeSummary = getText(R.string.battery_not_usage);
+ } else if (slotTime == null) {
+ // Shows summary text with past 24 hr if slot time is null.
+ usageTimeSummary =
+ getAppPast24HrActiveSummary(foregroundTimeMs, backgroundTimeMs, totalTimeMs);
+ } else {
+ // Shows summary text with slot time.
+ usageTimeSummary = getAppActiveSummaryWithSlotTime(
+ foregroundTimeMs, backgroundTimeMs, totalTimeMs, slotTime);
+ }
+ return usageTimeSummary;
+ }
+
+ private CharSequence getAppPast24HrActiveSummary(
+ long foregroundTimeMs, long backgroundTimeMs, long totalTimeMs) {
// Shows background summary only if we don't have foreground usage time.
- } else if (foregroundTimeMs == 0 && backgroundTimeMs != 0) {
- usageTimeSummary = backgroundTimeMs < DateUtils.MINUTE_IN_MILLIS ?
- getText(R.string.battery_background_usage_less_minute) :
- TextUtils.expandTemplate(getText(R.string.battery_background_usage),
- StringUtil.formatElapsedTime(
- getContext(),
- backgroundTimeMs,
- /* withSeconds */ false,
- /* collapseTimeUnit */ false));
+ if (foregroundTimeMs == 0 && backgroundTimeMs != 0) {
+ return backgroundTimeMs < DateUtils.MINUTE_IN_MILLIS ?
+ getText(R.string.battery_bg_usage_less_minute) :
+ TextUtils.expandTemplate(getText(R.string.battery_bg_usage),
+ StringUtil.formatElapsedTime(
+ getContext(),
+ backgroundTimeMs,
+ /* withSeconds */ false,
+ /* collapseTimeUnit */ false));
// Shows total usage summary only if total usage time is small.
} else if (totalTimeMs < DateUtils.MINUTE_IN_MILLIS) {
- usageTimeSummary = getText(R.string.battery_total_usage_less_minute);
+ return getText(R.string.battery_total_usage_less_minute);
// Shows different total usage summary when background usage time is small.
} else if (backgroundTimeMs < DateUtils.MINUTE_IN_MILLIS) {
- usageTimeSummary = TextUtils.expandTemplate(
+ return TextUtils.expandTemplate(
getText(backgroundTimeMs == 0 ?
R.string.battery_total_usage :
- R.string.battery_total_usage_and_background_less_minute_usage),
+ R.string.battery_total_usage_and_bg_less_minute_usage),
StringUtil.formatElapsedTime(
getContext(),
totalTimeMs,
@@ -463,8 +480,8 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
/* collapseTimeUnit */ false));
// Shows default summary.
} else {
- usageTimeSummary = TextUtils.expandTemplate(
- getText(R.string.battery_total_and_background_usage),
+ return TextUtils.expandTemplate(
+ getText(R.string.battery_total_and_bg_usage),
StringUtil.formatElapsedTime(
getContext(),
totalTimeMs,
@@ -476,6 +493,51 @@ public class AdvancedPowerUsageDetail extends DashboardFragment implements
/* withSeconds */ false,
/* collapseTimeUnit */ false));
}
- return usageTimeSummary;
+ }
+
+ private CharSequence getAppActiveSummaryWithSlotTime(
+ long foregroundTimeMs, long backgroundTimeMs, long totalTimeMs, String slotTime) {
+ // Shows background summary only if we don't have foreground usage time.
+ if (foregroundTimeMs == 0 && backgroundTimeMs != 0) {
+ return backgroundTimeMs < DateUtils.MINUTE_IN_MILLIS ?
+ TextUtils.expandTemplate(
+ getText(R.string.battery_bg_usage_less_minute_with_period),
+ slotTime) :
+ TextUtils.expandTemplate(getText(R.string.battery_bg_usage_with_period),
+ StringUtil.formatElapsedTime(
+ getContext(),
+ backgroundTimeMs,
+ /* withSeconds */ false,
+ /* collapseTimeUnit */ false), slotTime);
+ // Shows total usage summary only if total usage time is small.
+ } else if (totalTimeMs < DateUtils.MINUTE_IN_MILLIS) {
+ return TextUtils.expandTemplate(
+ getText(R.string.battery_total_usage_less_minute_with_period), slotTime);
+ // Shows different total usage summary when background usage time is small.
+ } else if (backgroundTimeMs < DateUtils.MINUTE_IN_MILLIS) {
+ return TextUtils.expandTemplate(
+ getText(backgroundTimeMs == 0 ?
+ R.string.battery_total_usage_with_period :
+ R.string.battery_total_usage_and_bg_less_minute_usage_with_period),
+ StringUtil.formatElapsedTime(
+ getContext(),
+ totalTimeMs,
+ /* withSeconds */ false,
+ /* collapseTimeUnit */ false), slotTime);
+ // Shows default summary.
+ } else {
+ return TextUtils.expandTemplate(
+ getText(R.string.battery_total_and_bg_usage_with_period),
+ StringUtil.formatElapsedTime(
+ getContext(),
+ totalTimeMs,
+ /* withSeconds */ false,
+ /* collapseTimeUnit */ false),
+ StringUtil.formatElapsedTime(
+ getContext(),
+ backgroundTimeMs,
+ /* withSeconds */ false,
+ /* collapseTimeUnit */ false), slotTime);
+ }
}
}
diff --git a/src/com/android/settings/network/apn/ApnEditor.java b/src/com/android/settings/network/apn/ApnEditor.java
index afc68d5bb29..0b751620ad1 100644
--- a/src/com/android/settings/network/apn/ApnEditor.java
+++ b/src/com/android/settings/network/apn/ApnEditor.java
@@ -632,7 +632,7 @@ public class ApnEditor extends SettingsPreferenceFragment
checkNull(bearerMultiDescription(mBearerMulti.getValues())));
mMvnoType.setSummary(
checkNull(mvnoDescription(mMvnoType.getValue())));
- mMvnoMatchData.setSummary(checkNull(mMvnoMatchData.getText()));
+ mMvnoMatchData.setSummary(checkNullforMvnoValue(mMvnoMatchData.getText()));
// allow user to edit carrier_enabled for some APN
final boolean ceEditable = getResources().getBoolean(
R.bool.config_allow_edit_carrier_enabled);
@@ -791,7 +791,7 @@ public class ApnEditor extends SettingsPreferenceFragment
}
mMvnoType.setValue((String) newValue);
mMvnoType.setSummary(mvno);
- mMvnoMatchData.setSummary(checkNull(mMvnoMatchData.getText()));
+ mMvnoMatchData.setSummary(checkNullforMvnoValue(mMvnoMatchData.getText()));
} else if (KEY_PASSWORD.equals(key)) {
mPassword.setSummary(starify(newValue != null ? String.valueOf(newValue) : ""));
} else if (KEY_CARRIER_ENABLED.equals(key)) {
@@ -1216,6 +1216,14 @@ public class ApnEditor extends SettingsPreferenceFragment
return TextUtils.isEmpty(value) ? sNotSet : value;
}
+ /**
+ * To make traslation be diversity, use another string id for MVNO value.
+ */
+ private String checkNullforMvnoValue(String value) {
+ String notSetForMvnoValue = getResources().getString(R.string.apn_not_set_for_mvno);
+ return TextUtils.isEmpty(value) ? notSetForMvnoValue : value;
+ }
+
/**
* Returns null if the given string {@code value} equals to {@link #sNotSet}. This method
* should be used when convert a string value from preference to database.
diff --git a/src/com/android/settings/network/telephony/BackupCallingPreferenceController.java b/src/com/android/settings/network/telephony/BackupCallingPreferenceController.java
index 2b07b5d621b..c4bf6b46250 100644
--- a/src/com/android/settings/network/telephony/BackupCallingPreferenceController.java
+++ b/src/com/android/settings/network/telephony/BackupCallingPreferenceController.java
@@ -156,7 +156,7 @@ public class BackupCallingPreferenceController extends TelephonyTogglePreference
}
// TODO: remove log after fixing b/182326102
Log.d(LOG_TAG, "config " + CarrierConfigManager.KEY_CARRIER_CROSS_SIM_IMS_AVAILABLE_BOOL
- + "=" + featureEnableStatus + " for subId=" + mSubId);
+ + "=" + featureEnableStatus + " for subId=" + subscriptionId);
return (featureEnableStatus != null) && featureEnableStatus.booleanValue();
}
diff --git a/src/com/android/settings/password/ChooseLockSettingsHelper.java b/src/com/android/settings/password/ChooseLockSettingsHelper.java
index 29330f54872..5ed43fa21fb 100644
--- a/src/com/android/settings/password/ChooseLockSettingsHelper.java
+++ b/src/com/android/settings/password/ChooseLockSettingsHelper.java
@@ -359,21 +359,22 @@ public final class ChooseLockSettingsHelper {
requestGatekeeperPasswordHandle);
intent.setClassName(SETTINGS_PACKAGE_NAME, activityClass.getName());
+
+ Intent inIntent = mFragment != null ? mFragment.getActivity().getIntent() :
+ mActivity.getIntent();
+ copyInternalExtras(inIntent, intent);
if (external) {
intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+ copyOptionalExtras(inIntent, intent);
if (mFragment != null) {
- copyOptionalExtras(mFragment.getActivity().getIntent(), intent);
mFragment.startActivity(intent);
} else {
- copyOptionalExtras(mActivity.getIntent(), intent);
mActivity.startActivity(intent);
}
} else {
if (mFragment != null) {
- copyInternalExtras(mFragment.getActivity().getIntent(), intent);
mFragment.startActivityForResult(intent, request);
} else {
- copyInternalExtras(mActivity.getIntent(), intent);
mActivity.startActivityForResult(intent, request);
}
}
diff --git a/src/com/android/settings/password/ConfirmDeviceCredentialBaseActivity.java b/src/com/android/settings/password/ConfirmDeviceCredentialBaseActivity.java
index f0b50a1bfec..40297551152 100644
--- a/src/com/android/settings/password/ConfirmDeviceCredentialBaseActivity.java
+++ b/src/com/android/settings/password/ConfirmDeviceCredentialBaseActivity.java
@@ -30,6 +30,8 @@ import com.android.settings.SettingsActivity;
import com.android.settings.SetupWizardUtils;
import com.android.settings.Utils;
+import com.google.android.setupdesign.util.ThemeHelper;
+
public abstract class ConfirmDeviceCredentialBaseActivity extends SettingsActivity {
private static final String STATE_IS_KEYGUARD_LOCKED = "STATE_IS_KEYGUARD_LOCKED";
@@ -74,6 +76,7 @@ public abstract class ConfirmDeviceCredentialBaseActivity extends SettingsActivi
setTheme(SetupWizardUtils.getTheme(this, getIntent()));
mConfirmCredentialTheme = ConfirmCredentialTheme.NORMAL;
}
+ ThemeHelper.trySetDynamicColor(this);
super.onCreate(savedState);
if (mConfirmCredentialTheme == ConfirmCredentialTheme.NORMAL) {
diff --git a/src/com/android/settings/privacy/PrivacyHubPreferenceController.java b/src/com/android/settings/privacy/PrivacyHubPreferenceController.java
index b07b5f5e640..0de4f06c89c 100644
--- a/src/com/android/settings/privacy/PrivacyHubPreferenceController.java
+++ b/src/com/android/settings/privacy/PrivacyHubPreferenceController.java
@@ -35,6 +35,6 @@ public final class PrivacyHubPreferenceController extends BasePreferenceControll
@Override
public int getAvailabilityStatus() {
return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY,
- PROPERTY_PRIVACY_HUB_ENABLED, false) ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
+ PROPERTY_PRIVACY_HUB_ENABLED, true) ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
}
}
diff --git a/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java
index 843870d0a9e..880f9ccdcaf 100644
--- a/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/AdaptiveSleepPreferenceControllerTest.java
@@ -84,6 +84,7 @@ public class AdaptiveSleepPreferenceControllerTest {
eq(UserManager.DISALLOW_CONFIG_SCREEN_TIMEOUT))).thenReturn(null);
mController = new AdaptiveSleepPreferenceController(mContext, mRestrictionUtils);
+ mController.initializePreference();
when(mController.isCameraLocked()).thenReturn(false);
}
diff --git a/tests/robotests/src/com/android/settings/display/ScreenTimeoutSettingsTest.java b/tests/robotests/src/com/android/settings/display/ScreenTimeoutSettingsTest.java
index c4f55808870..24bcde871e4 100644
--- a/tests/robotests/src/com/android/settings/display/ScreenTimeoutSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/display/ScreenTimeoutSettingsTest.java
@@ -60,8 +60,6 @@ public class ScreenTimeoutSettingsTest {
private ScreenTimeoutSettings mSettings;
private Context mContext;
private ContentResolver mContentResolver;
-
- @Mock
private Resources mResources;
@Mock
@@ -85,7 +83,9 @@ public class ScreenTimeoutSettingsTest {
FakeFeatureFactory.setupForTest();
mContext = spy(getApplicationContext());
mSettings = spy(new ScreenTimeoutSettings());
+ mSettings.mContext = mContext;
mContentResolver = mContext.getContentResolver();
+ mResources = spy(mContext.getResources());
doReturn(TIMEOUT_ENTRIES).when(mResources).getStringArray(R.array.screen_timeout_entries);
doReturn(TIMEOUT_VALUES).when(mResources).getStringArray(R.array.screen_timeout_entries);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
index 5185593e8b7..1c2c0596231 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
@@ -81,6 +81,7 @@ public class AdvancedPowerUsageDetailTest {
private static final String SUMMARY = "summary";
private static final String[] PACKAGE_NAME = {"com.android.app"};
private static final String USAGE_PERCENT = "16%";
+ private static final String SLOT_TIME = "12 am-2 am";
private static final int ICON_ID = 123;
private static final int UID = 1;
private static final int POWER_MAH = 150;
@@ -284,7 +285,7 @@ public class AdvancedPowerUsageDetailTest {
}
@Test
- public void testInitHeader_backgroundTwoMinutesForegroundZero_hasCorrectSummary() {
+ public void testInitHeader_backgroundTwoMinForegroundZero_hasCorrectSummary() {
final long backgroundTimeTwoMinutes = 120000;
final long foregroundTimeZero = 0;
Bundle bundle = new Bundle(2);
@@ -301,7 +302,7 @@ public class AdvancedPowerUsageDetailTest {
}
@Test
- public void testInitHeader_backgroundLessThanAMinutesForegroundZero_hasCorrectSummary() {
+ public void testInitHeader_backgroundLessThanAMinForegroundZero_hasCorrectSummary() {
final long backgroundTimeLessThanAMinute = 59999;
final long foregroundTimeZero = 0;
Bundle bundle = new Bundle(2);
@@ -319,7 +320,7 @@ public class AdvancedPowerUsageDetailTest {
}
@Test
- public void testInitHeader_totalUsageLessThanAMinutes_hasCorrectSummary() {
+ public void testInitHeader_totalUsageLessThanAMin_hasCorrectSummary() {
final long backgroundTimeLessThanHalfMinute = 20000;
final long foregroundTimeLessThanHalfMinute = 20000;
Bundle bundle = new Bundle(2);
@@ -338,7 +339,7 @@ public class AdvancedPowerUsageDetailTest {
}
@Test
- public void testInitHeader_TotalAMinutesBackgroundLessThanAMinutes_hasCorrectSummary() {
+ public void testInitHeader_TotalAMinutesBackgroundLessThanAMin_hasCorrectSummary() {
final long backgroundTimeZero = 59999;
final long foregroundTimeTwoMinutes = 1;
Bundle bundle = new Bundle(2);
@@ -355,7 +356,7 @@ public class AdvancedPowerUsageDetailTest {
}
@Test
- public void testInitHeader_TotalAMinutesBackgroundZero_hasCorrectSummary() {
+ public void testInitHeader_TotalAMinBackgroundZero_hasCorrectSummary() {
final long backgroundTimeZero = 0;
final long foregroundTimeAMinutes = 60000;
Bundle bundle = new Bundle(2);
@@ -372,7 +373,7 @@ public class AdvancedPowerUsageDetailTest {
}
@Test
- public void testInitHeader_foregroundTwoMinutesBackgroundFourMinutes_hasCorrectSummary() {
+ public void testInitHeader_foregroundTwoMinBackgroundFourMin_hasCorrectSummary() {
final long backgroundTimeFourMinute = 240000;
final long foregroundTimeTwoMinutes = 120000;
Bundle bundle = new Bundle(2);
@@ -387,6 +388,79 @@ public class AdvancedPowerUsageDetailTest {
.isEqualTo("6 min total • 4 min background for past 24 hr");
}
+ @Test
+ public void testInitHeader_totalUsageLessThanAMinWithSlotTime_hasCorrectSummary() {
+ final long backgroundTimeLessThanHalfMinute = 20000;
+ final long foregroundTimeLessThanHalfMinute = 20000;
+ Bundle bundle = new Bundle(2);
+ bundle.putLong(
+ AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME, backgroundTimeLessThanHalfMinute);
+ bundle.putLong(
+ AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME, foregroundTimeLessThanHalfMinute);
+ bundle.putString(AdvancedPowerUsageDetail.EXTRA_SLOT_TIME, SLOT_TIME);
+ when(mFragment.getArguments()).thenReturn(bundle);
+
+ mFragment.initHeader();
+
+ ArgumentCaptor captor = ArgumentCaptor.forClass(CharSequence.class);
+ verify(mEntityHeaderController).setSummary(captor.capture());
+ assertThat(captor.getValue().toString())
+ .isEqualTo("Total less than a minute for 12 am-2 am");
+ }
+
+ @Test
+ public void testInitHeader_TotalAMinBackgroundLessThanAMinWithSlotTime_hasCorrectSummary() {
+ final long backgroundTimeZero = 59999;
+ final long foregroundTimeTwoMinutes = 1;
+ Bundle bundle = new Bundle(2);
+ bundle.putLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME, backgroundTimeZero);
+ bundle.putLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME, foregroundTimeTwoMinutes);
+ bundle.putString(AdvancedPowerUsageDetail.EXTRA_SLOT_TIME, SLOT_TIME);
+ when(mFragment.getArguments()).thenReturn(bundle);
+
+ mFragment.initHeader();
+
+ ArgumentCaptor captor = ArgumentCaptor.forClass(CharSequence.class);
+ verify(mEntityHeaderController).setSummary(captor.capture());
+ assertThat(captor.getValue().toString())
+ .isEqualTo("1 min total • background less than a minute for 12 am-2 am");
+ }
+
+ @Test
+ public void testInitHeader_TotalAMinBackgroundZeroWithSlotTime_hasCorrectSummary() {
+ final long backgroundTimeZero = 0;
+ final long foregroundTimeAMinutes = 60000;
+ Bundle bundle = new Bundle(2);
+ bundle.putLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME, backgroundTimeZero);
+ bundle.putLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME, foregroundTimeAMinutes);
+ bundle.putString(AdvancedPowerUsageDetail.EXTRA_SLOT_TIME, SLOT_TIME);
+ when(mFragment.getArguments()).thenReturn(bundle);
+
+ mFragment.initHeader();
+
+ ArgumentCaptor captor = ArgumentCaptor.forClass(CharSequence.class);
+ verify(mEntityHeaderController).setSummary(captor.capture());
+ assertThat(captor.getValue().toString())
+ .isEqualTo("1 min total for 12 am-2 am");
+ }
+
+ @Test
+ public void testInitHeader_foregroundTwoMinBackgroundFourMinWithSlotTime_hasCorrectSummary() {
+ final long backgroundTimeFourMinute = 240000;
+ final long foregroundTimeTwoMinutes = 120000;
+ Bundle bundle = new Bundle(2);
+ bundle.putLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME, backgroundTimeFourMinute);
+ bundle.putLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME, foregroundTimeTwoMinutes);
+ bundle.putString(AdvancedPowerUsageDetail.EXTRA_SLOT_TIME, SLOT_TIME);
+ when(mFragment.getArguments()).thenReturn(bundle);
+ mFragment.initHeader();
+
+ ArgumentCaptor captor = ArgumentCaptor.forClass(CharSequence.class);
+ verify(mEntityHeaderController).setSummary(captor.capture());
+ assertThat(captor.getValue().toString())
+ .isEqualTo("6 min total • 4 min background for 12 am-2 am");
+ }
+
@Test
public void testStartBatteryDetailPage_hasBasicData() {
AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mFragment,