diff options
Diffstat (limited to 'packages/SystemUI/src/com/android/systemui/ChargingView.java')
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/ChargingView.java | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/ChargingView.java b/packages/SystemUI/src/com/android/systemui/ChargingView.java index 555cc740c373..33f8b069b751 100644 --- a/packages/SystemUI/src/com/android/systemui/ChargingView.java +++ b/packages/SystemUI/src/com/android/systemui/ChargingView.java @@ -19,9 +19,11 @@ package com.android.systemui; import android.annotation.Nullable; import android.content.Context; import android.content.res.TypedArray; +import android.os.UserHandle; import android.util.AttributeSet; import android.widget.ImageView; +import com.android.internal.hardware.AmbientDisplayConfiguration; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.ConfigurationController; @@ -34,14 +36,28 @@ public class ChargingView extends ImageView implements BatteryController.BatteryStateChangeCallback, ConfigurationController.ConfigurationListener { + private static final long CHARGING_INDICATION_DELAY_MS = 1000; + + private final AmbientDisplayConfiguration mConfig; + private final Runnable mClearSuppressCharging = this::clearSuppressCharging; private BatteryController mBatteryController; private int mImageResource; private boolean mCharging; private boolean mDark; + private boolean mSuppressCharging; + + + private void clearSuppressCharging() { + mSuppressCharging = false; + removeCallbacks(mClearSuppressCharging); + updateVisibility(); + } public ChargingView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); + mConfig = new AmbientDisplayConfiguration(context); + TypedArray a = context.obtainStyledAttributes(attrs, new int[]{android.R.attr.src}); int srcResId = a.getResourceId(0, 0); @@ -67,14 +83,30 @@ public class ChargingView extends ImageView implements super.onDetachedFromWindow(); mBatteryController.removeCallback(this); Dependency.get(ConfigurationController.class).removeCallback(this); + removeCallbacks(mClearSuppressCharging); } @Override public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) { + boolean startCharging = charging && !mCharging; + if (startCharging && deviceWillWakeUpWhenPluggedIn() && mDark) { + // We're about to wake up, and thus don't want to show the indicator just for it to be + // hidden again. + clearSuppressCharging(); + mSuppressCharging = true; + postDelayed(mClearSuppressCharging, CHARGING_INDICATION_DELAY_MS); + } mCharging = charging; updateVisibility(); } + private boolean deviceWillWakeUpWhenPluggedIn() { + boolean plugTurnsOnScreen = getResources().getBoolean( + com.android.internal.R.bool.config_unplugTurnsOnScreen); + boolean aod = mConfig.alwaysOnEnabled(UserHandle.USER_CURRENT); + return !aod && plugTurnsOnScreen; + } + @Override public void onDensityOrFontScaleChanged() { setImageResource(mImageResource); @@ -82,10 +114,13 @@ public class ChargingView extends ImageView implements public void setDark(boolean dark) { mDark = dark; + if (!dark) { + clearSuppressCharging(); + } updateVisibility(); } private void updateVisibility() { - setVisibility(mCharging && mDark ? VISIBLE : INVISIBLE); + setVisibility(mCharging && !mSuppressCharging && mDark ? VISIBLE : INVISIBLE); } } |