Loading services/core/java/com/android/server/policy/PhoneWindowManager.java +0 −17 Original line number Diff line number Diff line Loading @@ -2301,13 +2301,6 @@ public class PhoneWindowManager implements WindowManagerPolicy { PhoneWindow win = new PhoneWindow(context); win.setIsStartingWindow(true); final TypedArray ta = win.getWindowStyle(); if (ta.getBoolean( com.android.internal.R.styleable.Window_windowDisablePreview, false) || ta.getBoolean( com.android.internal.R.styleable.Window_windowShowWallpaper,false)) { return null; } Resources r = context.getResources(); win.setTitle(r.getText(labelRes, nonLocalizedLabel)); Loading Loading @@ -2362,16 +2355,6 @@ public class PhoneWindowManager implements WindowManagerPolicy { wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE); view = win.getDecorView(); if (win.isFloating()) { // Whoops, there is no way to display an animation/preview // of such a thing! After all that work... let's skip it. // (Note that we must do this here because it is in // getDecorView() where the theme is evaluated... maybe // we should peek the floating attribute from the theme // earlier.) return null; } if (DEBUG_STARTING_WINDOW) Slog.d( TAG, "Adding starting window for " + packageName + " / " + appToken + ": " Loading services/core/java/com/android/server/wm/WindowManagerService.java +120 −115 Original line number Diff line number Diff line Loading @@ -3624,9 +3624,85 @@ public class WindowManagerService extends IWindowManager.Stub return; } if (transferFrom != null) { if (transferStartingWindow(transferFrom, wtoken)) { return; } // There is no existing starting window, and the caller doesn't // want us to create one, so that's it! if (!createIfNeeded) { return; } // If this is a translucent window, then don't // show a starting window -- the current effect (a full-screen // opaque starting window that fades away to the real contents // when it is ready) does not work for this. if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Checking theme of starting window: 0x" + Integer.toHexString(theme)); if (theme != 0) { AttributeCache.Entry ent = AttributeCache.instance().get(pkg, theme, com.android.internal.R.styleable.Window, mCurrentUserId); if (ent == null) { // Whoops! App doesn't exist. Um. Okay. We'll just // pretend like we didn't see that. return; } final boolean windowIsTranslucentDefined = ent.array.hasValue( com.android.internal.R.styleable.Window_windowIsTranslucent); final boolean windowIsTranslucent = ent.array.getBoolean( com.android.internal.R.styleable.Window_windowIsTranslucent, false); final boolean windowSwipeToDismiss = ent.array.getBoolean( com.android.internal.R.styleable.Window_windowSwipeToDismiss, false); final boolean windowIsFloating = ent.array.getBoolean( com.android.internal.R.styleable.Window_windowIsFloating, false); final boolean windowShowWallpaper = ent.array.getBoolean( com.android.internal.R.styleable.Window_windowShowWallpaper, false); final boolean windowDisableStarting = ent.array.getBoolean( com.android.internal.R.styleable.Window_windowDisablePreview, false); if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Translucent=" + windowIsTranslucent + " Floating=" + windowIsFloating + " ShowWallpaper=" + windowShowWallpaper); if (windowIsTranslucent || (!windowIsTranslucentDefined && windowSwipeToDismiss)) { return; } if (windowIsFloating || windowDisableStarting) { return; } if (windowShowWallpaper) { if (mWallpaperControllerLocked.getWallpaperTarget() == null) { // If this theme is requesting a wallpaper, and the wallpaper // is not curently visible, then this effectively serves as // an opaque window and our starting window transition animation // can still work. We just need to make sure the starting window // is also showing the wallpaper. windowFlags |= FLAG_SHOW_WALLPAPER; } else { return; } } } if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Creating StartingData"); wtoken.startingData = new StartingData(pkg, theme, compatInfo, nonLocalizedLabel, labelRes, icon, logo, windowFlags); Message m = mH.obtainMessage(H.ADD_STARTING, wtoken); // Note: we really want to do sendMessageAtFrontOfQueue() because we // want to process the message ASAP, before any other queued // messages. if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Enqueueing ADD_STARTING"); mH.sendMessageAtFrontOfQueue(m); } } private boolean transferStartingWindow(IBinder transferFrom, AppWindowToken wtoken) { if (transferFrom == null) { return false; } AppWindowToken ttoken = findAppWindowToken(transferFrom); if (ttoken != null) { if (ttoken == null) { return false; } WindowState startingWindow = ttoken.startingWindow; if (startingWindow != null) { // In this case, the starting icon has already been displayed, so start Loading Loading @@ -3693,12 +3769,11 @@ public class WindowManagerService extends IWindowManager.Stub getDefaultDisplayContentLocked().layoutNeeded = true; mWindowPlacerLocked.performSurfacePlacement(); Binder.restoreCallingIdentity(origId); return; return true; } else if (ttoken.startingData != null) { // The previous app was getting ready to show a // starting window, but hasn't yet done so. Steal it! if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Moving pending starting from " + ttoken if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Moving pending starting from " + ttoken + " to " + wtoken); wtoken.startingData = ttoken.startingData; ttoken.startingData = null; Loading @@ -3708,13 +3783,12 @@ public class WindowManagerService extends IWindowManager.Stub // want to process the message ASAP, before any other queued // messages. mH.sendMessageAtFrontOfQueue(m); return; return true; } final AppWindowAnimator tAppAnimator = ttoken.mAppAnimator; final AppWindowAnimator wAppAnimator = wtoken.mAppAnimator; if (tAppAnimator.thumbnail != null) { // The old token is animating with a thumbnail, transfer // that to the new token. // The old token is animating with a thumbnail, transfer that to the new token. if (wAppAnimator.thumbnail != null) { wAppAnimator.thumbnail.destroy(); } Loading @@ -3725,76 +3799,7 @@ public class WindowManagerService extends IWindowManager.Stub wAppAnimator.thumbnailAnimation = tAppAnimator.thumbnailAnimation; tAppAnimator.thumbnail = null; } } } // There is no existing starting window, and the caller doesn't // want us to create one, so that's it! if (!createIfNeeded) { return; } // If this is a translucent window, then don't // show a starting window -- the current effect (a full-screen // opaque starting window that fades away to the real contents // when it is ready) does not work for this. if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Checking theme of starting window: 0x" + Integer.toHexString(theme)); if (theme != 0) { AttributeCache.Entry ent = AttributeCache.instance().get(pkg, theme, com.android.internal.R.styleable.Window, mCurrentUserId); if (ent == null) { // Whoops! App doesn't exist. Um. Okay. We'll just // pretend like we didn't see that. return; } if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Translucent=" + ent.array.getBoolean( com.android.internal.R.styleable.Window_windowIsTranslucent, false) + " Floating=" + ent.array.getBoolean( com.android.internal.R.styleable.Window_windowIsFloating, false) + " ShowWallpaper=" + ent.array.getBoolean( com.android.internal.R.styleable.Window_windowShowWallpaper, false)); final boolean windowIsTranslucentDefined = ent.array.hasValue( com.android.internal.R.styleable.Window_windowIsTranslucent); final boolean windowIsTranslucent = ent.array.getBoolean( com.android.internal.R.styleable.Window_windowIsTranslucent, false); final boolean windowSwipeToDismiss = ent.array.getBoolean( com.android.internal.R.styleable.Window_windowSwipeToDismiss, false); if (windowIsTranslucent || (!windowIsTranslucentDefined && windowSwipeToDismiss)) { return; } if (ent.array.getBoolean( com.android.internal.R.styleable.Window_windowIsFloating, false)) { return; } if (ent.array.getBoolean( com.android.internal.R.styleable.Window_windowShowWallpaper, false)) { if (mWallpaperControllerLocked.getWallpaperTarget() == null) { // If this theme is requesting a wallpaper, and the wallpaper // is not curently visible, then this effectively serves as // an opaque window and our starting window transition animation // can still work. We just need to make sure the starting window // is also showing the wallpaper. windowFlags |= FLAG_SHOW_WALLPAPER; } else { return; } } } if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Creating StartingData"); wtoken.startingData = new StartingData(pkg, theme, compatInfo, nonLocalizedLabel, labelRes, icon, logo, windowFlags); Message m = mH.obtainMessage(H.ADD_STARTING, wtoken); // Note: we really want to do sendMessageAtFrontOfQueue() because we // want to process the message ASAP, before any other queued // messages. if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Enqueueing ADD_STARTING"); mH.sendMessageAtFrontOfQueue(m); } return false; } public void removeAppStartingWindow(IBinder token) { Loading Loading
services/core/java/com/android/server/policy/PhoneWindowManager.java +0 −17 Original line number Diff line number Diff line Loading @@ -2301,13 +2301,6 @@ public class PhoneWindowManager implements WindowManagerPolicy { PhoneWindow win = new PhoneWindow(context); win.setIsStartingWindow(true); final TypedArray ta = win.getWindowStyle(); if (ta.getBoolean( com.android.internal.R.styleable.Window_windowDisablePreview, false) || ta.getBoolean( com.android.internal.R.styleable.Window_windowShowWallpaper,false)) { return null; } Resources r = context.getResources(); win.setTitle(r.getText(labelRes, nonLocalizedLabel)); Loading Loading @@ -2362,16 +2355,6 @@ public class PhoneWindowManager implements WindowManagerPolicy { wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE); view = win.getDecorView(); if (win.isFloating()) { // Whoops, there is no way to display an animation/preview // of such a thing! After all that work... let's skip it. // (Note that we must do this here because it is in // getDecorView() where the theme is evaluated... maybe // we should peek the floating attribute from the theme // earlier.) return null; } if (DEBUG_STARTING_WINDOW) Slog.d( TAG, "Adding starting window for " + packageName + " / " + appToken + ": " Loading
services/core/java/com/android/server/wm/WindowManagerService.java +120 −115 Original line number Diff line number Diff line Loading @@ -3624,9 +3624,85 @@ public class WindowManagerService extends IWindowManager.Stub return; } if (transferFrom != null) { if (transferStartingWindow(transferFrom, wtoken)) { return; } // There is no existing starting window, and the caller doesn't // want us to create one, so that's it! if (!createIfNeeded) { return; } // If this is a translucent window, then don't // show a starting window -- the current effect (a full-screen // opaque starting window that fades away to the real contents // when it is ready) does not work for this. if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Checking theme of starting window: 0x" + Integer.toHexString(theme)); if (theme != 0) { AttributeCache.Entry ent = AttributeCache.instance().get(pkg, theme, com.android.internal.R.styleable.Window, mCurrentUserId); if (ent == null) { // Whoops! App doesn't exist. Um. Okay. We'll just // pretend like we didn't see that. return; } final boolean windowIsTranslucentDefined = ent.array.hasValue( com.android.internal.R.styleable.Window_windowIsTranslucent); final boolean windowIsTranslucent = ent.array.getBoolean( com.android.internal.R.styleable.Window_windowIsTranslucent, false); final boolean windowSwipeToDismiss = ent.array.getBoolean( com.android.internal.R.styleable.Window_windowSwipeToDismiss, false); final boolean windowIsFloating = ent.array.getBoolean( com.android.internal.R.styleable.Window_windowIsFloating, false); final boolean windowShowWallpaper = ent.array.getBoolean( com.android.internal.R.styleable.Window_windowShowWallpaper, false); final boolean windowDisableStarting = ent.array.getBoolean( com.android.internal.R.styleable.Window_windowDisablePreview, false); if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Translucent=" + windowIsTranslucent + " Floating=" + windowIsFloating + " ShowWallpaper=" + windowShowWallpaper); if (windowIsTranslucent || (!windowIsTranslucentDefined && windowSwipeToDismiss)) { return; } if (windowIsFloating || windowDisableStarting) { return; } if (windowShowWallpaper) { if (mWallpaperControllerLocked.getWallpaperTarget() == null) { // If this theme is requesting a wallpaper, and the wallpaper // is not curently visible, then this effectively serves as // an opaque window and our starting window transition animation // can still work. We just need to make sure the starting window // is also showing the wallpaper. windowFlags |= FLAG_SHOW_WALLPAPER; } else { return; } } } if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Creating StartingData"); wtoken.startingData = new StartingData(pkg, theme, compatInfo, nonLocalizedLabel, labelRes, icon, logo, windowFlags); Message m = mH.obtainMessage(H.ADD_STARTING, wtoken); // Note: we really want to do sendMessageAtFrontOfQueue() because we // want to process the message ASAP, before any other queued // messages. if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Enqueueing ADD_STARTING"); mH.sendMessageAtFrontOfQueue(m); } } private boolean transferStartingWindow(IBinder transferFrom, AppWindowToken wtoken) { if (transferFrom == null) { return false; } AppWindowToken ttoken = findAppWindowToken(transferFrom); if (ttoken != null) { if (ttoken == null) { return false; } WindowState startingWindow = ttoken.startingWindow; if (startingWindow != null) { // In this case, the starting icon has already been displayed, so start Loading Loading @@ -3693,12 +3769,11 @@ public class WindowManagerService extends IWindowManager.Stub getDefaultDisplayContentLocked().layoutNeeded = true; mWindowPlacerLocked.performSurfacePlacement(); Binder.restoreCallingIdentity(origId); return; return true; } else if (ttoken.startingData != null) { // The previous app was getting ready to show a // starting window, but hasn't yet done so. Steal it! if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Moving pending starting from " + ttoken if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Moving pending starting from " + ttoken + " to " + wtoken); wtoken.startingData = ttoken.startingData; ttoken.startingData = null; Loading @@ -3708,13 +3783,12 @@ public class WindowManagerService extends IWindowManager.Stub // want to process the message ASAP, before any other queued // messages. mH.sendMessageAtFrontOfQueue(m); return; return true; } final AppWindowAnimator tAppAnimator = ttoken.mAppAnimator; final AppWindowAnimator wAppAnimator = wtoken.mAppAnimator; if (tAppAnimator.thumbnail != null) { // The old token is animating with a thumbnail, transfer // that to the new token. // The old token is animating with a thumbnail, transfer that to the new token. if (wAppAnimator.thumbnail != null) { wAppAnimator.thumbnail.destroy(); } Loading @@ -3725,76 +3799,7 @@ public class WindowManagerService extends IWindowManager.Stub wAppAnimator.thumbnailAnimation = tAppAnimator.thumbnailAnimation; tAppAnimator.thumbnail = null; } } } // There is no existing starting window, and the caller doesn't // want us to create one, so that's it! if (!createIfNeeded) { return; } // If this is a translucent window, then don't // show a starting window -- the current effect (a full-screen // opaque starting window that fades away to the real contents // when it is ready) does not work for this. if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Checking theme of starting window: 0x" + Integer.toHexString(theme)); if (theme != 0) { AttributeCache.Entry ent = AttributeCache.instance().get(pkg, theme, com.android.internal.R.styleable.Window, mCurrentUserId); if (ent == null) { // Whoops! App doesn't exist. Um. Okay. We'll just // pretend like we didn't see that. return; } if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Translucent=" + ent.array.getBoolean( com.android.internal.R.styleable.Window_windowIsTranslucent, false) + " Floating=" + ent.array.getBoolean( com.android.internal.R.styleable.Window_windowIsFloating, false) + " ShowWallpaper=" + ent.array.getBoolean( com.android.internal.R.styleable.Window_windowShowWallpaper, false)); final boolean windowIsTranslucentDefined = ent.array.hasValue( com.android.internal.R.styleable.Window_windowIsTranslucent); final boolean windowIsTranslucent = ent.array.getBoolean( com.android.internal.R.styleable.Window_windowIsTranslucent, false); final boolean windowSwipeToDismiss = ent.array.getBoolean( com.android.internal.R.styleable.Window_windowSwipeToDismiss, false); if (windowIsTranslucent || (!windowIsTranslucentDefined && windowSwipeToDismiss)) { return; } if (ent.array.getBoolean( com.android.internal.R.styleable.Window_windowIsFloating, false)) { return; } if (ent.array.getBoolean( com.android.internal.R.styleable.Window_windowShowWallpaper, false)) { if (mWallpaperControllerLocked.getWallpaperTarget() == null) { // If this theme is requesting a wallpaper, and the wallpaper // is not curently visible, then this effectively serves as // an opaque window and our starting window transition animation // can still work. We just need to make sure the starting window // is also showing the wallpaper. windowFlags |= FLAG_SHOW_WALLPAPER; } else { return; } } } if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Creating StartingData"); wtoken.startingData = new StartingData(pkg, theme, compatInfo, nonLocalizedLabel, labelRes, icon, logo, windowFlags); Message m = mH.obtainMessage(H.ADD_STARTING, wtoken); // Note: we really want to do sendMessageAtFrontOfQueue() because we // want to process the message ASAP, before any other queued // messages. if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Enqueueing ADD_STARTING"); mH.sendMessageAtFrontOfQueue(m); } return false; } public void removeAppStartingWindow(IBinder token) { Loading