diff options
Diffstat (limited to 'services/java/com/android/server')
9 files changed, 267 insertions, 83 deletions
diff --git a/services/java/com/android/server/BluetoothManagerService.java b/services/java/com/android/server/BluetoothManagerService.java index 6ff33d7..69ccbc7 100755 --- a/services/java/com/android/server/BluetoothManagerService.java +++ b/services/java/com/android/server/BluetoothManagerService.java @@ -53,6 +53,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub { private static final String BLUETOOTH_PERM = android.Manifest.permission.BLUETOOTH; private static final String ACTION_SERVICE_STATE_CHANGED="com.android.bluetooth.btservice.action.STATE_CHANGED"; private static final String EXTRA_ACTION="action"; + private static final String SECURE_SETTINGS_BLUETOOTH_ADDR_VALID="bluetooth_addr_valid"; private static final String SECURE_SETTINGS_BLUETOOTH_ADDRESS="bluetooth_address"; private static final String SECURE_SETTINGS_BLUETOOTH_NAME="bluetooth_name"; private static final int TIMEOUT_BIND_MS = 3000; //Maximum msec to wait for a bind @@ -174,7 +175,9 @@ class BluetoothManagerService extends IBluetoothManager.Stub { //Enable if (DBG) Log.d(TAG, "Auto-enabling Bluetooth."); enableHelper(); - } else if (!isNameAndAddressSet()) { + } + + if (!isNameAndAddressSet()) { //Sync the Bluetooth name and address from the Bluetooth Adapter if (DBG) Log.d(TAG,"Retrieving Bluetooth Adapter name and address..."); getNameAndAddress(); @@ -222,11 +225,16 @@ class BluetoothManagerService extends IBluetoothManager.Stub { */ private void loadStoredNameAndAddress() { if (DBG) Log.d(TAG, "Loading stored name and address"); + if (mContext.getResources().getBoolean + (com.android.internal.R.bool.config_bluetooth_address_validation) && + Settings.Secure.getInt(mContentResolver, SECURE_SETTINGS_BLUETOOTH_ADDR_VALID, 0) == 0) { + // if the valid flag is not set, don't load the address and name + if (DBG) Log.d(TAG, "invalid bluetooth name and address stored"); + return; + } mName = Settings.Secure.getString(mContentResolver, SECURE_SETTINGS_BLUETOOTH_NAME); mAddress = Settings.Secure.getString(mContentResolver, SECURE_SETTINGS_BLUETOOTH_ADDRESS); - if (mName == null || mAddress == null) { - if (DBG) Log.d(TAG, "Name or address not cached..."); - } + if (DBG) Log.d(TAG, "Stored bluetooth Name=" + mName + ",Address=" + mAddress); } /** @@ -249,6 +257,10 @@ class BluetoothManagerService extends IBluetoothManager.Stub { if (DBG) Log.d(TAG,"Stored Bluetoothaddress: " + Settings.Secure.getString(mContentResolver,SECURE_SETTINGS_BLUETOOTH_ADDRESS)); } + + if ((name != null) && (address != null)) { + Settings.Secure.putInt(mContentResolver, SECURE_SETTINGS_BLUETOOTH_ADDR_VALID, 1); + } } public IBluetooth registerAdapter(IBluetoothManagerCallback callback){ @@ -560,8 +572,19 @@ class BluetoothManagerService extends IBluetoothManager.Stub { break; } case MESSAGE_SAVE_NAME_AND_ADDRESS: { + boolean unbind = false; if (DBG) Log.d(TAG,"MESSAGE_SAVE_NAME_AND_ADDRESS"); synchronized(mConnection) { + if (!mEnable && mBluetooth != null) { + try { + mBluetooth.enable(); + } catch (RemoteException e) { + Log.e(TAG,"Unable to call enable()",e); + } + } + } + if (mBluetooth != null) waitForOnOff(true, false); + synchronized(mConnection) { if (mBluetooth != null) { String name = null; String address = null; @@ -575,7 +598,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub { if (name != null && address != null) { storeNameAndAddress(name,address); if (mConnection.isGetNameAddressOnly()) { - unbindAndFinish(); + unbind = true; } } else { if (msg.arg1 < MAX_SAVE_RETRIES) { @@ -586,10 +609,17 @@ class BluetoothManagerService extends IBluetoothManager.Stub { } else { Log.w(TAG,"Maximum name/address remote retrieval retry exceeded"); if (mConnection.isGetNameAddressOnly()) { - unbindAndFinish(); + unbind = true; } } } + if (!mEnable) { + try { + mBluetooth.disable(); + } catch (RemoteException e) { + Log.e(TAG,"Unable to call disable()",e); + } + } } else { // rebind service by Request GET NAME AND ADDRESS // if service is unbinded by disable or @@ -598,6 +628,10 @@ class BluetoothManagerService extends IBluetoothManager.Stub { mHandler.sendMessage(getMsg); } } + if (!mEnable && mBluetooth != null) waitForOnOff(false, true); + if (unbind) { + unbindAndFinish(); + } break; } case MESSAGE_ENABLE: @@ -677,14 +711,6 @@ class BluetoothManagerService extends IBluetoothManager.Stub { //Inform BluetoothAdapter instances that service is up sendBluetoothServiceUpCallback(); - //Check if name and address is loaded if not get it first. - if (!isNameAndAddressSet()) { - try { - storeNameAndAddress(mBluetooth.getName(), - mBluetooth.getAddress()); - } catch (RemoteException e) {Log.e(TAG, "", e);}; - } - //Do enable request try { if (mQuietEnable == false) { @@ -873,14 +899,6 @@ class BluetoothManagerService extends IBluetoothManager.Stub { sendBluetoothServiceUpCallback(); } - //Check if name and address is loaded if not get it first. - if (!isNameAndAddressSet()) { - try { - if (DBG) Log.d(TAG,"Getting and storing Bluetooth name and address prior to enable."); - storeNameAndAddress(mBluetooth.getName(),mBluetooth.getAddress()); - } catch (RemoteException e) {Log.e(TAG, "", e);}; - } - //Enable bluetooth try { if (!mQuietEnable) { diff --git a/services/java/com/android/server/NotificationManagerService.java b/services/java/com/android/server/NotificationManagerService.java index 4a54efe..0e171cd 100755 --- a/services/java/com/android/server/NotificationManagerService.java +++ b/services/java/com/android/server/NotificationManagerService.java @@ -889,7 +889,7 @@ public class NotificationManagerService extends INotificationManager.Stub final boolean isSystemNotification = ("android".equals(pkg)); userId = ActivityManager.handleIncomingUser(callingPid, - callingUid, userId, true, true, "enqueueNotification", pkg); + callingUid, userId, true, false, "enqueueNotification", pkg); final UserHandle user = new UserHandle(userId); // Limit the number of notifications that any given package except the android @@ -1287,7 +1287,7 @@ public class NotificationManagerService extends INotificationManager.Stub public void cancelNotificationWithTag(String pkg, String tag, int id, int userId) { checkCallerIsSystemOrSameApp(pkg); userId = ActivityManager.handleIncomingUser(Binder.getCallingPid(), - Binder.getCallingUid(), userId, true, true, "cancelNotificationWithTag", pkg); + Binder.getCallingUid(), userId, true, false, "cancelNotificationWithTag", pkg); // Don't allow client applications to cancel foreground service notis. cancelNotification(pkg, tag, id, 0, Binder.getCallingUid() == Process.SYSTEM_UID @@ -1298,7 +1298,7 @@ public class NotificationManagerService extends INotificationManager.Stub checkCallerIsSystemOrSameApp(pkg); userId = ActivityManager.handleIncomingUser(Binder.getCallingPid(), - Binder.getCallingUid(), userId, true, true, "cancelAllNotifications", pkg); + Binder.getCallingUid(), userId, true, false, "cancelAllNotifications", pkg); // Calling from user space, don't allow the canceling of actively // running foreground services. diff --git a/services/java/com/android/server/WallpaperManagerService.java b/services/java/com/android/server/WallpaperManagerService.java index a02fc8d..82dbf54 100644 --- a/services/java/com/android/server/WallpaperManagerService.java +++ b/services/java/com/android/server/WallpaperManagerService.java @@ -466,10 +466,13 @@ class WallpaperManagerService extends IWallpaperManager.Stub { if (Intent.ACTION_USER_REMOVED.equals(action)) { onRemoveUser(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL)); - } else if (Intent.ACTION_USER_STOPPING.equals(action)) { - onStoppingUser(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, - UserHandle.USER_NULL)); } + // TODO: Race condition causing problems when cleaning up on stopping a user. + // Comment this out for now. + // else if (Intent.ACTION_USER_STOPPING.equals(action)) { + // onStoppingUser(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, + // UserHandle.USER_NULL)); + // } } }, userFilter); diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index 5722326..d2cd646 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -4575,7 +4575,7 @@ public final class ActivityManagerService extends ActivityManagerNative int callingUid = Binder.getCallingUid(); int origUserId = userId; userId = handleIncomingUser(Binder.getCallingPid(), callingUid, userId, - type == ActivityManager.INTENT_SENDER_BROADCAST, true, + type == ActivityManager.INTENT_SENDER_BROADCAST, false, "getIntentSender", null); if (origUserId == UserHandle.USER_CURRENT) { // We don't want to evaluate this until the pending intent is diff --git a/services/java/com/android/server/wm/AppWindowAnimator.java b/services/java/com/android/server/wm/AppWindowAnimator.java index 2445b98..ca94d04 100644 --- a/services/java/com/android/server/wm/AppWindowAnimator.java +++ b/services/java/com/android/server/wm/AppWindowAnimator.java @@ -279,22 +279,22 @@ public class AppWindowAnimator { return isAnimating; } - void dump(PrintWriter pw, String prefix) { - if (freezingScreen) { - pw.print(prefix); pw.print(" freezingScreen="); pw.println(freezingScreen); - } + void dump(PrintWriter pw, String prefix, boolean dumpAll) { + pw.print(prefix); pw.print("mAppToken="); pw.println(mAppToken); + pw.print(prefix); pw.print("mAnimator="); pw.println(mAnimator); + pw.print(prefix); pw.print("freezingScreen="); pw.print(freezingScreen); + pw.print(" allDrawn="); pw.print(allDrawn); + pw.print(" animLayerAdjustment="); pw.println(animLayerAdjustment); if (animating || animation != null) { pw.print(prefix); pw.print("animating="); pw.print(animating); - pw.print(" animation="); pw.println(animation); + pw.print(" animInitialized="); pw.println(animInitialized); + pw.print(prefix); pw.print("animation="); pw.println(animation); } if (hasTransformation) { pw.print(prefix); pw.print("XForm: "); transformation.printShortString(pw); pw.println(); } - if (animLayerAdjustment != 0) { - pw.print(prefix); pw.print("animLayerAdjustment="); pw.println(animLayerAdjustment); - } if (thumbnail != null) { pw.print(prefix); pw.print("thumbnail="); pw.print(thumbnail); pw.print(" x="); pw.print(thumbnailX); @@ -304,6 +304,11 @@ public class AppWindowAnimator { pw.print(prefix); pw.print("thumbnailTransformation="); pw.println(thumbnailTransformation.toShortString()); } + for (int i=0; i<mAllAppWinAnimators.size(); i++) { + WindowStateAnimator wanim = mAllAppWinAnimators.get(i); + pw.print(prefix); pw.print("App Win Anim #"); pw.print(i); + pw.print(": "); pw.println(wanim); + } } // This is an animation that does nothing: it just immediately finishes diff --git a/services/java/com/android/server/wm/WindowAnimator.java b/services/java/com/android/server/wm/WindowAnimator.java index 9a62482..c8d9cc3 100644 --- a/services/java/com/android/server/wm/WindowAnimator.java +++ b/services/java/com/android/server/wm/WindowAnimator.java @@ -18,12 +18,14 @@ import android.util.Log; import android.util.Slog; import android.util.SparseArray; import android.util.SparseIntArray; +import android.util.TimeUtils; import android.view.Display; import android.view.Surface; import android.view.WindowManagerPolicy; import android.view.animation.Animation; import com.android.server.wm.WindowManagerService.AppWindowAnimParams; +import com.android.server.wm.WindowManagerService.LayoutFields; import com.android.server.wm.WindowManagerService.LayoutToAnimatorParams; import java.io.PrintWriter; @@ -197,6 +199,15 @@ public class WindowAnimator { mWallpaperTokens = new ArrayList<WindowToken>(layoutToAnim.mWallpaperTokens); } + if (WindowManagerService.DEBUG_WALLPAPER_LIGHT) { + if (mWallpaperTarget != layoutToAnim.mWallpaperTarget + || mLowerWallpaperTarget != layoutToAnim.mLowerWallpaperTarget + || mUpperWallpaperTarget != layoutToAnim.mUpperWallpaperTarget) { + Slog.d(TAG, "Updating anim wallpaper: target=" + mWallpaperTarget + + " lower=" + mLowerWallpaperTarget + " upper=" + + mUpperWallpaperTarget); + } + } mWallpaperTarget = layoutToAnim.mWallpaperTarget; mWpAppAnimator = mWallpaperTarget == null ? null : mWallpaperTarget.mAppToken == null @@ -735,46 +746,144 @@ public class WindowAnimator { return dimParams != null && dimParams.mDimWinAnimator == winAnimator; } + static String bulkUpdateParamsToString(int bulkUpdateParams) { + StringBuilder builder = new StringBuilder(128); + if ((bulkUpdateParams & LayoutFields.SET_UPDATE_ROTATION) != 0) { + builder.append(" UPDATE_ROTATION"); + } + if ((bulkUpdateParams & LayoutFields.SET_WALLPAPER_MAY_CHANGE) != 0) { + builder.append(" WALLPAPER_MAY_CHANGE"); + } + if ((bulkUpdateParams & LayoutFields.SET_FORCE_HIDING_CHANGED) != 0) { + builder.append(" FORCE_HIDING_CHANGED"); + } + if ((bulkUpdateParams & LayoutFields.SET_ORIENTATION_CHANGE_COMPLETE) != 0) { + builder.append(" ORIENTATION_CHANGE_COMPLETE"); + } + if ((bulkUpdateParams & LayoutFields.SET_TURN_ON_SCREEN) != 0) { + builder.append(" TURN_ON_SCREEN"); + } + return builder.toString(); + } + public void dumpLocked(PrintWriter pw, String prefix, boolean dumpAll) { - if (dumpAll) { - if (mWindowDetachedWallpaper != null) { - pw.print(prefix); pw.print("mWindowDetachedWallpaper="); - pw.println(mWindowDetachedWallpaper); - } - pw.print(prefix); pw.print("mAnimTransactionSequence="); - pw.print(mAnimTransactionSequence); - pw.println(" mForceHiding=" + forceHidingToString()); - for (int i = 0; i < mDisplayContentsAnimators.size(); i++) { - pw.print(prefix); pw.print("DisplayContentsAnimator #"); - pw.println(mDisplayContentsAnimators.keyAt(i)); - DisplayContentsAnimator displayAnimator = mDisplayContentsAnimators.valueAt(i); - final String subPrefix = " " + prefix; - final String subSubPrefix = " " + subPrefix; - if (displayAnimator.mWindowAnimationBackgroundSurface != null) { - pw.println(subPrefix + "mWindowAnimationBackgroundSurface:"); - displayAnimator.mWindowAnimationBackgroundSurface.printTo(subSubPrefix, pw); - } - if (displayAnimator.mDimAnimator != null) { - pw.println(subPrefix + "mDimAnimator:"); - displayAnimator.mDimAnimator.printTo(subSubPrefix, pw); - } else { - pw.println(subPrefix + "no DimAnimator "); - } - if (displayAnimator.mDimParams != null) { - pw.println(subPrefix + "mDimParams:"); - displayAnimator.mDimParams.printTo(subSubPrefix, pw); + final String subPrefix = " " + prefix; + final String subSubPrefix = " " + subPrefix; + + boolean needSep = false; + if (mAppAnimators.size() > 0) { + needSep = true; + pw.println(" App Animators:"); + for (int i=mAppAnimators.size()-1; i>=0; i--) { + AppWindowAnimator anim = mAppAnimators.get(i); + pw.print(prefix); pw.print("App Animator #"); pw.print(i); + pw.print(' '); pw.print(anim); + if (dumpAll) { + pw.println(':'); + anim.dump(pw, subPrefix, dumpAll); } else { - pw.println(subPrefix + "no DimParams "); + pw.println(); } - if (displayAnimator.mScreenRotationAnimation != null) { - pw.println(subPrefix + "mScreenRotationAnimation:"); - displayAnimator.mScreenRotationAnimation.printTo(subSubPrefix, pw); + } + } + if (mWallpaperTokens.size() > 0) { + if (needSep) { + pw.println(); + } + needSep = true; + pw.print(prefix); pw.println("Wallpaper tokens:"); + for (int i=mWallpaperTokens.size()-1; i>=0; i--) { + WindowToken token = mWallpaperTokens.get(i); + pw.print(prefix); pw.print("Wallpaper #"); pw.print(i); + pw.print(' '); pw.print(token); + if (dumpAll) { + pw.println(':'); + token.dump(pw, subPrefix); } else { - pw.print(subPrefix + "no ScreenRotationAnimation "); + pw.println(); } } + } + + if (needSep) { pw.println(); } + for (int i = 0; i < mDisplayContentsAnimators.size(); i++) { + pw.print(prefix); pw.print("DisplayContentsAnimator #"); + pw.print(mDisplayContentsAnimators.keyAt(i)); + pw.println(":"); + DisplayContentsAnimator displayAnimator = mDisplayContentsAnimators.valueAt(i); + for (int j=0; j<displayAnimator.mWinAnimators.size(); j++) { + WindowStateAnimator wanim = displayAnimator.mWinAnimators.get(j); + pw.print(subPrefix); pw.print("Window #"); pw.print(j); + pw.print(": "); pw.println(wanim); + } + if (displayAnimator.mWindowAnimationBackgroundSurface != null) { + if (dumpAll || displayAnimator.mWindowAnimationBackgroundSurface.mDimShown) { + pw.print(subPrefix); pw.println("mWindowAnimationBackgroundSurface:"); + displayAnimator.mWindowAnimationBackgroundSurface.printTo(subSubPrefix, pw); + } + } + if (displayAnimator.mDimAnimator != null) { + if (dumpAll || displayAnimator.mDimAnimator.mDimShown) { + pw.print(subPrefix); pw.println("mDimAnimator:"); + displayAnimator.mDimAnimator.printTo(subSubPrefix, pw); + } + } else if (dumpAll) { + pw.print(subPrefix); pw.println("no DimAnimator "); + } + if (displayAnimator.mDimParams != null) { + pw.print(subPrefix); pw.println("mDimParams:"); + displayAnimator.mDimParams.printTo(subSubPrefix, pw); + } else if (dumpAll) { + pw.print(subPrefix); pw.println("no DimParams "); + } + if (displayAnimator.mScreenRotationAnimation != null) { + pw.print(subPrefix); pw.println("mScreenRotationAnimation:"); + displayAnimator.mScreenRotationAnimation.printTo(subSubPrefix, pw); + } else if (dumpAll) { + pw.print(subPrefix); pw.println("no ScreenRotationAnimation "); + } + } + + pw.println(); + + if (dumpAll) { + pw.print(prefix); pw.print("mAnimTransactionSequence="); + pw.print(mAnimTransactionSequence); + pw.print(" mForceHiding="); pw.println(forceHidingToString()); + pw.print(prefix); pw.print("mCurrentTime="); + pw.println(TimeUtils.formatUptime(mCurrentTime)); + pw.print(prefix); pw.print("mDw="); + pw.print(mDw); pw.print(" mDh="); pw.print(mDh); + pw.print(" mInnerDw="); pw.print(mInnerDw); + pw.print(" mInnerDh="); pw.println(mInnerDh); + } + if (mBulkUpdateParams != 0) { + pw.print(prefix); pw.print("mBulkUpdateParams=0x"); + pw.print(Integer.toHexString(mBulkUpdateParams)); + pw.println(bulkUpdateParamsToString(mBulkUpdateParams)); + } + if (mPendingActions != 0) { + pw.print(prefix); pw.print("mPendingActions=0x"); + pw.println(Integer.toHexString(mPendingActions)); + } + if (mWindowDetachedWallpaper != null) { + pw.print(prefix); pw.print("mWindowDetachedWallpaper="); + pw.println(mWindowDetachedWallpaper); + } + pw.print(prefix); pw.print("mWallpaperTarget="); pw.println(mWallpaperTarget); + pw.print(prefix); pw.print("mWpAppAnimator="); pw.println(mWpAppAnimator); + if (mLowerWallpaperTarget != null || mUpperWallpaperTarget != null) { + pw.print(prefix); pw.print("mLowerWallpaperTarget="); + pw.println(mLowerWallpaperTarget); + pw.print(prefix); pw.print("mUpperWallpaperTarget="); + pw.println(mUpperWallpaperTarget); + } + if (mUniverseBackground != null) { + pw.print(prefix); pw.print("mUniverseBackground="); pw.print(mUniverseBackground); + pw.print(" mAboveUniverseLayer="); pw.println(mAboveUniverseLayer); + } } void clearPendingActions() { diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index 637f2de..137c8ee 100755 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -2773,7 +2773,7 @@ public class WindowManagerService extends IWindowManager.Stub // TODO: Remove once b/7094175 is fixed || ((String)win.mAttrs.getTitle()).contains("Keyguard") ) Slog.v(TAG, "Relayout " + win + ": viewVisibility=" + viewVisibility - + " " + requestedWidth + "x" + requestedHeight + " " + win.mAttrs); + + " req=" + requestedWidth + "x" + requestedHeight + " " + win.mAttrs); win.mEnforceSizeCompat = (win.mAttrs.flags & FLAG_COMPATIBLE_WINDOW) != 0; @@ -3003,6 +3003,10 @@ public class WindowManagerService extends IWindowManager.Stub } mInputMonitor.updateInputWindowsLw(true /*force*/); + + if (DEBUG_LAYOUT) { + Slog.v(TAG, "Relayout complete " + win + ": outFrame=" + outFrame.toShortString()); + } } if (configChanged) { @@ -8379,7 +8383,8 @@ public class WindowManagerService extends IWindowManager.Stub // windows, since that means "perform layout as normal, // just don't display"). if (!gone || !win.mHaveFrame || win.mLayoutNeeded - || win.isConfigChanged() + || ((win.mAttrs.type == TYPE_KEYGUARD || win.mAttrs.type == TYPE_WALLPAPER) && + win.isConfigChanged()) || win.mAttrs.type == TYPE_UNIVERSE_BACKGROUND) { if (!win.mLayoutAttached) { if (initial) { @@ -9301,6 +9306,8 @@ public class WindowManagerService extends IWindowManager.Stub Log.wtf(TAG, "Unhandled exception in Window Manager", e); } finally { Surface.closeTransaction(); + if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG, + "<<< CLOSE TRANSACTION performLayoutAndPlaceSurfaces"); } final WindowList defaultWindows = defaultDisplay.getWindowList(); @@ -10322,6 +10329,11 @@ public class WindowManagerService extends IWindowManager.Stub mPolicy.dump(" ", pw, args); } + void dumpAnimatorLocked(PrintWriter pw, String[] args, boolean dumpAll) { + pw.println("WINDOW MANAGER ANIMATOR STATE (dumpsys window animator)"); + mAnimator.dumpLocked(pw, " ", dumpAll); + } + void dumpTokensLocked(PrintWriter pw, boolean dumpAll) { pw.println("WINDOW MANAGER TOKENS (dumpsys window tokens)"); if (mTokenMap.size() > 0) { @@ -10598,7 +10610,7 @@ public class WindowManagerService extends IWindowManager.Stub pw.print(" mInputMethodWindow="); pw.println(mInputMethodWindow); } pw.print(" mWallpaperTarget="); pw.println(mWallpaperTarget); - if (mLowerWallpaperTarget != null && mUpperWallpaperTarget != null) { + if (mLowerWallpaperTarget != null || mUpperWallpaperTarget != null) { pw.print(" mLowerWallpaperTarget="); pw.println(mLowerWallpaperTarget); pw.print(" mUpperWallpaperTarget="); pw.println(mUpperWallpaperTarget); } @@ -10682,8 +10694,32 @@ public class WindowManagerService extends IWindowManager.Stub } pw.print(" mStartingIconInTransition="); pw.print(mStartingIconInTransition); pw.print(" mSkipAppTransitionAnimation="); pw.println(mSkipAppTransitionAnimation); - pw.println(" Window Animator:"); - mAnimator.dumpLocked(pw, " ", dumpAll); + pw.println(" mLayoutToAnim:"); + pw.print(" mParamsModified="); pw.print(mLayoutToAnim.mParamsModified); + pw.print(" mAnimationScheduled="); pw.print(mLayoutToAnim.mAnimationScheduled); + pw.print(" mChanges=0x"); + pw.println(Long.toHexString(mLayoutToAnim.mChanges)); + pw.print(" mWallpaperTarget="); pw.println(mLayoutToAnim.mWallpaperTarget); + if (mLayoutToAnim.mLowerWallpaperTarget != null + || mLayoutToAnim.mUpperWallpaperTarget != null) { + pw.print(" mLowerWallpaperTarget="); + pw.println(mLayoutToAnim.mLowerWallpaperTarget); + pw.print(" mUpperWallpaperTarget="); + pw.println(mLayoutToAnim.mUpperWallpaperTarget); + } + for (int i=0; i<mLayoutToAnim.mWinAnimatorLists.size(); i++) { + pw.print(" Win Animator List #"); + pw.print(mLayoutToAnim.mWinAnimatorLists.keyAt(i)); pw.println(":"); + WinAnimatorList wanim = mLayoutToAnim.mWinAnimatorLists.valueAt(i); + for (int wi=0; wi<wanim.size(); wi++) { + pw.print(" "); pw.println(wanim.get(wi)); + } + } + for (int i=0; i<mLayoutToAnim.mWallpaperTokens.size(); i++) { + pw.print(" Wallpaper Token #"); pw.print(i); pw.print(": "); + pw.println(mLayoutToAnim.mWallpaperTokens.get(i)); + } + // XXX also need to print mDimParams and mAppWindowAnimParams. I am lazy. } } @@ -10793,6 +10829,7 @@ public class WindowManagerService extends IWindowManager.Stub pw.println(" cmd may be one of:"); pw.println(" l[astanr]: last ANR information"); pw.println(" p[policy]: policy state"); + pw.println(" a[animator]: animator state"); pw.println(" s[essions]: active sessions"); pw.println(" t[okens]: token list"); pw.println(" w[indows]: window list"); @@ -10822,6 +10859,11 @@ public class WindowManagerService extends IWindowManager.Stub dumpPolicyLocked(pw, args, true); } return; + } else if ("animator".equals(cmd) || "a".equals(cmd)) { + synchronized(mWindowMap) { + dumpAnimatorLocked(pw, args, true); + } + return; } else if ("sessions".equals(cmd) || "s".equals(cmd)) { synchronized(mWindowMap) { dumpSessionsLocked(pw, true); @@ -10867,6 +10909,11 @@ public class WindowManagerService extends IWindowManager.Stub if (dumpAll) { pw.println("-------------------------------------------------------------------------------"); } + dumpAnimatorLocked(pw, args, dumpAll); + pw.println(); + if (dumpAll) { + pw.println("-------------------------------------------------------------------------------"); + } dumpSessionsLocked(pw, dumpAll); pw.println(); if (dumpAll) { diff --git a/services/java/com/android/server/wm/WindowState.java b/services/java/com/android/server/wm/WindowState.java index c195f45..e1cc58f 100644 --- a/services/java/com/android/server/wm/WindowState.java +++ b/services/java/com/android/server/wm/WindowState.java @@ -250,7 +250,7 @@ final class WindowState implements WindowManagerPolicy.WindowState { // Used to improve performance of toString() String mStringNameCache; CharSequence mLastTitle; - boolean mWasPaused; + boolean mWasExiting; final WindowStateAnimator mWinAnimator; @@ -282,7 +282,7 @@ final class WindowState implements WindowManagerPolicy.WindowState { mEnforceSizeCompat = (mAttrs.flags & FLAG_COMPATIBLE_WINDOW) != 0; if (WindowManagerService.localLOGV) Slog.v( TAG, "Window " + this + " client=" + c.asBinder() - + " token=" + token + " (" + mAttrs.token + ")"); + + " token=" + token + " (" + mAttrs.token + ")" + " params=" + a); try { c.asBinder().linkToDeath(deathRecipient, 0); } catch (RemoteException e) { @@ -1206,7 +1206,8 @@ final class WindowState implements WindowManagerPolicy.WindowState { pw.print(" visible="); mLastVisibleInsets.printShortString(pw); pw.println(); } - mWinAnimator.dump(pw, prefix, dumpAll); + pw.print(prefix); pw.print(mWinAnimator); pw.println(":"); + mWinAnimator.dump(pw, prefix + " ", dumpAll); if (mExiting || mRemoveOnExit || mDestroying || mRemoved) { pw.print(prefix); pw.print("mExiting="); pw.print(mExiting); pw.print(" mRemoveOnExit="); pw.print(mRemoveOnExit); @@ -1241,9 +1242,9 @@ final class WindowState implements WindowManagerPolicy.WindowState { @Override public String toString() { if (mStringNameCache == null || mLastTitle != mAttrs.getTitle() - || mWasPaused != mToken.paused) { + || mWasExiting != mExiting) { mLastTitle = mAttrs.getTitle(); - mWasPaused = mToken.paused; + mWasExiting = mExiting; mStringNameCache = "Window{" + Integer.toHexString(System.identityHashCode(this)) + " u" + UserHandle.getUserId(mSession.mUid) + " " + mLastTitle + (mExiting ? " EXITING}" : "}"); diff --git a/services/java/com/android/server/wm/WindowStateAnimator.java b/services/java/com/android/server/wm/WindowStateAnimator.java index 2bfefe1..85f087f 100644 --- a/services/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/java/com/android/server/wm/WindowStateAnimator.java @@ -1604,10 +1604,11 @@ class WindowStateAnimator { @Override public String toString() { - StringBuffer sb = new StringBuffer("WindowStateAnimator ("); - sb.append(mWin.mLastTitle + "): "); - sb.append("mSurface " + mSurface); - sb.append(", mAnimation " + mAnimation); + StringBuffer sb = new StringBuffer("WindowStateAnimator{"); + sb.append(Integer.toHexString(System.identityHashCode(this))); + sb.append(' '); + sb.append(mWin.mAttrs.getTitle()); + sb.append('}'); return sb.toString(); } } |
