Merge changes I93d4d089,I4f09f9e5 into tm-qpr-dev
* changes: Fix b/248686898: Battery Usage list renders items on top of each other after swiping back from an app Fix broken battery usage Robolectric tests
This commit is contained in:
@@ -108,6 +108,7 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
|
|||||||
|
|
||||||
private boolean mIs24HourFormat;
|
private boolean mIs24HourFormat;
|
||||||
private boolean mIsFooterPrefAdded = false;
|
private boolean mIsFooterPrefAdded = false;
|
||||||
|
private boolean mHourlyChartVisible = true;
|
||||||
private View mBatteryChartViewGroup;
|
private View mBatteryChartViewGroup;
|
||||||
private View mCategoryTitleView;
|
private View mCategoryTitleView;
|
||||||
private PreferenceScreen mPreferenceScreen;
|
private PreferenceScreen mPreferenceScreen;
|
||||||
@@ -690,9 +691,10 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void animateBatteryHourlyChartView(final boolean visible) {
|
private void animateBatteryHourlyChartView(final boolean visible) {
|
||||||
if (mHourlyChartView == null) {
|
if (mHourlyChartView == null || mHourlyChartVisible == visible) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
mHourlyChartVisible = visible;
|
||||||
|
|
||||||
if (visible) {
|
if (visible) {
|
||||||
mHourlyChartView.setVisibility(View.VISIBLE);
|
mHourlyChartView.setVisibility(View.VISIBLE);
|
||||||
|
@@ -18,6 +18,8 @@ package com.android.settings.fuelgauge.batteryusage;
|
|||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
|
import static org.mockito.ArgumentMatchers.anyFloat;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyLong;
|
||||||
import static org.mockito.Mockito.any;
|
import static org.mockito.Mockito.any;
|
||||||
import static org.mockito.Mockito.atLeast;
|
import static org.mockito.Mockito.atLeast;
|
||||||
import static org.mockito.Mockito.atLeastOnce;
|
import static org.mockito.Mockito.atLeastOnce;
|
||||||
@@ -36,6 +38,7 @@ import android.os.Bundle;
|
|||||||
import android.os.LocaleList;
|
import android.os.LocaleList;
|
||||||
import android.text.format.DateUtils;
|
import android.text.format.DateUtils;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.ViewPropertyAnimator;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
@@ -85,6 +88,8 @@ public final class BatteryChartPreferenceControllerTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private BatteryChartView mHourlyChartView;
|
private BatteryChartView mHourlyChartView;
|
||||||
@Mock
|
@Mock
|
||||||
|
private ViewPropertyAnimator mViewPropertyAnimator;
|
||||||
|
@Mock
|
||||||
private PowerGaugePreference mPowerGaugePreference;
|
private PowerGaugePreference mPowerGaugePreference;
|
||||||
@Mock
|
@Mock
|
||||||
private BatteryUtils mBatteryUtils;
|
private BatteryUtils mBatteryUtils;
|
||||||
@@ -116,6 +121,7 @@ public final class BatteryChartPreferenceControllerTest {
|
|||||||
.when(mFeatureFactory.powerUsageFeatureProvider)
|
.when(mFeatureFactory.powerUsageFeatureProvider)
|
||||||
.getHideApplicationEntries(mContext);
|
.getHideApplicationEntries(mContext);
|
||||||
doReturn(mLayoutParams).when(mDailyChartView).getLayoutParams();
|
doReturn(mLayoutParams).when(mDailyChartView).getLayoutParams();
|
||||||
|
setupHourlyChartViewAnimationMock();
|
||||||
mBatteryChartPreferenceController = createController();
|
mBatteryChartPreferenceController = createController();
|
||||||
mBatteryChartPreferenceController.mPrefContext = mContext;
|
mBatteryChartPreferenceController.mPrefContext = mContext;
|
||||||
mBatteryChartPreferenceController.mAppListPrefGroup = mAppListGroup;
|
mBatteryChartPreferenceController.mAppListPrefGroup = mAppListGroup;
|
||||||
@@ -174,11 +180,13 @@ public final class BatteryChartPreferenceControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setBatteryChartViewModel_6Hours() {
|
public void setBatteryChartViewModel_6Hours() {
|
||||||
|
reset(mDailyChartView);
|
||||||
reset(mHourlyChartView);
|
reset(mHourlyChartView);
|
||||||
|
setupHourlyChartViewAnimationMock();
|
||||||
|
|
||||||
mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(6));
|
mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(6));
|
||||||
|
|
||||||
verify(mDailyChartView, atLeastOnce()).setVisibility(View.GONE);
|
verify(mDailyChartView, atLeastOnce()).setVisibility(View.GONE);
|
||||||
verify(mHourlyChartView, atLeastOnce()).setVisibility(View.VISIBLE);
|
|
||||||
// Ignore fast refresh ui from the data processor callback.
|
// Ignore fast refresh ui from the data processor callback.
|
||||||
verify(mHourlyChartView, atLeast(0)).setViewModel(null);
|
verify(mHourlyChartView, atLeast(0)).setViewModel(null);
|
||||||
verify(mHourlyChartView, atLeastOnce()).setViewModel(new BatteryChartViewModel(
|
verify(mHourlyChartView, atLeastOnce()).setViewModel(new BatteryChartViewModel(
|
||||||
@@ -192,6 +200,10 @@ public final class BatteryChartPreferenceControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setBatteryChartViewModel_60Hours() {
|
public void setBatteryChartViewModel_60Hours() {
|
||||||
|
reset(mDailyChartView);
|
||||||
|
reset(mHourlyChartView);
|
||||||
|
setupHourlyChartViewAnimationMock();
|
||||||
|
|
||||||
BatteryChartViewModel expectedDailyViewModel = new BatteryChartViewModel(
|
BatteryChartViewModel expectedDailyViewModel = new BatteryChartViewModel(
|
||||||
List.of(100, 83, 59, 41),
|
List.of(100, 83, 59, 41),
|
||||||
// "Sat", "Sun", "Mon", "Mon"
|
// "Sat", "Sun", "Mon", "Mon"
|
||||||
@@ -205,16 +217,18 @@ public final class BatteryChartPreferenceControllerTest {
|
|||||||
mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(60));
|
mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(60));
|
||||||
|
|
||||||
verify(mDailyChartView, atLeastOnce()).setVisibility(View.VISIBLE);
|
verify(mDailyChartView, atLeastOnce()).setVisibility(View.VISIBLE);
|
||||||
verify(mHourlyChartView, atLeastOnce()).setVisibility(View.GONE);
|
verify(mViewPropertyAnimator, atLeastOnce()).alpha(0f);
|
||||||
verify(mDailyChartView).setViewModel(expectedDailyViewModel);
|
verify(mDailyChartView).setViewModel(expectedDailyViewModel);
|
||||||
|
|
||||||
reset(mDailyChartView);
|
reset(mDailyChartView);
|
||||||
reset(mHourlyChartView);
|
reset(mHourlyChartView);
|
||||||
|
setupHourlyChartViewAnimationMock();
|
||||||
doReturn(mLayoutParams).when(mDailyChartView).getLayoutParams();
|
doReturn(mLayoutParams).when(mDailyChartView).getLayoutParams();
|
||||||
mBatteryChartPreferenceController.mDailyChartIndex = 0;
|
mBatteryChartPreferenceController.mDailyChartIndex = 0;
|
||||||
mBatteryChartPreferenceController.refreshUi();
|
mBatteryChartPreferenceController.refreshUi();
|
||||||
verify(mDailyChartView).setVisibility(View.VISIBLE);
|
verify(mDailyChartView).setVisibility(View.VISIBLE);
|
||||||
verify(mHourlyChartView).setVisibility(View.VISIBLE);
|
verify(mHourlyChartView).setVisibility(View.VISIBLE);
|
||||||
|
verify(mViewPropertyAnimator, atLeastOnce()).alpha(1f);
|
||||||
|
|
||||||
expectedDailyViewModel.setSelectedIndex(0);
|
expectedDailyViewModel.setSelectedIndex(0);
|
||||||
verify(mDailyChartView).setViewModel(expectedDailyViewModel);
|
verify(mDailyChartView).setViewModel(expectedDailyViewModel);
|
||||||
@@ -234,12 +248,13 @@ public final class BatteryChartPreferenceControllerTest {
|
|||||||
|
|
||||||
reset(mDailyChartView);
|
reset(mDailyChartView);
|
||||||
reset(mHourlyChartView);
|
reset(mHourlyChartView);
|
||||||
|
setupHourlyChartViewAnimationMock();
|
||||||
doReturn(mLayoutParams).when(mDailyChartView).getLayoutParams();
|
doReturn(mLayoutParams).when(mDailyChartView).getLayoutParams();
|
||||||
mBatteryChartPreferenceController.mDailyChartIndex = 1;
|
mBatteryChartPreferenceController.mDailyChartIndex = 1;
|
||||||
mBatteryChartPreferenceController.mHourlyChartIndex = 6;
|
mBatteryChartPreferenceController.mHourlyChartIndex = 6;
|
||||||
mBatteryChartPreferenceController.refreshUi();
|
mBatteryChartPreferenceController.refreshUi();
|
||||||
verify(mDailyChartView).setVisibility(View.VISIBLE);
|
verify(mDailyChartView).setVisibility(View.VISIBLE);
|
||||||
verify(mHourlyChartView).setVisibility(View.VISIBLE);
|
verify(mViewPropertyAnimator, atLeastOnce()).alpha(1f);
|
||||||
expectedDailyViewModel.setSelectedIndex(1);
|
expectedDailyViewModel.setSelectedIndex(1);
|
||||||
verify(mDailyChartView).setViewModel(expectedDailyViewModel);
|
verify(mDailyChartView).setViewModel(expectedDailyViewModel);
|
||||||
BatteryChartViewModel expectedHourlyViewModel = new BatteryChartViewModel(
|
BatteryChartViewModel expectedHourlyViewModel = new BatteryChartViewModel(
|
||||||
@@ -264,13 +279,14 @@ public final class BatteryChartPreferenceControllerTest {
|
|||||||
|
|
||||||
reset(mDailyChartView);
|
reset(mDailyChartView);
|
||||||
reset(mHourlyChartView);
|
reset(mHourlyChartView);
|
||||||
|
setupHourlyChartViewAnimationMock();
|
||||||
doReturn(mLayoutParams).when(mDailyChartView).getLayoutParams();
|
doReturn(mLayoutParams).when(mDailyChartView).getLayoutParams();
|
||||||
mBatteryChartPreferenceController.mDailyChartIndex = 2;
|
mBatteryChartPreferenceController.mDailyChartIndex = 2;
|
||||||
mBatteryChartPreferenceController.mHourlyChartIndex =
|
mBatteryChartPreferenceController.mHourlyChartIndex =
|
||||||
BatteryChartViewModel.SELECTED_INDEX_ALL;
|
BatteryChartViewModel.SELECTED_INDEX_ALL;
|
||||||
mBatteryChartPreferenceController.refreshUi();
|
mBatteryChartPreferenceController.refreshUi();
|
||||||
verify(mDailyChartView).setVisibility(View.VISIBLE);
|
verify(mDailyChartView).setVisibility(View.VISIBLE);
|
||||||
verify(mHourlyChartView).setVisibility(View.VISIBLE);
|
verify(mViewPropertyAnimator, atLeastOnce()).alpha(1f);
|
||||||
expectedDailyViewModel.setSelectedIndex(2);
|
expectedDailyViewModel.setSelectedIndex(2);
|
||||||
verify(mDailyChartView).setViewModel(expectedDailyViewModel);
|
verify(mDailyChartView).setViewModel(expectedDailyViewModel);
|
||||||
verify(mHourlyChartView).setViewModel(new BatteryChartViewModel(
|
verify(mHourlyChartView).setViewModel(new BatteryChartViewModel(
|
||||||
@@ -734,4 +750,11 @@ public final class BatteryChartPreferenceControllerTest {
|
|||||||
controller.mPrefContext = mContext;
|
controller.mPrefContext = mContext;
|
||||||
return controller;
|
return controller;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setupHourlyChartViewAnimationMock() {
|
||||||
|
doReturn(mViewPropertyAnimator).when(mHourlyChartView).animate();
|
||||||
|
doReturn(mViewPropertyAnimator).when(mViewPropertyAnimator).alpha(anyFloat());
|
||||||
|
doReturn(mViewPropertyAnimator).when(mViewPropertyAnimator).setDuration(anyLong());
|
||||||
|
doReturn(mViewPropertyAnimator).when(mViewPropertyAnimator).setListener(any());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -579,9 +579,13 @@ public class DataProcessorTest {
|
|||||||
ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY, /*consumePercentage=*/ 25.0,
|
ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY, /*consumePercentage=*/ 25.0,
|
||||||
/*foregroundUsageTimeInMs=*/ 50, /*backgroundUsageTimeInMs=*/ 60);
|
/*foregroundUsageTimeInMs=*/ 50, /*backgroundUsageTimeInMs=*/ 60);
|
||||||
verify(mMetricsFeatureProvider)
|
verify(mMetricsFeatureProvider)
|
||||||
.action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT, 3);
|
.action(mContext.getApplicationContext(),
|
||||||
|
SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT,
|
||||||
|
3);
|
||||||
verify(mMetricsFeatureProvider)
|
verify(mMetricsFeatureProvider)
|
||||||
.action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT, 0);
|
.action(mContext.getApplicationContext(),
|
||||||
|
SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT,
|
||||||
|
0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -674,9 +678,13 @@ public class DataProcessorTest {
|
|||||||
assertThat(resultMap.get(0).get(0)).isNotNull();
|
assertThat(resultMap.get(0).get(0)).isNotNull();
|
||||||
assertThat(resultMap.get(0).get(DataProcessor.SELECTED_INDEX_ALL)).isNotNull();
|
assertThat(resultMap.get(0).get(DataProcessor.SELECTED_INDEX_ALL)).isNotNull();
|
||||||
verify(mMetricsFeatureProvider)
|
verify(mMetricsFeatureProvider)
|
||||||
.action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT, 2);
|
.action(mContext.getApplicationContext(),
|
||||||
|
SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT,
|
||||||
|
2);
|
||||||
verify(mMetricsFeatureProvider)
|
verify(mMetricsFeatureProvider)
|
||||||
.action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT, 0);
|
.action(mContext.getApplicationContext(),
|
||||||
|
SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT,
|
||||||
|
0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -739,9 +747,13 @@ public class DataProcessorTest {
|
|||||||
assertThat(resultMap.get(0).get(0)).isNotNull();
|
assertThat(resultMap.get(0).get(0)).isNotNull();
|
||||||
assertThat(resultMap.get(0).get(DataProcessor.SELECTED_INDEX_ALL)).isNotNull();
|
assertThat(resultMap.get(0).get(DataProcessor.SELECTED_INDEX_ALL)).isNotNull();
|
||||||
verify(mMetricsFeatureProvider)
|
verify(mMetricsFeatureProvider)
|
||||||
.action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT, 1);
|
.action(mContext.getApplicationContext(),
|
||||||
|
SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT,
|
||||||
|
1);
|
||||||
verify(mMetricsFeatureProvider)
|
verify(mMetricsFeatureProvider)
|
||||||
.action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT, 0);
|
.action(mContext.getApplicationContext(),
|
||||||
|
SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT,
|
||||||
|
0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -814,9 +826,13 @@ public class DataProcessorTest {
|
|||||||
ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 50.0,
|
ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 50.0,
|
||||||
/*foregroundUsageTimeInMs=*/ 10, /*backgroundUsageTimeInMs=*/ 20);
|
/*foregroundUsageTimeInMs=*/ 10, /*backgroundUsageTimeInMs=*/ 20);
|
||||||
verify(mMetricsFeatureProvider)
|
verify(mMetricsFeatureProvider)
|
||||||
.action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT, 1);
|
.action(mContext.getApplicationContext(),
|
||||||
|
SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT,
|
||||||
|
1);
|
||||||
verify(mMetricsFeatureProvider)
|
verify(mMetricsFeatureProvider)
|
||||||
.action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT, 1);
|
.action(mContext.getApplicationContext(),
|
||||||
|
SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT,
|
||||||
|
1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -889,9 +905,13 @@ public class DataProcessorTest {
|
|||||||
resultEntry = resultDiffData.getAppDiffEntryList().get(1);
|
resultEntry = resultDiffData.getAppDiffEntryList().get(1);
|
||||||
assertThat(resultEntry.mBackgroundUsageTimeInMs).isEqualTo(0);
|
assertThat(resultEntry.mBackgroundUsageTimeInMs).isEqualTo(0);
|
||||||
verify(mMetricsFeatureProvider)
|
verify(mMetricsFeatureProvider)
|
||||||
.action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT, 2);
|
.action(mContext.getApplicationContext(),
|
||||||
|
SettingsEnums.ACTION_BATTERY_USAGE_SHOWN_APP_COUNT,
|
||||||
|
2);
|
||||||
verify(mMetricsFeatureProvider)
|
verify(mMetricsFeatureProvider)
|
||||||
.action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT, 0);
|
.action(mContext.getApplicationContext(),
|
||||||
|
SettingsEnums.ACTION_BATTERY_USAGE_HIDDEN_APP_COUNT,
|
||||||
|
0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
Reference in New Issue
Block a user