Merge changes from topic "presubmit-am-7ba48eb6ba70402ba7633198b5ee3795" into tm-qpr-dev-plus-aosp
* changes:
[automerge] Report visibility only when display is fully on in WallpaperService 2p: 66266df517
Report visibility only when display is fully on in WallpaperService
This commit is contained in:
committed by
Android (Google) Code Review
commit
38967a6fe8
@@ -205,6 +205,20 @@ interface IWallpaperManager {
|
|||||||
*/
|
*/
|
||||||
void notifyGoingToSleep(int x, int y, in Bundle extras);
|
void notifyGoingToSleep(int x, int y, in Bundle extras);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the screen has been fully turned on and is visible.
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
void notifyScreenTurnedOn(int displayId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the screen starts turning on.
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
void notifyScreenTurningOn(int displayId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the wallpaper dim amount between [0f, 1f] which would be blended with the system default
|
* Sets the wallpaper dim amount between [0f, 1f] which would be blended with the system default
|
||||||
* dimming. 0f doesn't add any additional dimming and 1f makes the wallpaper fully black.
|
* dimming. 0f doesn't add any additional dimming and 1f makes the wallpaper fully black.
|
||||||
|
|||||||
@@ -32,6 +32,8 @@ interface IWallpaperEngine {
|
|||||||
oneway void setDisplayPadding(in Rect padding);
|
oneway void setDisplayPadding(in Rect padding);
|
||||||
@UnsupportedAppUsage
|
@UnsupportedAppUsage
|
||||||
oneway void setVisibility(boolean visible);
|
oneway void setVisibility(boolean visible);
|
||||||
|
oneway void onScreenTurningOn();
|
||||||
|
oneway void onScreenTurnedOn();
|
||||||
oneway void setInAmbientMode(boolean inAmbientDisplay, long animationDuration);
|
oneway void setInAmbientMode(boolean inAmbientDisplay, long animationDuration);
|
||||||
@UnsupportedAppUsage
|
@UnsupportedAppUsage
|
||||||
oneway void dispatchPointer(in MotionEvent event);
|
oneway void dispatchPointer(in MotionEvent event);
|
||||||
|
|||||||
@@ -168,6 +168,7 @@ public abstract class WallpaperService extends Service {
|
|||||||
private static final int MSG_ZOOM = 10100;
|
private static final int MSG_ZOOM = 10100;
|
||||||
private static final int MSG_RESIZE_PREVIEW = 10110;
|
private static final int MSG_RESIZE_PREVIEW = 10110;
|
||||||
private static final int MSG_REPORT_SHOWN = 10150;
|
private static final int MSG_REPORT_SHOWN = 10150;
|
||||||
|
private static final int MSG_UPDATE_SCREEN_TURNING_ON = 10170;
|
||||||
private static final int MSG_UPDATE_DIMMING = 10200;
|
private static final int MSG_UPDATE_DIMMING = 10200;
|
||||||
|
|
||||||
/** limit calls to {@link Engine#onComputeColors} to at most once per second */
|
/** limit calls to {@link Engine#onComputeColors} to at most once per second */
|
||||||
@@ -213,6 +214,16 @@ public abstract class WallpaperService extends Service {
|
|||||||
|
|
||||||
boolean mInitializing = true;
|
boolean mInitializing = true;
|
||||||
boolean mVisible;
|
boolean mVisible;
|
||||||
|
/**
|
||||||
|
* Whether the screen is turning on.
|
||||||
|
* After the display is powered on, brightness is initially off. It is turned on only after
|
||||||
|
* all windows have been drawn, and sysui notifies that it's ready (See
|
||||||
|
* {@link com.android.internal.policy.IKeyguardDrawnCallback}).
|
||||||
|
* As some wallpapers use visibility as a signal to start animations, this makes sure
|
||||||
|
* {@link Engine#onVisibilityChanged} is invoked only when the display is both on and
|
||||||
|
* visible (with brightness on).
|
||||||
|
*/
|
||||||
|
private boolean mIsScreenTurningOn;
|
||||||
boolean mReportedVisible;
|
boolean mReportedVisible;
|
||||||
boolean mDestroyed;
|
boolean mDestroyed;
|
||||||
// Set to true after receiving WallpaperManager#COMMAND_FREEZE. It's reset back to false
|
// Set to true after receiving WallpaperManager#COMMAND_FREEZE. It's reset back to false
|
||||||
@@ -988,6 +999,7 @@ public abstract class WallpaperService extends Service {
|
|||||||
out.print(" mDestroyed="); out.println(mDestroyed);
|
out.print(" mDestroyed="); out.println(mDestroyed);
|
||||||
out.print(prefix); out.print("mVisible="); out.print(mVisible);
|
out.print(prefix); out.print("mVisible="); out.print(mVisible);
|
||||||
out.print(" mReportedVisible="); out.println(mReportedVisible);
|
out.print(" mReportedVisible="); out.println(mReportedVisible);
|
||||||
|
out.print(" mIsScreenTurningOn="); out.println(mIsScreenTurningOn);
|
||||||
out.print(prefix); out.print("mDisplay="); out.println(mDisplay);
|
out.print(prefix); out.print("mDisplay="); out.println(mDisplay);
|
||||||
out.print(prefix); out.print("mCreated="); out.print(mCreated);
|
out.print(prefix); out.print("mCreated="); out.print(mCreated);
|
||||||
out.print(" mSurfaceCreated="); out.print(mSurfaceCreated);
|
out.print(" mSurfaceCreated="); out.print(mSurfaceCreated);
|
||||||
@@ -1522,6 +1534,13 @@ public abstract class WallpaperService extends Service {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void onScreenTurningOnChanged(boolean isScreenTurningOn) {
|
||||||
|
if (!mDestroyed) {
|
||||||
|
mIsScreenTurningOn = isScreenTurningOn;
|
||||||
|
reportVisibility();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void doVisibilityChanged(boolean visible) {
|
void doVisibilityChanged(boolean visible) {
|
||||||
if (!mDestroyed) {
|
if (!mDestroyed) {
|
||||||
mVisible = visible;
|
mVisible = visible;
|
||||||
@@ -1538,9 +1557,10 @@ public abstract class WallpaperService extends Service {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!mDestroyed) {
|
if (!mDestroyed) {
|
||||||
mDisplayState = mDisplay == null ? Display.STATE_UNKNOWN :
|
mDisplayState =
|
||||||
mDisplay.getCommittedState();
|
mDisplay == null ? Display.STATE_UNKNOWN : mDisplay.getCommittedState();
|
||||||
boolean visible = mVisible && mDisplayState != Display.STATE_OFF;
|
boolean displayVisible = Display.isOnState(mDisplayState) && !mIsScreenTurningOn;
|
||||||
|
boolean visible = mVisible && displayVisible;
|
||||||
if (mReportedVisible != visible) {
|
if (mReportedVisible != visible) {
|
||||||
mReportedVisible = visible;
|
mReportedVisible = visible;
|
||||||
if (DEBUG) Log.v(TAG, "onVisibilityChanged(" + visible
|
if (DEBUG) Log.v(TAG, "onVisibilityChanged(" + visible
|
||||||
@@ -2414,6 +2434,20 @@ public abstract class WallpaperService extends Service {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updateScreenTurningOn(boolean isScreenTurningOn) {
|
||||||
|
Message msg = mCaller.obtainMessageBO(MSG_UPDATE_SCREEN_TURNING_ON, isScreenTurningOn,
|
||||||
|
null);
|
||||||
|
mCaller.sendMessage(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onScreenTurningOn() throws RemoteException {
|
||||||
|
updateScreenTurningOn(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onScreenTurnedOn() throws RemoteException {
|
||||||
|
updateScreenTurningOn(false);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void executeMessage(Message message) {
|
public void executeMessage(Message message) {
|
||||||
if (mDetached.get()) {
|
if (mDetached.get()) {
|
||||||
@@ -2464,6 +2498,13 @@ public abstract class WallpaperService extends Service {
|
|||||||
+ ": " + message.arg1);
|
+ ": " + message.arg1);
|
||||||
mEngine.doVisibilityChanged(message.arg1 != 0);
|
mEngine.doVisibilityChanged(message.arg1 != 0);
|
||||||
break;
|
break;
|
||||||
|
case MSG_UPDATE_SCREEN_TURNING_ON:
|
||||||
|
if (DEBUG) {
|
||||||
|
Log.v(TAG,
|
||||||
|
message.arg1 != 0 ? "Screen turning on" : "Screen turned on");
|
||||||
|
}
|
||||||
|
mEngine.onScreenTurningOnChanged(/* isScreenTurningOn= */ message.arg1 != 0);
|
||||||
|
break;
|
||||||
case MSG_WALLPAPER_OFFSETS: {
|
case MSG_WALLPAPER_OFFSETS: {
|
||||||
mEngine.doOffsetsChanged(true);
|
mEngine.doOffsetsChanged(true);
|
||||||
} break;
|
} break;
|
||||||
|
|||||||
@@ -213,6 +213,7 @@ import com.android.server.policy.keyguard.KeyguardServiceDelegate.DrawnListener;
|
|||||||
import com.android.server.policy.keyguard.KeyguardStateMonitor.StateCallback;
|
import com.android.server.policy.keyguard.KeyguardStateMonitor.StateCallback;
|
||||||
import com.android.server.statusbar.StatusBarManagerInternal;
|
import com.android.server.statusbar.StatusBarManagerInternal;
|
||||||
import com.android.server.vr.VrManagerInternal;
|
import com.android.server.vr.VrManagerInternal;
|
||||||
|
import com.android.server.wallpaper.WallpaperManagerInternal;
|
||||||
import com.android.server.wm.ActivityTaskManagerInternal;
|
import com.android.server.wm.ActivityTaskManagerInternal;
|
||||||
import com.android.server.wm.DisplayPolicy;
|
import com.android.server.wm.DisplayPolicy;
|
||||||
import com.android.server.wm.DisplayRotation;
|
import com.android.server.wm.DisplayRotation;
|
||||||
@@ -404,6 +405,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
|||||||
SensorPrivacyManager mSensorPrivacyManager;
|
SensorPrivacyManager mSensorPrivacyManager;
|
||||||
DisplayManager mDisplayManager;
|
DisplayManager mDisplayManager;
|
||||||
DisplayManagerInternal mDisplayManagerInternal;
|
DisplayManagerInternal mDisplayManagerInternal;
|
||||||
|
|
||||||
|
private WallpaperManagerInternal mWallpaperManagerInternal;
|
||||||
|
|
||||||
boolean mPreloadedRecentApps;
|
boolean mPreloadedRecentApps;
|
||||||
final Object mServiceAcquireLock = new Object();
|
final Object mServiceAcquireLock = new Object();
|
||||||
Vibrator mVibrator; // Vibrator for giving feedback of orientation changes
|
Vibrator mVibrator; // Vibrator for giving feedback of orientation changes
|
||||||
@@ -4823,11 +4827,34 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
|||||||
return bootCompleted ? mKeyguardDrawnTimeout : 5000;
|
return bootCompleted ? mKeyguardDrawnTimeout : 5000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private WallpaperManagerInternal getWallpaperManagerInternal() {
|
||||||
|
if (mWallpaperManagerInternal == null) {
|
||||||
|
mWallpaperManagerInternal = LocalServices.getService(WallpaperManagerInternal.class);
|
||||||
|
}
|
||||||
|
return mWallpaperManagerInternal;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void reportScreenTurningOnToWallpaper(int displayId) {
|
||||||
|
WallpaperManagerInternal wallpaperManagerInternal = getWallpaperManagerInternal();
|
||||||
|
if (wallpaperManagerInternal != null) {
|
||||||
|
wallpaperManagerInternal.onScreenTurningOn(displayId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void reportScreenTurnedOnToWallpaper(int displayId) {
|
||||||
|
WallpaperManagerInternal wallpaperManagerInternal = getWallpaperManagerInternal();
|
||||||
|
if (wallpaperManagerInternal != null) {
|
||||||
|
wallpaperManagerInternal.onScreenTurnedOn(displayId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Called on the DisplayManager's DisplayPowerController thread.
|
// Called on the DisplayManager's DisplayPowerController thread.
|
||||||
@Override
|
@Override
|
||||||
public void screenTurningOn(int displayId, final ScreenOnListener screenOnListener) {
|
public void screenTurningOn(int displayId, final ScreenOnListener screenOnListener) {
|
||||||
if (DEBUG_WAKEUP) Slog.i(TAG, "Display " + displayId + " turning on...");
|
if (DEBUG_WAKEUP) Slog.i(TAG, "Display " + displayId + " turning on...");
|
||||||
|
|
||||||
|
reportScreenTurningOnToWallpaper(displayId);
|
||||||
if (displayId == DEFAULT_DISPLAY) {
|
if (displayId == DEFAULT_DISPLAY) {
|
||||||
Trace.asyncTraceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "screenTurningOn",
|
Trace.asyncTraceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "screenTurningOn",
|
||||||
0 /* cookie */);
|
0 /* cookie */);
|
||||||
@@ -4868,6 +4895,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
|||||||
public void screenTurnedOn(int displayId) {
|
public void screenTurnedOn(int displayId) {
|
||||||
if (DEBUG_WAKEUP) Slog.i(TAG, "Display " + displayId + " turned on...");
|
if (DEBUG_WAKEUP) Slog.i(TAG, "Display " + displayId + " turned on...");
|
||||||
|
|
||||||
|
reportScreenTurnedOnToWallpaper(displayId);
|
||||||
|
|
||||||
if (displayId != DEFAULT_DISPLAY) {
|
if (displayId != DEFAULT_DISPLAY) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,4 +27,10 @@ public abstract class WallpaperManagerInternal {
|
|||||||
* Notifies the display is ready for adding wallpaper on it.
|
* Notifies the display is ready for adding wallpaper on it.
|
||||||
*/
|
*/
|
||||||
public abstract void onDisplayReady(int displayId);
|
public abstract void onDisplayReady(int displayId);
|
||||||
|
|
||||||
|
/** Notifies when the screen finished turning on and is visible to the user. */
|
||||||
|
public abstract void onScreenTurnedOn(int displayId);
|
||||||
|
|
||||||
|
/** Notifies when the screen starts turning on and is not yet visible to the user. */
|
||||||
|
public abstract void onScreenTurningOn(int displayId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1763,6 +1763,15 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
|
|||||||
public void onDisplayReady(int displayId) {
|
public void onDisplayReady(int displayId) {
|
||||||
onDisplayReadyInternal(displayId);
|
onDisplayReadyInternal(displayId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onScreenTurnedOn(int displayId) {
|
||||||
|
notifyScreenTurnedOn(displayId);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onScreenTurningOn(int displayId) {
|
||||||
|
notifyScreenTurningOn(displayId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void initialize() {
|
void initialize() {
|
||||||
@@ -2573,6 +2582,54 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Propagates screen turned on event to wallpaper engine.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void notifyScreenTurnedOn(int displayId) {
|
||||||
|
synchronized (mLock) {
|
||||||
|
final WallpaperData data = mWallpaperMap.get(mCurrentUserId);
|
||||||
|
if (data != null
|
||||||
|
&& data.connection != null
|
||||||
|
&& data.connection.containsDisplay(displayId)) {
|
||||||
|
final IWallpaperEngine engine = data.connection
|
||||||
|
.getDisplayConnectorOrCreate(displayId).mEngine;
|
||||||
|
if (engine != null) {
|
||||||
|
try {
|
||||||
|
engine.onScreenTurnedOn();
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Propagate screen turning on event to wallpaper engine.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void notifyScreenTurningOn(int displayId) {
|
||||||
|
synchronized (mLock) {
|
||||||
|
final WallpaperData data = mWallpaperMap.get(mCurrentUserId);
|
||||||
|
if (data != null
|
||||||
|
&& data.connection != null
|
||||||
|
&& data.connection.containsDisplay(displayId)) {
|
||||||
|
final IWallpaperEngine engine = data.connection
|
||||||
|
.getDisplayConnectorOrCreate(displayId).mEngine;
|
||||||
|
if (engine != null) {
|
||||||
|
try {
|
||||||
|
engine.onScreenTurningOn();
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean setLockWallpaperCallback(IWallpaperManagerCallback cb) {
|
public boolean setLockWallpaperCallback(IWallpaperManagerCallback cb) {
|
||||||
checkPermission(android.Manifest.permission.INTERNAL_SYSTEM_WINDOW);
|
checkPermission(android.Manifest.permission.INTERNAL_SYSTEM_WINDOW);
|
||||||
|
|||||||
Reference in New Issue
Block a user