Merge "Update copy for battery estimate related features"
This commit is contained in:
committed by
Android (Google) Code Review
commit
87ed226f37
@@ -1,3 +1,19 @@
|
||||
/*
|
||||
* 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;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
@@ -25,9 +41,7 @@ import android.os.UserManager;
|
||||
import android.os.storage.DiskInfo;
|
||||
import android.os.storage.StorageManager;
|
||||
import android.os.storage.VolumeInfo;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.format.DateUtils;
|
||||
import android.text.style.TtsSpan;
|
||||
import android.util.IconDrawableFactory;
|
||||
import android.widget.EditText;
|
||||
import android.widget.TextView;
|
||||
@@ -35,6 +49,7 @@ import android.widget.TextView;
|
||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
|
||||
|
||||
import com.android.settingslib.utils.StringUtil;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
@@ -109,175 +124,6 @@ public class UtilsTest {
|
||||
assertThat(Utils.getWifiIpAddresses(mContext)).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFormatElapsedTime_WithSeconds_ShowSeconds() {
|
||||
final double testMillis = 5 * DateUtils.MINUTE_IN_MILLIS + 30 * DateUtils.SECOND_IN_MILLIS;
|
||||
final String expectedTime = "5m 30s";
|
||||
|
||||
assertThat(Utils.formatElapsedTime(mContext, testMillis, true).toString()).isEqualTo(
|
||||
expectedTime);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFormatElapsedTime_NoSeconds_DoNotShowSeconds() {
|
||||
final double testMillis = 5 * DateUtils.MINUTE_IN_MILLIS + 30 * DateUtils.SECOND_IN_MILLIS;
|
||||
final String expectedTime = "6m";
|
||||
|
||||
assertThat(Utils.formatElapsedTime(mContext, testMillis, false).toString()).isEqualTo(
|
||||
expectedTime);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFormatElapsedTime_TimeMoreThanOneDay_ShowCorrectly() {
|
||||
final double testMillis = 2 * DateUtils.DAY_IN_MILLIS
|
||||
+ 4 * DateUtils.HOUR_IN_MILLIS + 15 * DateUtils.MINUTE_IN_MILLIS;
|
||||
final String expectedTime = "2d 4h 15m";
|
||||
|
||||
assertThat(Utils.formatElapsedTime(mContext, testMillis, false).toString()).isEqualTo(
|
||||
expectedTime);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFormatElapsedTime_ZeroFieldsInTheMiddleDontShow() {
|
||||
final double testMillis = 2 * DateUtils.DAY_IN_MILLIS + 15 * DateUtils.MINUTE_IN_MILLIS;
|
||||
final String expectedTime = "2d 15m";
|
||||
|
||||
assertThat(Utils.formatElapsedTime(mContext, testMillis, false).toString()).isEqualTo(
|
||||
expectedTime);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFormatElapsedTime_FormatZero_WithSeconds() {
|
||||
final double testMillis = 0;
|
||||
final String expectedTime = "0s";
|
||||
|
||||
assertThat(Utils.formatElapsedTime(mContext, testMillis, true).toString()).isEqualTo(
|
||||
expectedTime);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFormatElapsedTime_FormatZero_NoSeconds() {
|
||||
final double testMillis = 0;
|
||||
final String expectedTime = "0m";
|
||||
|
||||
assertThat(Utils.formatElapsedTime(mContext, testMillis, false).toString()).isEqualTo(
|
||||
expectedTime);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFormatElapsedTime_onlyContainsMinute_hasTtsSpan() {
|
||||
final double testMillis = 15 * DateUtils.MINUTE_IN_MILLIS;
|
||||
|
||||
final CharSequence charSequence = Utils.formatElapsedTime(mContext, testMillis, false);
|
||||
assertThat(charSequence).isInstanceOf(SpannableStringBuilder.class);
|
||||
|
||||
final SpannableStringBuilder expectedString = (SpannableStringBuilder) charSequence;
|
||||
final TtsSpan[] ttsSpans = expectedString.getSpans(0, expectedString.length(),
|
||||
TtsSpan.class);
|
||||
|
||||
assertThat(ttsSpans).asList().hasSize(1);
|
||||
assertThat(ttsSpans[0].getType()).isEqualTo(TtsSpan.TYPE_MEASURE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFormatRelativeTime_WithSeconds_ShowSeconds() {
|
||||
final double testMillis = 40 * DateUtils.SECOND_IN_MILLIS;
|
||||
final String expectedTime = "40 sec. ago";
|
||||
|
||||
assertThat(Utils.formatRelativeTime(mContext, testMillis, true).toString()).isEqualTo(
|
||||
expectedTime);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFormatRelativeTime_NoSeconds_DoNotShowSeconds() {
|
||||
final double testMillis = 40 * DateUtils.SECOND_IN_MILLIS;
|
||||
final String expectedTime = "1 min. ago";
|
||||
|
||||
assertThat(Utils.formatRelativeTime(mContext, testMillis, false).toString()).isEqualTo(
|
||||
expectedTime);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFormatRelativeTime_LessThanTwoMinutes_withSeconds() {
|
||||
final double testMillis = 119 * DateUtils.SECOND_IN_MILLIS;
|
||||
final String expectedTime = "119 sec. ago";
|
||||
|
||||
assertThat(Utils.formatRelativeTime(mContext, testMillis, true).toString()).isEqualTo(
|
||||
expectedTime);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFormatRelativeTime_LessThanTwoMinutes_NoSeconds() {
|
||||
final double testMillis = 119 * DateUtils.SECOND_IN_MILLIS;
|
||||
final String expectedTime = "2 min. ago";
|
||||
|
||||
assertThat(Utils.formatRelativeTime(mContext, testMillis, false).toString()).isEqualTo(
|
||||
expectedTime);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFormatRelativeTime_TwoMinutes_withSeconds() {
|
||||
final double testMillis = 2 * DateUtils.MINUTE_IN_MILLIS;
|
||||
final String expectedTime = "2 min. ago";
|
||||
|
||||
assertThat(Utils.formatRelativeTime(mContext, testMillis, true).toString()).isEqualTo(
|
||||
expectedTime);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFormatRelativeTime_LessThanTwoHours_withSeconds() {
|
||||
final double testMillis = 119 * DateUtils.MINUTE_IN_MILLIS;
|
||||
final String expectedTime = "119 min. ago";
|
||||
|
||||
assertThat(Utils.formatRelativeTime(mContext, testMillis, true).toString()).isEqualTo(
|
||||
expectedTime);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFormatRelativeTime_TwoHours_withSeconds() {
|
||||
final double testMillis = 2 * DateUtils.HOUR_IN_MILLIS;
|
||||
final String expectedTime = "2 hr. ago";
|
||||
|
||||
assertThat(Utils.formatRelativeTime(mContext, testMillis, true).toString()).isEqualTo(
|
||||
expectedTime);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFormatRelativeTime_LessThanTwoDays_withSeconds() {
|
||||
final double testMillis = 47 * DateUtils.HOUR_IN_MILLIS;
|
||||
final String expectedTime = "47 hr. ago";
|
||||
|
||||
assertThat(Utils.formatRelativeTime(mContext, testMillis, true).toString()).isEqualTo(
|
||||
expectedTime);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFormatRelativeTime_TwoDays_withSeconds() {
|
||||
final double testMillis = 2 * DateUtils.DAY_IN_MILLIS;
|
||||
final String expectedTime = "2 days ago";
|
||||
|
||||
assertThat(Utils.formatRelativeTime(mContext, testMillis, true).toString()).isEqualTo(
|
||||
expectedTime);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFormatRelativeTime_FormatZero_WithSeconds() {
|
||||
final double testMillis = 0;
|
||||
final String expectedTime = "0 sec. ago";
|
||||
|
||||
assertThat(Utils.formatRelativeTime(mContext, testMillis, true).toString()).isEqualTo(
|
||||
expectedTime);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFormatRelativeTime_FormatZero_NoSeconds() {
|
||||
final double testMillis = 0;
|
||||
final String expectedTime = "0 min. ago";
|
||||
|
||||
assertThat(Utils.formatRelativeTime(mContext, testMillis, false).toString()).isEqualTo(
|
||||
expectedTime);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInitializeVolumeDoesntBreakOnNullVolume() {
|
||||
VolumeInfo info = new VolumeInfo("id", 0, new DiskInfo("id", 0), "");
|
||||
|
@@ -43,6 +43,9 @@ import com.android.settings.testutils.BatteryTestUtils;
|
||||
import com.android.settings.testutils.FakeFeatureFactory;
|
||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||
|
||||
import com.android.settingslib.R;
|
||||
import com.android.settingslib.utils.PowerUtil;
|
||||
import java.time.Duration;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
@@ -72,6 +75,8 @@ public class BatteryInfoTest {
|
||||
public static final long TEST_CHARGE_TIME_REMAINING = TimeUnit.MINUTES.toMicros(1);
|
||||
public static final String TEST_CHARGE_TIME_REMAINING_STRINGIFIED =
|
||||
"1m left until fully charged";
|
||||
public static final String TEST_BATTERY_LEVEL_10 = "10%";
|
||||
public static final String FIFTEEN_MIN_FORMATTED = "15m";
|
||||
private Intent mDisChargingBatteryBroadcast;
|
||||
private Intent mChargingBatteryBroadcast;
|
||||
private Context mContext;
|
||||
@@ -134,13 +139,15 @@ public class BatteryInfoTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetBatteryInfo_basedOnUsageTrue_usesCorrectString() {
|
||||
public void testGetBatteryInfo_basedOnUsageTrueMoreThanFifteenMinutes_usesCorrectString() {
|
||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
|
||||
mBatteryStats, SystemClock.elapsedRealtime() * 1000, false /* shortString */,
|
||||
1000, true /* basedOnUsage */);
|
||||
PowerUtil.convertMsToUs(Duration.ofHours(4).toMillis()),
|
||||
true /* basedOnUsage */);
|
||||
BatteryInfo info2 = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
|
||||
mBatteryStats, SystemClock.elapsedRealtime() * 1000, true /* shortString */,
|
||||
1000, true /* basedOnUsage */);
|
||||
PowerUtil.convertMsToUs(Duration.ofHours(4).toMillis()),
|
||||
true /* basedOnUsage */);
|
||||
|
||||
// We only add special mention for the long string
|
||||
assertThat(info.remainingLabel.toString()).contains(ENHANCED_STRING_SUFFIX);
|
||||
@@ -148,6 +155,41 @@ public class BatteryInfoTest {
|
||||
assertThat(info2.remainingLabel.toString()).doesNotContain(ENHANCED_STRING_SUFFIX);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetBatteryInfo_basedOnUsageTrueLessThanSevenMinutes_usesCorrectString() {
|
||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
|
||||
mBatteryStats, SystemClock.elapsedRealtime() * 1000, false /* shortString */,
|
||||
PowerUtil.convertMsToUs(Duration.ofMinutes(7).toMillis()),
|
||||
true /* basedOnUsage */);
|
||||
BatteryInfo info2 = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
|
||||
mBatteryStats, SystemClock.elapsedRealtime() * 1000, true /* shortString */,
|
||||
PowerUtil.convertMsToUs(Duration.ofMinutes(7).toMillis()),
|
||||
true /* basedOnUsage */);
|
||||
|
||||
// These should be identical in either case
|
||||
assertThat(info.remainingLabel.toString()).isEqualTo(
|
||||
mContext.getString(R.string.power_remaining_duration_only_shutdown_imminent));
|
||||
assertThat(info2.remainingLabel.toString()).isEqualTo(
|
||||
mContext.getString(R.string.power_remaining_duration_only_shutdown_imminent));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetBatteryInfo_basedOnUsageTrueBetweenSevenAndFifteenMinutes_usesCorrectString() {
|
||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
|
||||
mBatteryStats, SystemClock.elapsedRealtime() * 1000, false /* shortString */,
|
||||
PowerUtil.convertMsToUs(Duration.ofMinutes(10).toMillis()),
|
||||
true /* basedOnUsage */);
|
||||
|
||||
// Check that strings are showing less than 15 minutes remaining regardless of exact time.
|
||||
assertThat(info.chargeLabel.toString()).isEqualTo(
|
||||
mContext.getString(R.string.power_remaining_less_than_duration,
|
||||
TEST_BATTERY_LEVEL_10, FIFTEEN_MIN_FORMATTED));
|
||||
assertThat(info.remainingLabel.toString()).isEqualTo(
|
||||
mContext.getString(R.string.power_remaining_less_than_duration_only,
|
||||
FIFTEEN_MIN_FORMATTED));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testGetBatteryInfo_basedOnUsageFalse_usesDefaultString() {
|
||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
|
||||
|
@@ -55,7 +55,6 @@ import com.android.internal.os.BatteryStatsImpl;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.SettingsActivity;
|
||||
import com.android.settings.TestConfig;
|
||||
import com.android.settings.Utils;
|
||||
import com.android.settings.applications.LayoutPreference;
|
||||
import com.android.settings.fuelgauge.anomaly.Anomaly;
|
||||
import com.android.settings.fuelgauge.anomaly.AnomalyDetectionPolicy;
|
||||
@@ -65,6 +64,7 @@ import com.android.settings.testutils.XmlTestUtils;
|
||||
import com.android.settings.testutils.shadow.SettingsShadowResources;
|
||||
import com.android.settingslib.core.AbstractPreferenceController;
|
||||
|
||||
import com.android.settingslib.utils.StringUtil;
|
||||
import org.junit.Before;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
@@ -367,8 +367,8 @@ public class PowerUsageSummaryLegacyTest {
|
||||
public void testUpdateScreenPreference_showCorrectSummary() {
|
||||
doReturn(mScreenBatterySipper).when(mFragment).findBatterySipperByType(any(), any());
|
||||
doReturn(mRealContext).when(mFragment).getContext();
|
||||
final CharSequence expectedSummary = Utils.formatElapsedTime(mRealContext, USAGE_TIME_MS,
|
||||
false);
|
||||
final CharSequence expectedSummary =
|
||||
StringUtil.formatElapsedTime(mRealContext, USAGE_TIME_MS, false);
|
||||
|
||||
mFragment.updateScreenPreference();
|
||||
|
||||
|
Reference in New Issue
Block a user