Add fade in / out animation for battery usage hourly chart.
After: https://drive.google.com/file/d/1-1z2EM16X76qltTz_fL_DvgI7m65TtAN/view?usp=sharing Before: https://drive.google.com/file/d/1pG2rQ3V4rphjx7RLhSjb1r2HgXiFCYQZ/view?usp=sharing Bug: 245655904 Test: manually Change-Id: I72533a28445bea83aea604a937864052bd65c898
This commit is contained in:
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package com.android.settings.fuelgauge.batteryusage;
|
package com.android.settings.fuelgauge.batteryusage;
|
||||||
|
|
||||||
|
import android.animation.Animator;
|
||||||
|
import android.animation.AnimatorListenerAdapter;
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
@@ -68,9 +70,8 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
|
|||||||
private static final int ENABLED_ICON_ALPHA = 255;
|
private static final int ENABLED_ICON_ALPHA = 255;
|
||||||
private static final int DISABLED_ICON_ALPHA = 255 / 3;
|
private static final int DISABLED_ICON_ALPHA = 255 / 3;
|
||||||
|
|
||||||
private static final long FADE_ANIMATION_DURATION = 350L;
|
private static final long FADE_IN_ANIMATION_DURATION = 400L;
|
||||||
private static final long VALID_USAGE_TIME_DURATION = DateUtils.HOUR_IN_MILLIS * 2;
|
private static final long FADE_OUT_ANIMATION_DURATION = 200L;
|
||||||
private static final long VALID_DIFF_DURATION = DateUtils.MINUTE_IN_MILLIS * 3;
|
|
||||||
|
|
||||||
// Keys for bundle instance to restore configurations.
|
// Keys for bundle instance to restore configurations.
|
||||||
private static final String KEY_EXPAND_SYSTEM_INFO = "expand_system_info";
|
private static final String KEY_EXPAND_SYSTEM_INFO = "expand_system_info";
|
||||||
@@ -121,6 +122,10 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
|
|||||||
private final CharSequence[] mNotAllowShowSummaryPackages;
|
private final CharSequence[] mNotAllowShowSummaryPackages;
|
||||||
private final MetricsFeatureProvider mMetricsFeatureProvider;
|
private final MetricsFeatureProvider mMetricsFeatureProvider;
|
||||||
private final Handler mHandler = new Handler(Looper.getMainLooper());
|
private final Handler mHandler = new Handler(Looper.getMainLooper());
|
||||||
|
private final AnimatorListenerAdapter mHourlyChartFadeInAdapter =
|
||||||
|
createHourlyChartAnimatorListenerAdapter(/*isToShow=*/ true);
|
||||||
|
private final AnimatorListenerAdapter mHourlyChartFadeOutAdapter =
|
||||||
|
createHourlyChartAnimatorListenerAdapter(/*isToShow=*/ false);
|
||||||
|
|
||||||
// Preference cache to avoid create new instance each time.
|
// Preference cache to avoid create new instance each time.
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
@@ -382,9 +387,9 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
|
|||||||
|
|
||||||
if (mDailyChartIndex == BatteryChartViewModel.SELECTED_INDEX_ALL) {
|
if (mDailyChartIndex == BatteryChartViewModel.SELECTED_INDEX_ALL) {
|
||||||
// Multiple days are selected, hide the hourly chart view.
|
// Multiple days are selected, hide the hourly chart view.
|
||||||
mHourlyChartView.setVisibility(View.GONE);
|
animateBatteryHourlyChartView(/*isToShow=*/ false);
|
||||||
} else {
|
} else {
|
||||||
mHourlyChartView.setVisibility(View.VISIBLE);
|
animateBatteryHourlyChartView(/*isToShow=*/ true);
|
||||||
final BatteryChartViewModel hourlyViewModel = mHourlyViewModels.get(mDailyChartIndex);
|
final BatteryChartViewModel hourlyViewModel = mHourlyViewModels.get(mDailyChartIndex);
|
||||||
hourlyViewModel.setSelectedIndex(mHourlyChartIndex);
|
hourlyViewModel.setSelectedIndex(mHourlyChartIndex);
|
||||||
mHourlyChartView.setViewModel(hourlyViewModel);
|
mHourlyChartView.setViewModel(hourlyViewModel);
|
||||||
@@ -626,11 +631,55 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
|
|||||||
|
|
||||||
private void animateBatteryChartViewGroup() {
|
private void animateBatteryChartViewGroup() {
|
||||||
if (mBatteryChartViewGroup != null && mBatteryChartViewGroup.getAlpha() == 0) {
|
if (mBatteryChartViewGroup != null && mBatteryChartViewGroup.getAlpha() == 0) {
|
||||||
mBatteryChartViewGroup.animate().alpha(1f).setDuration(FADE_ANIMATION_DURATION)
|
mBatteryChartViewGroup.animate().alpha(1f).setDuration(FADE_IN_ANIMATION_DURATION)
|
||||||
.start();
|
.start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void animateBatteryHourlyChartView(final boolean isToShow) {
|
||||||
|
if (mHourlyChartView == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isToShow) {
|
||||||
|
mHourlyChartView.setAlpha(0f);
|
||||||
|
mHourlyChartView.setVisibility(View.VISIBLE);
|
||||||
|
mHourlyChartView.animate()
|
||||||
|
.alpha(1f)
|
||||||
|
.setDuration(FADE_IN_ANIMATION_DURATION)
|
||||||
|
.setListener(mHourlyChartFadeInAdapter)
|
||||||
|
.start();
|
||||||
|
} else {
|
||||||
|
mHourlyChartView.animate()
|
||||||
|
.alpha(0f)
|
||||||
|
.setDuration(FADE_OUT_ANIMATION_DURATION)
|
||||||
|
.setListener(mHourlyChartFadeOutAdapter)
|
||||||
|
.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private AnimatorListenerAdapter createHourlyChartAnimatorListenerAdapter(
|
||||||
|
final boolean isToShow) {
|
||||||
|
final int visibility = isToShow ? View.VISIBLE : View.GONE;
|
||||||
|
|
||||||
|
return new AnimatorListenerAdapter() {
|
||||||
|
@Override
|
||||||
|
public void onAnimationEnd(Animator animation) {
|
||||||
|
super.onAnimationEnd(animation);
|
||||||
|
if (mHourlyChartView != null) {
|
||||||
|
mHourlyChartView.setVisibility(visibility);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onAnimationCancel(Animator animation) {
|
||||||
|
super.onAnimationCancel(animation);
|
||||||
|
if (mHourlyChartView != null) {
|
||||||
|
mHourlyChartView.setVisibility(visibility);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private void addFooterPreferenceIfNeeded(boolean containAppItems) {
|
private void addFooterPreferenceIfNeeded(boolean containAppItems) {
|
||||||
if (mIsFooterPrefAdded || mFooterPreference == null) {
|
if (mIsFooterPrefAdded || mFooterPreference == null) {
|
||||||
return;
|
return;
|
||||||
|
Reference in New Issue
Block a user