diff options
-rw-r--r-- | cmds/bootanimation/Android.mk | 2 | ||||
-rw-r--r-- | cmds/bootanimation/bootanim.rc | 6 | ||||
-rw-r--r-- | core/java/android/os/RecoverySystem.java | 28 | ||||
-rw-r--r-- | core/jni/com_android_internal_os_Zygote.cpp | 4 | ||||
-rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 9 |
5 files changed, 37 insertions, 12 deletions
diff --git a/cmds/bootanimation/Android.mk b/cmds/bootanimation/Android.mk index 2ee586f2c3ca..7c8842ca0231 100644 --- a/cmds/bootanimation/Android.mk +++ b/cmds/bootanimation/Android.mk @@ -27,6 +27,8 @@ LOCAL_SHARED_LIBRARIES := \ LOCAL_MODULE:= bootanimation +LOCAL_INIT_RC := bootanim.rc + ifdef TARGET_32_BIT_SURFACEFLINGER LOCAL_32_BIT_ONLY := true endif diff --git a/cmds/bootanimation/bootanim.rc b/cmds/bootanimation/bootanim.rc new file mode 100644 index 000000000000..ee0d0b8c042f --- /dev/null +++ b/cmds/bootanimation/bootanim.rc @@ -0,0 +1,6 @@ +service bootanim /system/bin/bootanimation + class core + user graphics + group graphics audio + disabled + oneshot diff --git a/core/java/android/os/RecoverySystem.java b/core/java/android/os/RecoverySystem.java index 52b10be0e53e..2a2ad266fcb5 100644 --- a/core/java/android/os/RecoverySystem.java +++ b/core/java/android/os/RecoverySystem.java @@ -68,7 +68,7 @@ public class RecoverySystem { /** Send progress to listeners no more often than this (in ms). */ private static final long PUBLISH_PROGRESS_INTERVAL_MS = 500; - /** Used to communicate with recovery. See bootable/recovery/recovery.c. */ + /** Used to communicate with recovery. See bootable/recovery/recovery.cpp. */ private static File RECOVERY_DIR = new File("/cache/recovery"); private static File COMMAND_FILE = new File(RECOVERY_DIR, "command"); private static File UNCRYPT_FILE = new File(RECOVERY_DIR, "uncrypt_file"); @@ -506,18 +506,32 @@ public class RecoverySystem { String[] names = RECOVERY_DIR.list(); for (int i = 0; names != null && i < names.length; i++) { if (names[i].startsWith(LAST_PREFIX)) continue; - File f = new File(RECOVERY_DIR, names[i]); - if (!f.delete()) { - Log.e(TAG, "Can't delete: " + f); - } else { - Log.i(TAG, "Deleted: " + f); - } + recursiveDelete(new File(RECOVERY_DIR, names[i])); } return log; } /** + * Internally, delete a given file or directory recursively. + */ + private static void recursiveDelete(File name) { + if (name.isDirectory()) { + String[] files = name.list(); + for (int i = 0; files != null && i < files.length; i++) { + File f = new File(name, files[i]); + recursiveDelete(f); + } + } + + if (!name.delete()) { + Log.e(TAG, "Can't delete: " + name); + } else { + Log.i(TAG, "Deleted: " + name); + } + } + + /** * Internally, recovery treats each line of the command file as a separate * argv, so we only need to protect against newlines and nulls. */ diff --git a/core/jni/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp index 2bfeadb18e20..adb19be94a98 100644 --- a/core/jni/com_android_internal_os_Zygote.cpp +++ b/core/jni/com_android_internal_os_Zygote.cpp @@ -356,8 +356,8 @@ static void DetachDescriptors(JNIEnv* env, jintArray fdsToClose) { return; } jsize count = env->GetArrayLength(fdsToClose); - jint *ar = env->GetIntArrayElements(fdsToClose, 0); - if (!ar) { + ScopedIntArrayRO ar(env, fdsToClose); + if (ar.get() == NULL) { ALOGE("Bad fd array"); RuntimeAbort(env); } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 85b2a41f6c5f..97a38925a8ab 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -639,6 +639,7 @@ public class WindowManagerService extends IWindowManager.Stub final InputManagerService mInputManager; final DisplayManagerInternal mDisplayManagerInternal; final DisplayManager mDisplayManager; + final Display[] mDisplays; // Who is holding the screen on. Session mHoldingScreenOn; @@ -851,8 +852,8 @@ public class WindowManagerService extends IWindowManager.Stub mFxSession = new SurfaceSession(); mDisplayManager = (DisplayManager)context.getSystemService(Context.DISPLAY_SERVICE); - Display[] displays = mDisplayManager.getDisplays(); - for (Display display : displays) { + mDisplays = mDisplayManager.getDisplays(); + for (Display display : mDisplays) { createDisplayContentLocked(display); } @@ -7599,7 +7600,9 @@ public class WindowManagerService extends IWindowManager.Stub } public void displayReady() { - displayReady(Display.DEFAULT_DISPLAY); + for (Display display : mDisplays) { + displayReady(display.getDisplayId()); + } synchronized(mWindowMap) { final DisplayContent displayContent = getDefaultDisplayContentLocked(); |