summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/com/android/internal/statusbar/IStatusBar.aidl2
-rw-r--r--core/java/com/android/internal/statusbar/IStatusBarService.aidl2
-rw-r--r--packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningController.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java55
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java8
-rw-r--r--services/core/java/com/android/server/power/InattentiveSleepWarningController.java8
-rw-r--r--services/core/java/com/android/server/power/PowerManagerService.java14
-rw-r--r--services/core/java/com/android/server/statusbar/StatusBarManagerService.java4
-rw-r--r--services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java10
9 files changed, 79 insertions, 28 deletions
diff --git a/core/java/com/android/internal/statusbar/IStatusBar.aidl b/core/java/com/android/internal/statusbar/IStatusBar.aidl
index 20706bb4b21f..aa0ac37b007a 100644
--- a/core/java/com/android/internal/statusbar/IStatusBar.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBar.aidl
@@ -197,5 +197,5 @@ oneway interface IStatusBar
/**
* Dismiss the warning that the device is about to go to sleep due to user inactivity.
*/
- void dismissInattentiveSleepWarning();
+ void dismissInattentiveSleepWarning(boolean animated);
}
diff --git a/core/java/com/android/internal/statusbar/IStatusBarService.aidl b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
index 76235a4a892e..a9f7b8455807 100644
--- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
@@ -122,5 +122,5 @@ interface IStatusBarService
/**
* Dismiss the warning that the device is about to go to sleep due to user inactivity.
*/
- void dismissInattentiveSleepWarning();
+ void dismissInattentiveSleepWarning(boolean animated);
}
diff --git a/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningController.java b/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningController.java
index 716943164b61..7d4bd019e72b 100644
--- a/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningController.java
+++ b/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningController.java
@@ -54,9 +54,9 @@ public class InattentiveSleepWarningController extends SystemUI implements Comma
}
@Override
- public void dismissInattentiveSleepWarning() {
+ public void dismissInattentiveSleepWarning(boolean animated) {
if (mOverlayView != null) {
- mOverlayView.dismiss();
+ mOverlayView.dismiss(animated);
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java b/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java
index 8ccc679d32b0..cf1bc7dc115d 100644
--- a/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java
+++ b/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java
@@ -16,11 +16,15 @@
package com.android.systemui.power;
+import android.animation.Animator;
+import android.animation.AnimatorInflater;
+import android.animation.AnimatorListenerAdapter;
import android.content.Context;
import android.graphics.PixelFormat;
import android.os.Binder;
import android.os.IBinder;
import android.view.LayoutInflater;
+import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.FrameLayout;
@@ -34,6 +38,8 @@ import com.android.systemui.R;
public class InattentiveSleepWarningView extends FrameLayout {
private final IBinder mWindowToken = new Binder();
private final WindowManager mWindowManager;
+ private Animator mFadeOutAnimator;
+ private boolean mDismissing;
InattentiveSleepWarningView(Context context) {
super(context);
@@ -47,23 +53,62 @@ public class InattentiveSleepWarningView extends FrameLayout {
// overlay consumes key presses
return true;
});
+
+ mFadeOutAnimator = AnimatorInflater.loadAnimator(getContext(),
+ com.android.internal.R.animator.fade_out);
+ mFadeOutAnimator.setTarget(this);
+ mFadeOutAnimator.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ removeView();
+ }
+
+ @Override
+ public void onAnimationCancel(Animator animation) {
+ mDismissing = false;
+ setAlpha(1f);
+ setVisibility(View.VISIBLE);
+ }
+ });
+ }
+
+ private void removeView() {
+ if (mDismissing) {
+ setVisibility(View.INVISIBLE);
+ mWindowManager.removeView(InattentiveSleepWarningView.this);
+ }
}
/**
* Show the warning.
*/
public void show() {
- if (getParent() == null) {
- mWindowManager.addView(this, getLayoutParams(mWindowToken));
+ if (getParent() != null) {
+ if (mFadeOutAnimator.isStarted()) {
+ mFadeOutAnimator.cancel();
+ }
+ return;
}
+
+ setAlpha(1f);
+ setVisibility(View.VISIBLE);
+ mWindowManager.addView(this, getLayoutParams(mWindowToken));
}
/**
* Dismiss the warning.
*/
- public void dismiss() {
- if (getParent() != null) {
- mWindowManager.removeView(this);
+ public void dismiss(boolean animated) {
+ if (getParent() == null) {
+ return;
+ }
+
+ mDismissing = true;
+
+ if (animated) {
+ postOnAnimation(mFadeOutAnimator::start);
+ } else {
+ removeView();
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
index 88b6fdda3dd5..ca1143065ded 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
@@ -307,7 +307,7 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
* Called to notify System UI that the warning about the device going to sleep
* due to prolonged user inactivity should be dismissed.
*/
- default void dismissInattentiveSleepWarning() { }
+ default void dismissInattentiveSleepWarning(boolean animated) { }
}
public CommandQueue(Context context) {
@@ -816,9 +816,9 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
}
@Override
- public void dismissInattentiveSleepWarning() {
+ public void dismissInattentiveSleepWarning(boolean animated) {
synchronized (mLock) {
- mHandler.obtainMessage(MSG_DISMISS_INATTENTIVE_SLEEP_WARNING)
+ mHandler.obtainMessage(MSG_DISMISS_INATTENTIVE_SLEEP_WARNING, animated)
.sendToTarget();
}
}
@@ -1175,7 +1175,7 @@ public class CommandQueue extends IStatusBar.Stub implements CallbackController<
break;
case MSG_DISMISS_INATTENTIVE_SLEEP_WARNING:
for (int i = 0; i < mCallbacks.size(); i++) {
- mCallbacks.get(i).dismissInattentiveSleepWarning();
+ mCallbacks.get(i).dismissInattentiveSleepWarning((Boolean) msg.obj);
}
break;
}
diff --git a/services/core/java/com/android/server/power/InattentiveSleepWarningController.java b/services/core/java/com/android/server/power/InattentiveSleepWarningController.java
index db8a63f44cbc..dbedde6b5822 100644
--- a/services/core/java/com/android/server/power/InattentiveSleepWarningController.java
+++ b/services/core/java/com/android/server/power/InattentiveSleepWarningController.java
@@ -75,18 +75,18 @@ public class InattentiveSleepWarningController {
* Dismiss the warning.
*/
@GuardedBy("PowerManagerService.mLock")
- public void dismiss() {
+ public void dismiss(boolean animated) {
if (!isShown()) {
return;
}
- mHandler.post(this::dismissInternal);
+ mHandler.post(() -> dismissInternal(animated));
mIsShown = false;
}
- private void dismissInternal() {
+ private void dismissInternal(boolean animated) {
try {
- getStatusBar().dismissInattentiveSleepWarning();
+ getStatusBar().dismissInattentiveSleepWarning(animated);
} catch (RemoteException e) {
Log.e(TAG, "Failed to dismiss inattentive sleep warning", e);
}
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 00e0f7124714..fce7f049107b 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -2240,10 +2240,16 @@ public final class PowerManagerService extends SystemService
private boolean maybeHideInattentiveSleepWarningLocked(long now, long showWarningTime) {
long attentiveTimeout = getAttentiveTimeoutLocked();
- if (mInattentiveSleepWarningOverlayController.isShown() && (attentiveTimeout < 0
- || isBeingKeptFromShowingInattentiveSleepWarningLocked()
- || now < showWarningTime)) {
- mInattentiveSleepWarningOverlayController.dismiss();
+ if (!mInattentiveSleepWarningOverlayController.isShown()) {
+ return false;
+ }
+
+ if (mWakefulness != WAKEFULNESS_AWAKE) {
+ mInattentiveSleepWarningOverlayController.dismiss(false);
+ return true;
+ } else if (attentiveTimeout < 0 || isBeingKeptFromShowingInattentiveSleepWarningLocked()
+ || now < showWarningTime) {
+ mInattentiveSleepWarningOverlayController.dismiss(true);
return true;
}
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
index c256b8499ee8..6ea08fe1a19d 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
@@ -1387,11 +1387,11 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
}
@Override
- public void dismissInattentiveSleepWarning() {
+ public void dismissInattentiveSleepWarning(boolean animated) {
enforceStatusBarService();
if (mBar != null) {
try {
- mBar.dismissInattentiveSleepWarning();
+ mBar.dismissInattentiveSleepWarning(animated);
} catch (RemoteException ex) {
}
}
diff --git a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
index 592f4ec7caab..0ca62e2dcdff 100644
--- a/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/power/PowerManagerServiceTest.java
@@ -668,11 +668,11 @@ public class PowerManagerServiceTest {
startSystem();
verify(mInattentiveSleepWarningControllerMock, times(1)).show();
- verify(mInattentiveSleepWarningControllerMock, never()).dismiss();
+ verify(mInattentiveSleepWarningControllerMock, never()).dismiss(anyBoolean());
when(mInattentiveSleepWarningControllerMock.isShown()).thenReturn(true);
setPluggedIn(true);
- verify(mInattentiveSleepWarningControllerMock, atLeastOnce()).dismiss();
+ verify(mInattentiveSleepWarningControllerMock, atLeastOnce()).dismiss(true);
}
@Test
@@ -690,12 +690,12 @@ public class PowerManagerServiceTest {
SystemClock.sleep(70);
verify(mInattentiveSleepWarningControllerMock, times(1)).show();
- verify(mInattentiveSleepWarningControllerMock, never()).dismiss();
+ verify(mInattentiveSleepWarningControllerMock, never()).dismiss(anyBoolean());
when(mInattentiveSleepWarningControllerMock.isShown()).thenReturn(true);
mService.getBinderServiceInstance().userActivity(SystemClock.uptimeMillis(),
PowerManager.USER_ACTIVITY_EVENT_TOUCH, 0);
- verify(mInattentiveSleepWarningControllerMock, times(1)).dismiss();
+ verify(mInattentiveSleepWarningControllerMock, times(1)).dismiss(true);
}
@Test
@@ -711,7 +711,7 @@ public class PowerManagerServiceTest {
when(mInattentiveSleepWarningControllerMock.isShown()).thenReturn(true);
SystemClock.sleep(30);
forceAwake();
- verify(mInattentiveSleepWarningControllerMock, atLeastOnce()).dismiss();
+ verify(mInattentiveSleepWarningControllerMock, atLeastOnce()).dismiss(false);
}
@Test