Snap for 4653471 from 349c9b2691 to pi-release
Change-Id: If0cb8e7888662d909fa7e37a439e2d4808a84d66
This commit is contained in:
@@ -87,6 +87,7 @@
|
||||
<uses-permission android:name="android.permission.DELETE_PACKAGES"/>
|
||||
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
|
||||
<uses-permission android:name="android.permission.MANAGE_APP_OPS_RESTRICTIONS"/>
|
||||
<uses-permission android:name="android.permission.MANAGE_APP_OPS_MODES" />
|
||||
<uses-permission android:name="android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS"/>
|
||||
<uses-permission android:name="android.permission.READ_PRINT_SERVICES" />
|
||||
<uses-permission android:name="android.permission.NETWORK_SETTINGS" />
|
||||
@@ -746,7 +747,7 @@
|
||||
android:taskAffinity="com.android.settings"
|
||||
android:parentActivityName="Settings">
|
||||
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
|
||||
android:value="com.android.settings.notification.ZenModeBlockedEffectsSetting" />
|
||||
android:value="com.android.settings.notification.ZenModeBlockedEffectsSettings" />
|
||||
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
|
||||
android:value="true" />
|
||||
</activity>
|
||||
|
||||
@@ -106,7 +106,8 @@
|
||||
android:id="@+id/data_limits"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="5dp" />
|
||||
android:paddingBottom="5dp"
|
||||
android:textColor="?android:attr/textColorSecondary" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
@@ -48,11 +48,16 @@
|
||||
<Space
|
||||
android:layout_width="16dp"
|
||||
android:layout_height="wrap_content" />
|
||||
<Button
|
||||
android:id="@+id/clear_data"
|
||||
<FrameLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="4dp"
|
||||
android:text="@string/clear_instant_app_data"/>
|
||||
android:layout_height="wrap_content">
|
||||
<Button
|
||||
android:id="@+id/clear_data"
|
||||
style="@style/ActionSecondaryButton"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="4dp"
|
||||
android:text="@string/clear_instant_app_data"/>
|
||||
</FrameLayout>
|
||||
</LinearLayout>
|
||||
|
||||
@@ -4892,6 +4892,11 @@
|
||||
<!-- CANCEL button for dialog to remove restriction for app [CHAR LIMIT=NONE] -->
|
||||
<string name="battery_tip_unrestrict_app_dialog_cancel">Not now</string>
|
||||
|
||||
<!-- Message for battery tip dialog to show the battery summary -->
|
||||
<string name="battery_tip_dialog_summary_message">Based on your usage, your battery usually lasts about <xliff:g id="time_duration">%1$s</xliff:g> when fully charged.\n\nIf you need to extend your battery life, turn on Battery Saver.</string>
|
||||
<!-- Message for battery tip dialog to show the battery summary -->
|
||||
<string name="battery_tip_dialog_summary_message_no_estimation">If you need to extend your battery life, turn on Battery Saver</string>
|
||||
|
||||
<!-- Title for the smart battery manager preference [CHAR LIMIT=NONE] -->
|
||||
<string name="smart_battery_manager_title">Smart battery manager</string>
|
||||
<!-- Title for the smart battery toggle [CHAR LIMIT=NONE] -->
|
||||
@@ -6999,6 +7004,11 @@
|
||||
<!-- Do not disturb: what to block summary, all effects -->
|
||||
<string name="zen_mode_block_effect_summary_all">Sound, vibration, and visual signs of notifications</string>
|
||||
|
||||
<!-- Do not disturb: Zen mode no sounds are exceptions to bypass do not disturb-->
|
||||
<string name="zen_mode_no_exceptions">None</string>
|
||||
<!-- Do not disturb: Zen mode catch all "other" sounds can bypass do not disturb -->
|
||||
<string name="zen_mode_other_options">other options</string>
|
||||
|
||||
<!-- Do not disturb: Button to add new automatic rule to DND. [CHAR LIMIT=30] -->
|
||||
<string name="zen_mode_add">Add</string>
|
||||
|
||||
@@ -7592,8 +7602,8 @@
|
||||
<!-- [CHAR LIMIT=50] Zen mode settings: Media option -->
|
||||
<string name="zen_mode_media">Media</string>
|
||||
|
||||
<!-- [CHAR LIMIT=50] Zen mode settings: System option which includes sounds such as touch and charging sounds -->
|
||||
<string name="zen_mode_system">Touch and charging sounds</string>
|
||||
<!-- [CHAR LIMIT=50] Zen mode settings: System option which includes sounds such as touch sounds -->
|
||||
<string name="zen_mode_system">Touch sounds</string>
|
||||
|
||||
<!-- [CHAR LIMIT=50] Zen mode settings: Reminders option -->
|
||||
<string name="zen_mode_reminders">Reminders</string>
|
||||
@@ -8674,10 +8684,10 @@
|
||||
<!-- Format for a summary describing the amount of data before the user is warned or limited [CHAR LIMIT=NONE] -->
|
||||
<string name="cell_warning_and_limit"><xliff:g name="amount" example="1 GB">%1$s</xliff:g> Data warning / <xliff:g name="amount" example="2 GB">%2$s</xliff:g> Data limit</string>
|
||||
|
||||
<!-- Title of button and screen for billing cycle preferences [CHAR LIMIT=30] -->
|
||||
<!-- Title of button and screen for billing cycle preferences [CHAR LIMIT=40] -->
|
||||
<string name="billing_cycle">Data warning & limit</string>
|
||||
|
||||
<!-- Title of button for application usage cycle preferences [CHAR LIMIT=30] -->
|
||||
<!-- Title of button for application usage cycle preferences [CHAR LIMIT=40] -->
|
||||
<string name="app_usage_cycle">App data usage cycle</string>
|
||||
|
||||
<!-- Summary describing when the billing cycle for their phone carrier starts [CHAR LIMIT=NONE] -->
|
||||
@@ -8704,6 +8714,9 @@
|
||||
<!-- Label for button to set the amount of data before user is warned about usage [CHAR LIMIT=30] -->
|
||||
<string name="data_warning">Data warning</string>
|
||||
|
||||
<!-- Label for footnote on Data warning and limit page to warn of device discrepancies -->
|
||||
<string name="data_warning_footnote">Data warning and data limit are measured by your device. This may be different from carrier data.</string>
|
||||
|
||||
<!-- Label for switch about whether to limit how much data can be used [CHAR LIMIT=30] -->
|
||||
<string name="set_data_limit">Set data limit</string>
|
||||
|
||||
|
||||
@@ -20,41 +20,41 @@
|
||||
android:title="@string/sound_settings"
|
||||
android:key="sound_settings"
|
||||
settings:keywords="@string/keywords_sounds"
|
||||
settings:initialExpandedChildrenCount="6">
|
||||
settings:initialExpandedChildrenCount="7">
|
||||
|
||||
<!-- Media volume -->
|
||||
<com.android.settings.notification.VolumeSeekBarPreference
|
||||
android:key="media_volume"
|
||||
android:icon="@*android:drawable/ic_audio_media"
|
||||
android:title="@string/media_volume_option_title"
|
||||
android:order="-106"/>
|
||||
android:order="-170"/>
|
||||
|
||||
<!-- Alarm volume -->
|
||||
<com.android.settings.notification.VolumeSeekBarPreference
|
||||
android:key="alarm_volume"
|
||||
android:icon="@*android:drawable/ic_audio_alarm"
|
||||
android:title="@string/alarm_volume_option_title"
|
||||
android:order="-105"/>
|
||||
android:order="-160"/>
|
||||
|
||||
<!-- Ring volume -->
|
||||
<com.android.settings.notification.VolumeSeekBarPreference
|
||||
android:key="ring_volume"
|
||||
android:icon="@*android:drawable/ic_audio_ring_notif"
|
||||
android:title="@string/ring_volume_option_title"
|
||||
android:order="-104"/>
|
||||
android:order="-150"/>
|
||||
|
||||
<!-- Notification volume -->
|
||||
<com.android.settings.notification.VolumeSeekBarPreference
|
||||
android:key="notification_volume"
|
||||
android:icon="@*android:drawable/ic_audio_ring_notif"
|
||||
android:title="@string/notification_volume_option_title"
|
||||
android:order="-103"/>
|
||||
android:order="-140"/>
|
||||
|
||||
<!-- Also vibrate for calls -->
|
||||
<SwitchPreference
|
||||
android:key="vibrate_when_ringing"
|
||||
android:title="@string/vibrate_when_ringing_title"
|
||||
android:order="-102"/>
|
||||
android:order="-130"/>
|
||||
|
||||
<!-- Interruptions -->
|
||||
<com.android.settingslib.RestrictedPreference
|
||||
@@ -64,7 +64,7 @@
|
||||
settings:keywords="@string/keywords_sounds_and_notifications_interruptions"
|
||||
android:fragment="com.android.settings.notification.ZenModeSettings"
|
||||
settings:allowDividerAbove="true"
|
||||
android:order="-101"/>
|
||||
android:order="-120"/>
|
||||
|
||||
<!-- Phone ringtone -->
|
||||
<com.android.settings.DefaultRingtonePreference
|
||||
@@ -83,7 +83,7 @@
|
||||
android:dialogTitle="@string/notification_ringtone_title"
|
||||
android:summary="@string/summary_placeholder"
|
||||
android:ringtoneType="notification"
|
||||
android:order="-99"/>
|
||||
android:order="-90"/>
|
||||
|
||||
<!-- Default alarm ringtone -->
|
||||
<com.android.settings.DefaultRingtonePreference
|
||||
@@ -93,7 +93,7 @@
|
||||
android:summary="@string/summary_placeholder"
|
||||
android:persistent="false"
|
||||
android:ringtoneType="alarm"
|
||||
android:order="-98"/>
|
||||
android:order="-80"/>
|
||||
|
||||
<!-- Other sounds -->
|
||||
<PreferenceCategory
|
||||
|
||||
@@ -91,6 +91,8 @@ public class BillingCycleSettings extends DataUsageBase implements
|
||||
mEnableDataLimit = (SwitchPreference) findPreference(KEY_SET_DATA_LIMIT);
|
||||
mEnableDataLimit.setOnPreferenceChangeListener(this);
|
||||
mDataLimit = findPreference(KEY_DATA_LIMIT);
|
||||
|
||||
mFooterPreferenceMixin.createFooterPreference().setTitle(R.string.data_warning_footnote);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -32,11 +32,13 @@ import com.android.settings.SettingsActivity;
|
||||
import com.android.settings.Utils;
|
||||
import com.android.settings.core.InstrumentedPreferenceFragment;
|
||||
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
|
||||
import com.android.settings.fuelgauge.Estimate;
|
||||
import com.android.settings.fuelgauge.batterytip.BatteryTipPreferenceController.BatteryTipListener;
|
||||
import com.android.settings.fuelgauge.batterytip.actions.BatteryTipAction;
|
||||
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
|
||||
import com.android.settings.fuelgauge.batterytip.tips.HighUsageTip;
|
||||
import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip;
|
||||
import com.android.settings.fuelgauge.batterytip.tips.SummaryTip;
|
||||
import com.android.settings.fuelgauge.batterytip.tips.UnrestrictAppTip;
|
||||
import com.android.settingslib.utils.StringUtil;
|
||||
|
||||
@@ -72,9 +74,18 @@ public class BatteryTipDialogFragment extends InstrumentedDialogFragment impleme
|
||||
|
||||
switch (mBatteryTip.getType()) {
|
||||
case BatteryTip.TipType.SUMMARY:
|
||||
case BatteryTip.TipType.LOW_BATTERY:
|
||||
//TODO(b/70570352): add dialog
|
||||
return null;
|
||||
final long averageTimeMs = ((SummaryTip) mBatteryTip).getAverageTimeMs();
|
||||
final String message = context.getString(
|
||||
averageTimeMs == Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN
|
||||
? R.string.battery_tip_dialog_summary_message_no_estimation
|
||||
: R.string.battery_tip_dialog_summary_message,
|
||||
StringUtil.formatElapsedTime(context, averageTimeMs,
|
||||
false /* withSeconds */));
|
||||
|
||||
return new AlertDialog.Builder(context)
|
||||
.setMessage(message)
|
||||
.setPositiveButton(android.R.string.ok, null)
|
||||
.create();
|
||||
case BatteryTip.TipType.HIGH_DEVICE_USAGE:
|
||||
final HighUsageTip highUsageTip = (HighUsageTip) mBatteryTip;
|
||||
final RecyclerView view = (RecyclerView) LayoutInflater.from(context).inflate(
|
||||
|
||||
@@ -22,6 +22,7 @@ import android.support.annotation.VisibleForTesting;
|
||||
import com.android.internal.os.BatteryStatsHelper;
|
||||
import com.android.settings.fuelgauge.BatteryInfo;
|
||||
import com.android.settings.fuelgauge.BatteryUtils;
|
||||
import com.android.settings.fuelgauge.Estimate;
|
||||
import com.android.settings.fuelgauge.batterytip.detectors.EarlyWarningDetector;
|
||||
import com.android.settings.fuelgauge.batterytip.detectors.HighUsageDetector;
|
||||
import com.android.settings.fuelgauge.batterytip.detectors.LowBatteryDetector;
|
||||
@@ -70,7 +71,7 @@ public class BatteryTipLoader extends AsyncLoader<List<BatteryTip>> {
|
||||
tips.add(new HighUsageDetector(context, policy, mBatteryStatsHelper).detect());
|
||||
tips.add(new SmartBatteryDetector(policy, context.getContentResolver()).detect());
|
||||
tips.add(new EarlyWarningDetector(policy, context).detect());
|
||||
tips.add(new SummaryDetector(policy).detect());
|
||||
tips.add(new SummaryDetector(policy, batteryInfo.averageTimeToDischarge).detect());
|
||||
tips.add(new RestrictAppDetector(context, policy).detect());
|
||||
|
||||
Collections.sort(tips);
|
||||
@@ -83,7 +84,8 @@ public class BatteryTipLoader extends AsyncLoader<List<BatteryTip>> {
|
||||
|
||||
private List<BatteryTip> getFakeData() {
|
||||
final List<BatteryTip> tips = new ArrayList<>();
|
||||
tips.add(new SummaryTip(BatteryTip.StateType.NEW));
|
||||
tips.add(new SummaryTip(BatteryTip.StateType.NEW,
|
||||
Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN));
|
||||
tips.add(new LowBatteryTip(BatteryTip.StateType.NEW));
|
||||
|
||||
return tips;
|
||||
|
||||
@@ -27,6 +27,7 @@ import com.android.internal.logging.nano.MetricsProto;
|
||||
import com.android.settings.SettingsActivity;
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
import com.android.settings.core.InstrumentedPreferenceFragment;
|
||||
import com.android.settings.fuelgauge.Estimate;
|
||||
import com.android.settings.fuelgauge.batterytip.actions.BatteryTipAction;
|
||||
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
|
||||
import com.android.settings.fuelgauge.batterytip.tips.SummaryTip;
|
||||
@@ -82,7 +83,8 @@ public class BatteryTipPreferenceController extends BasePreferenceController {
|
||||
mPreferenceGroup = (PreferenceGroup) screen.findPreference(getPreferenceKey());
|
||||
|
||||
// Add summary tip in advance to avoid UI flakiness
|
||||
final SummaryTip summaryTip = new SummaryTip(BatteryTip.StateType.NEW);
|
||||
final SummaryTip summaryTip = new SummaryTip(BatteryTip.StateType.NEW,
|
||||
Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN);
|
||||
mPreferenceGroup.addPreference(summaryTip.buildPreference(mPrefContext));
|
||||
}
|
||||
|
||||
|
||||
@@ -26,9 +26,11 @@ import com.android.settings.fuelgauge.batterytip.tips.SummaryTip;
|
||||
*/
|
||||
public class SummaryDetector implements BatteryTipDetector {
|
||||
private BatteryTipPolicy mPolicy;
|
||||
private long mAverageTimeMs;
|
||||
|
||||
public SummaryDetector(BatteryTipPolicy policy) {
|
||||
public SummaryDetector(BatteryTipPolicy policy, long averageTimeMs) {
|
||||
mPolicy = policy;
|
||||
mAverageTimeMs = averageTimeMs;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -37,6 +39,6 @@ public class SummaryDetector implements BatteryTipDetector {
|
||||
final int state = mPolicy.summaryEnabled
|
||||
? BatteryTip.StateType.NEW
|
||||
: BatteryTip.StateType.INVISIBLE;
|
||||
return new SummaryTip(state);
|
||||
return new SummaryTip(state, mAverageTimeMs);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ package com.android.settings.fuelgauge.batterytip.tips;
|
||||
import android.content.Context;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import android.support.annotation.VisibleForTesting;
|
||||
|
||||
import com.android.internal.logging.nano.MetricsProto;
|
||||
import com.android.settings.R;
|
||||
@@ -28,13 +29,17 @@ import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||
* Tip to show general summary about battery life
|
||||
*/
|
||||
public class SummaryTip extends BatteryTip {
|
||||
private long mAverageTimeMs;
|
||||
|
||||
public SummaryTip(@StateType int state) {
|
||||
super(TipType.SUMMARY, state, false /* showDialog */);
|
||||
public SummaryTip(@StateType int state, long averageTimeMs) {
|
||||
super(TipType.SUMMARY, state, true /* showDialog */);
|
||||
mAverageTimeMs = averageTimeMs;
|
||||
}
|
||||
|
||||
private SummaryTip(Parcel in) {
|
||||
@VisibleForTesting
|
||||
SummaryTip(Parcel in) {
|
||||
super(in);
|
||||
mAverageTimeMs = in.readLong();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -57,12 +62,22 @@ public class SummaryTip extends BatteryTip {
|
||||
mState = tip.mState;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
super.writeToParcel(dest, flags);
|
||||
dest.writeLong(mAverageTimeMs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void log(Context context, MetricsFeatureProvider metricsFeatureProvider) {
|
||||
metricsFeatureProvider.action(context, MetricsProto.MetricsEvent.ACTION_SUMMARY_TIP,
|
||||
mState);
|
||||
}
|
||||
|
||||
public long getAverageTimeMs() {
|
||||
return mAverageTimeMs;
|
||||
}
|
||||
|
||||
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
|
||||
public BatteryTip createFromParcel(Parcel in) {
|
||||
return new SummaryTip(in);
|
||||
|
||||
@@ -94,31 +94,29 @@ public class ZenModeSettings extends ZenModeSettingsBase {
|
||||
};
|
||||
|
||||
String getBehaviorSettingSummary(Policy policy, int zenMode) {
|
||||
List<String> enabledCategories;
|
||||
List<String> enabledCategories = getEnabledCategories(policy);
|
||||
|
||||
if (zenMode == Settings.Global.ZEN_MODE_NO_INTERRUPTIONS) {
|
||||
return mContext.getString(R.string.zen_mode_behavior_total_silence);
|
||||
} else if (zenMode == Settings.Global.ZEN_MODE_ALARMS) {
|
||||
return mContext.getString(R.string.zen_mode_behavior_alarms_only);
|
||||
} else {
|
||||
enabledCategories = getEnabledCategories(policy);
|
||||
}
|
||||
|
||||
// no sound categories can bypass dnd
|
||||
int numCategories = enabledCategories.size();
|
||||
if (numCategories == 0) {
|
||||
return mContext.getString(R.string.zen_mode_behavior_total_silence);
|
||||
return mContext.getString(R.string.zen_mode_no_exceptions);
|
||||
} else if (numCategories == 1) {
|
||||
return enabledCategories.get(0);
|
||||
} else if (numCategories == 2) {
|
||||
return mContext.getString(R.string.join_two_items, enabledCategories.get(0),
|
||||
enabledCategories.get(1).toLowerCase());
|
||||
} else if (numCategories == 3){
|
||||
String secondaryText = mContext.getString(R.string.join_two_unrelated_items,
|
||||
enabledCategories.get(0), enabledCategories.get(1).toLowerCase());
|
||||
return mContext.getString(R.string.join_two_items, secondaryText,
|
||||
enabledCategories.get(2).toLowerCase());
|
||||
} else {
|
||||
String secondaryText = mContext.getString(R.string.join_many_items_middle,
|
||||
enabledCategories.get(0), enabledCategories.get(1).toLowerCase());
|
||||
secondaryText = mContext.getString(R.string.join_many_items_middle, secondaryText,
|
||||
enabledCategories.get(2).toLowerCase());
|
||||
return mContext.getString(R.string.join_many_items_last, secondaryText,
|
||||
mContext.getString(R.string.zen_mode_other_options));
|
||||
}
|
||||
|
||||
// only alarms and media can bypass dnd
|
||||
if (numCategories == 2 &&
|
||||
isCategoryEnabled(policy, Policy.PRIORITY_CATEGORY_ALARMS) &&
|
||||
isCategoryEnabled(policy, Policy.PRIORITY_CATEGORY_MEDIA)) {
|
||||
return mContext.getString(R.string.zen_mode_behavior_alarms_only);
|
||||
}
|
||||
|
||||
// custom
|
||||
return mContext.getString(R.string.zen_mode_behavior_summary_custom);
|
||||
}
|
||||
|
||||
String getSoundSummary() {
|
||||
|
||||
@@ -38,7 +38,7 @@ public class WifiTetherAutoOffPreferenceController extends BasePreferenceControl
|
||||
@Override
|
||||
public void updateState(Preference preference) {
|
||||
final boolean settingsOn = Settings.Global.getInt(mContext.getContentResolver(),
|
||||
Settings.Global.SOFT_AP_TIMEOUT_ENABLED, 0) != 0;
|
||||
Settings.Global.SOFT_AP_TIMEOUT_ENABLED, 1) != 0;
|
||||
|
||||
((SwitchPreference) preference).setChecked(settingsOn);
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.android.settings.fuelgauge.batterytip;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.robolectric.Shadows.shadowOf;
|
||||
|
||||
@@ -26,9 +27,11 @@ import android.content.Context;
|
||||
import android.text.format.DateUtils;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.fuelgauge.Estimate;
|
||||
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
|
||||
import com.android.settings.fuelgauge.batterytip.tips.HighUsageTip;
|
||||
import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip;
|
||||
import com.android.settings.fuelgauge.batterytip.tips.SummaryTip;
|
||||
import com.android.settings.fuelgauge.batterytip.tips.UnrestrictAppTip;
|
||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||
import com.android.settings.testutils.shadow.ShadowUtils;
|
||||
@@ -54,6 +57,7 @@ public class BatteryTipDialogFragmentTest {
|
||||
private static final String PACKAGE_NAME = "com.android.app";
|
||||
private static final String DISPLAY_NAME = "app";
|
||||
private static final long SCREEN_TIME_MS = DateUtils.HOUR_IN_MILLIS;
|
||||
private static final long AVERAGE_TIME_MS = DateUtils.HOUR_IN_MILLIS;
|
||||
|
||||
private BatteryTipDialogFragment mDialogFragment;
|
||||
private Context mContext;
|
||||
@@ -61,6 +65,7 @@ public class BatteryTipDialogFragmentTest {
|
||||
private RestrictAppTip mRestrictedOneAppTip;
|
||||
private RestrictAppTip mRestrictAppsTip;
|
||||
private UnrestrictAppTip mUnrestrictAppTip;
|
||||
private SummaryTip mSummaryTip;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -85,6 +90,8 @@ public class BatteryTipDialogFragmentTest {
|
||||
new ArrayList<>(restrictApps));
|
||||
|
||||
mUnrestrictAppTip = new UnrestrictAppTip(BatteryTip.StateType.NEW, appInfo);
|
||||
mSummaryTip = spy(new SummaryTip(BatteryTip.StateType.NEW,
|
||||
Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -151,4 +158,32 @@ public class BatteryTipDialogFragmentTest {
|
||||
assertThat(shadowDialog.getMessage())
|
||||
.isEqualTo(mContext.getString(R.string.battery_tip_unrestrict_app_dialog_message));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnCreateDialog_summaryTipWithEstimation_fireDialogWithEstimation() {
|
||||
doReturn(AVERAGE_TIME_MS).when(mSummaryTip).getAverageTimeMs();
|
||||
mDialogFragment = BatteryTipDialogFragment.newInstance(mSummaryTip);
|
||||
|
||||
FragmentTestUtil.startFragment(mDialogFragment);
|
||||
|
||||
final AlertDialog dialog = (AlertDialog) ShadowDialog.getLatestDialog();
|
||||
ShadowAlertDialog shadowDialog = shadowOf(dialog);
|
||||
|
||||
assertThat(shadowDialog.getMessage()).isEqualTo(
|
||||
"Based on your usage, your battery usually lasts about 1h when fully charged"
|
||||
+ ".\n\nIf you need to extend your battery life, turn on Battery Saver.");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnCreateDialog_summaryTipWithoutEstimation_fireDialogWithoutEstimation() {
|
||||
mDialogFragment = BatteryTipDialogFragment.newInstance(mSummaryTip);
|
||||
|
||||
FragmentTestUtil.startFragment(mDialogFragment);
|
||||
|
||||
final AlertDialog dialog = (AlertDialog) ShadowDialog.getLatestDialog();
|
||||
ShadowAlertDialog shadowDialog = shadowOf(dialog);
|
||||
|
||||
assertThat(shadowDialog.getMessage()).isEqualTo(
|
||||
"If you need to extend your battery life, turn on Battery Saver");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,8 +15,11 @@
|
||||
*/
|
||||
package com.android.settings.fuelgauge.batterytip;
|
||||
|
||||
import static com.android.settings.fuelgauge.batterytip.tips.BatteryTip.TipType.SMART_BATTERY_MANAGER;
|
||||
import static com.android.settings.fuelgauge.batterytip.tips.BatteryTip.TipType
|
||||
.SMART_BATTERY_MANAGER;
|
||||
|
||||
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;
|
||||
@@ -30,6 +33,7 @@ import android.support.v7.preference.PreferenceCategory;
|
||||
import android.support.v7.preference.PreferenceGroup;
|
||||
import android.support.v7.preference.PreferenceManager;
|
||||
import android.support.v7.preference.PreferenceScreen;
|
||||
import android.text.format.DateUtils;
|
||||
|
||||
import com.android.internal.logging.nano.MetricsProto;
|
||||
import com.android.settings.SettingsActivity;
|
||||
@@ -54,6 +58,8 @@ public class BatteryTipPreferenceControllerTest {
|
||||
|
||||
private static final String KEY_PREF = "battery_tip";
|
||||
private static final String KEY_TIP = "key_battery_tip";
|
||||
private static final long AVERAGE_TIME_MS = DateUtils.HOUR_IN_MILLIS;
|
||||
|
||||
@Mock
|
||||
private BatteryTipPreferenceController.BatteryTipListener mBatteryTipListener;
|
||||
@Mock
|
||||
@@ -87,9 +93,9 @@ public class BatteryTipPreferenceControllerTest {
|
||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||
|
||||
mOldBatteryTips = new ArrayList<>();
|
||||
mOldBatteryTips.add(new SummaryTip(BatteryTip.StateType.NEW));
|
||||
mOldBatteryTips.add(new SummaryTip(BatteryTip.StateType.NEW, AVERAGE_TIME_MS));
|
||||
mNewBatteryTips = new ArrayList<>();
|
||||
mNewBatteryTips.add(new SummaryTip(BatteryTip.StateType.INVISIBLE));
|
||||
mNewBatteryTips.add(new SummaryTip(BatteryTip.StateType.INVISIBLE, AVERAGE_TIME_MS));
|
||||
|
||||
mBatteryTipPreferenceController = new BatteryTipPreferenceController(mContext, KEY_PREF,
|
||||
mSettingsActivity, null, mBatteryTipListener);
|
||||
|
||||
@@ -19,6 +19,8 @@ package com.android.settings.fuelgauge.batterytip.detectors;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static org.mockito.Mockito.spy;
|
||||
|
||||
import android.text.format.DateUtils;
|
||||
|
||||
import com.android.settings.fuelgauge.batterytip.BatteryTipPolicy;
|
||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||
|
||||
@@ -33,6 +35,7 @@ import org.robolectric.util.ReflectionHelpers;
|
||||
public class SummaryDetectorTest {
|
||||
|
||||
private BatteryTipPolicy mPolicy;
|
||||
private static final long AVERAGE_TIME_MS = DateUtils.HOUR_IN_MILLIS;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -44,14 +47,14 @@ public class SummaryDetectorTest {
|
||||
@Test
|
||||
public void testDetect_disabledByPolicy_tipInvisible() {
|
||||
ReflectionHelpers.setField(mPolicy, "summaryEnabled", false);
|
||||
SummaryDetector detector = new SummaryDetector(mPolicy);
|
||||
SummaryDetector detector = new SummaryDetector(mPolicy, AVERAGE_TIME_MS);
|
||||
|
||||
assertThat(detector.detect().isVisible()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDetect_notDisabled_tipVisible() {
|
||||
SummaryDetector detector = new SummaryDetector(mPolicy);
|
||||
SummaryDetector detector = new SummaryDetector(mPolicy, AVERAGE_TIME_MS);
|
||||
|
||||
assertThat(detector.detect().isVisible()).isTrue();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* Copyright (C) 2018 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.android.settings.fuelgauge.batterytip.tips;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Parcel;
|
||||
import android.text.format.DateUtils;
|
||||
|
||||
import com.android.internal.logging.nano.MetricsProto;
|
||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
|
||||
@RunWith(SettingsRobolectricTestRunner.class)
|
||||
public class SummaryTipTest {
|
||||
|
||||
private static final long AVERAGE_TIME_MS = DateUtils.HOUR_IN_MILLIS;
|
||||
|
||||
@Mock
|
||||
private MetricsFeatureProvider mMetricsFeatureProvider;
|
||||
private Context mContext;
|
||||
private SummaryTip mSummaryTip;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
mContext = RuntimeEnvironment.application;
|
||||
mSummaryTip =
|
||||
new SummaryTip(BatteryTip.StateType.NEW, AVERAGE_TIME_MS);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testParcelable() {
|
||||
Parcel parcel = Parcel.obtain();
|
||||
mSummaryTip.writeToParcel(parcel, mSummaryTip.describeContents());
|
||||
parcel.setDataPosition(0);
|
||||
|
||||
final SummaryTip parcelTip = new SummaryTip(parcel);
|
||||
|
||||
assertThat(parcelTip.getAverageTimeMs()).isEqualTo(AVERAGE_TIME_MS);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLog() {
|
||||
mSummaryTip.log(mContext, mMetricsFeatureProvider);
|
||||
|
||||
verify(mMetricsFeatureProvider).action(mContext,
|
||||
MetricsProto.MetricsEvent.ACTION_SUMMARY_TIP, BatteryTip.StateType.NEW);
|
||||
}
|
||||
}
|
||||
@@ -47,27 +47,12 @@ public class ZenModeSettingsTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetBehaviorSettingSummary_customBehavior() {
|
||||
NotificationManager.Policy policy = new NotificationManager.Policy(
|
||||
NotificationManager.Policy.PRIORITY_CATEGORY_EVENTS
|
||||
| NotificationManager.Policy.PRIORITY_CATEGORY_REMINDERS
|
||||
| NotificationManager.Policy.PRIORITY_CATEGORY_ALARMS
|
||||
| NotificationManager.Policy.PRIORITY_CATEGORY_MEDIA,
|
||||
0, 0);
|
||||
final String result = mBuilder.getBehaviorSettingSummary(policy,
|
||||
Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS);
|
||||
|
||||
String custom = mContext.getString(R.string.zen_mode_behavior_summary_custom);
|
||||
assertEquals(custom, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetBehaviorSettingSummary_totalSilence() {
|
||||
public void testGetBehaviorSettingSummary_noSoundsCanBypass() {
|
||||
NotificationManager.Policy policy = new NotificationManager.Policy(0, 0, 0);
|
||||
final String result = mBuilder.getBehaviorSettingSummary(policy,
|
||||
Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS);
|
||||
|
||||
String totalSilence = mContext.getString(R.string.zen_mode_behavior_total_silence);
|
||||
String totalSilence = mContext.getString(R.string.zen_mode_no_exceptions);
|
||||
assertEquals(totalSilence, result);
|
||||
}
|
||||
|
||||
@@ -80,7 +65,9 @@ public class ZenModeSettingsTest {
|
||||
final String result = mBuilder.getBehaviorSettingSummary(policy,
|
||||
Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS);
|
||||
|
||||
String alarmsAndMedia = mContext.getString(R.string.zen_mode_behavior_alarms_only);
|
||||
String alarmsAndMedia = mContext.getString(R.string.join_two_items,
|
||||
mContext.getString(R.string.zen_mode_alarms),
|
||||
mContext.getString(R.string.zen_mode_media).toLowerCase());
|
||||
assertEquals(alarmsAndMedia, result);
|
||||
}
|
||||
|
||||
|
||||
@@ -81,6 +81,13 @@ public class WifiTetherAutoOffPreferenceControllerTest {
|
||||
assertThat(mSwitchPreference.isChecked()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateState_toggleDefaultOn() {
|
||||
mController.updateState(mSwitchPreference);
|
||||
|
||||
assertThat(mSwitchPreference.isChecked()).isTrue();
|
||||
}
|
||||
|
||||
private int getAutoOffSetting() {
|
||||
return Settings.Global.getInt(mContext.getContentResolver(),
|
||||
Settings.Global.SOFT_AP_TIMEOUT_ENABLED, OFF);
|
||||
|
||||
Reference in New Issue
Block a user