Merge "clarify MediaCodec.setVideoScalingMode behavior" into nyc-dev
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index 6bb853a..f2e5997 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -1958,6 +1958,10 @@
}
if (res != null) {
+ if (!res.exists()) {
+ Log.wtf(TAG, "Data directory doesn't exist for package " + getPackageName(),
+ new Throwable());
+ }
return res;
} else {
throw new RuntimeException(
diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java
index fb70c71..2be55317 100644
--- a/core/java/android/app/LoadedApk.java
+++ b/core/java/android/app/LoadedApk.java
@@ -379,6 +379,11 @@
// Add path to libraries in apk for current abi. Do this now because more entries
// will be added to zipPaths that shouldn't be part of the library path.
if (aInfo.primaryCpuAbi != null) {
+ // Add fake libs into the library search path if we target prior to N.
+ if (aInfo.targetSdkVersion <= 23) {
+ outLibPaths.add("/system/fake-libs" +
+ (VMRuntime.is64BitAbi(aInfo.primaryCpuAbi) ? "64" : ""));
+ }
for (String apk : outZipPaths) {
outLibPaths.add(apk + "!/lib/" + aInfo.primaryCpuAbi);
}
diff --git a/graphics/java/android/graphics/drawable/LayerDrawable.java b/graphics/java/android/graphics/drawable/LayerDrawable.java
index d9c3a02..c67b008 100644
--- a/graphics/java/android/graphics/drawable/LayerDrawable.java
+++ b/graphics/java/android/graphics/drawable/LayerDrawable.java
@@ -1419,9 +1419,13 @@
@Override
public void jumpToCurrentState() {
- final ChildDrawable[] children = mLayerState.mChildren;
- for (int i = 0, count = mLayerState.mNum; i < count; i++) {
- children[i].mDrawable.jumpToCurrentState();
+ final ChildDrawable[] array = mLayerState.mChildren;
+ final int N = mLayerState.mNum;
+ for (int i = 0; i < N; i++) {
+ final Drawable dr = array[i].mDrawable;
+ if (dr != null) {
+ dr.jumpToCurrentState();
+ }
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsViewTouchHandler.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsViewTouchHandler.java
index 2ec180d..0e5ebc9 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsViewTouchHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsViewTouchHandler.java
@@ -257,8 +257,12 @@
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL: {
if (mDragRequested) {
+ boolean cancelled = action == MotionEvent.ACTION_CANCEL;
+ if (cancelled) {
+ EventBus.getDefault().send(new DragDropTargetChangedEvent(mDragTask, null));
+ }
EventBus.getDefault().send(new DragEndEvent(mDragTask, mTaskView,
- action == MotionEvent.ACTION_UP ? mLastDropTarget : null));
+ !cancelled ? mLastDropTarget : null));
break;
}
}
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index 5249131..a7c994b 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -3457,7 +3457,7 @@
// First things first: if this activity is currently visible,
// and the resumed activity is not yet visible, then hold off on
// finishing until the resumed one becomes visible.
- if (mode == FINISH_AFTER_VISIBLE && r.nowVisible) {
+ if (mode == FINISH_AFTER_VISIBLE && (r.visible || r.nowVisible)) {
if (!mStackSupervisor.mStoppingActivities.contains(r)) {
addToStopping(r, false /* immediate */);
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index f21966d..547379d 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -18819,7 +18819,8 @@
} catch (Exception e) {
logCriticalInfo(Log.WARN, "Destroying user " + userId + " on volume " + volumeUuid
+ " because we failed to prepare: " + e);
- destroyUserDataLI(volumeUuid, userId, flags);
+ destroyUserDataLI(volumeUuid, userId,
+ StorageManager.FLAG_STORAGE_DE | StorageManager.FLAG_STORAGE_CE);
if (allowRecover) {
// Try one last time; if we fail again we're really in trouble
diff --git a/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java b/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java
index 553c5de..29b9b92 100644
--- a/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java
+++ b/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java
@@ -32,6 +32,7 @@
import android.os.UserHandle;
import android.provider.Settings;
import android.service.vr.IVrManager;
+import android.service.vr.IVrStateCallbacks;
import android.util.DisplayMetrics;
import android.util.Slog;
import android.util.SparseBooleanArray;
@@ -70,7 +71,9 @@
private long mPanicTime;
private WindowManager mWindowManager;
private int mCurrentUserId;
- private IVrManager mVrManager;
+ // Local copy of vr mode enabled state, to avoid calling into VrManager with
+ // the lock held.
+ boolean mVrModeEnabled = false;
public ImmersiveModeConfirmation(Context context) {
mContext = context;
@@ -117,22 +120,19 @@
}
}
- private boolean getVrMode() {
- boolean vrMode = false;
- if (mVrManager == null) {
- // lazily grab this service since it may not be available at construction time
- mVrManager = (IVrManager) IVrManager.Stub.asInterface(
+ void systemReady() {
+ IVrManager vrManager = IVrManager.Stub.asInterface(
ServiceManager.getService(VrManagerService.VR_MANAGER_BINDER_SERVICE));
- }
- if (mVrManager != null) {
+ if (vrManager != null) {
try {
- vrMode = mVrManager.getVrModeState();
- } catch (RemoteException ex) { }
+ vrManager.registerListener(mVrStateCallbacks);
+ mVrModeEnabled = vrManager.getVrModeState();
+ } catch (RemoteException re) {
+ }
}
- return vrMode;
}
- public void immersiveModeChanged(String pkg, boolean isImmersiveMode,
+ public void immersiveModeChangedLw(String pkg, boolean isImmersiveMode,
boolean userSetupComplete) {
mHandler.removeMessages(H.SHOW);
if (isImmersiveMode) {
@@ -142,7 +142,7 @@
if (!disabled
&& (DEBUG_SHOW_EVERY_TIME || !mConfirmed)
&& userSetupComplete
- && !getVrMode()) {
+ && !mVrModeEnabled) {
mHandler.sendEmptyMessageDelayed(H.SHOW, mShowDelayMs);
}
} else {
@@ -375,4 +375,11 @@
}
}
}
+
+ private final IVrStateCallbacks mVrStateCallbacks = new IVrStateCallbacks.Stub() {
+ @Override
+ public void onVrStateChanged(boolean enabled) throws RemoteException {
+ mVrModeEnabled = enabled;
+ }
+ };
}
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 9f31f4f..4e4b2f3 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -6653,6 +6653,7 @@
mKeyguardDelegate.onBootCompleted();
}
mSystemGestures.systemReady();
+ mImmersiveModeConfirmation.systemReady();
}
/** {@inheritDoc} */
@@ -7357,7 +7358,7 @@
boolean newImmersiveMode = isImmersiveMode(vis);
if (win != null && oldImmersiveMode != newImmersiveMode) {
final String pkg = win.getOwningPackage();
- mImmersiveModeConfirmation.immersiveModeChanged(pkg, newImmersiveMode,
+ mImmersiveModeConfirmation.immersiveModeChangedLw(pkg, newImmersiveMode,
isUserSetupComplete());
}
diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java
index 037f316..6f8207e 100644
--- a/services/core/java/com/android/server/wm/TaskStack.java
+++ b/services/core/java/com/android/server/wm/TaskStack.java
@@ -383,6 +383,12 @@
}
boolean updateBoundsAfterConfigChange(boolean scheduleResize) {
+ if (mFullscreen) {
+ // Bounds will already be set correctly when display info is updated in the case of
+ // fullscreen.
+ return false;
+ }
+
if (mLastConfigChangedRotation != mLastUpdateDisplayInfoRotation) {
// We wait for the rotation values after configuration change and display info. update
// to be equal before updating the bounds due to rotation change otherwise things might
@@ -399,6 +405,7 @@
}
final int oldDockSide = mStackId == DOCKED_STACK_ID ? getDockSide() : DOCKED_INVALID;
+ mTmpRect2.set(mBounds);
mDisplayContent.rotateBounds(mRotation, newRotation, mTmpRect2);
if (mStackId == DOCKED_STACK_ID) {
repositionDockedStackAfterRotation(mTmpRect2);