Loading core/java/android/app/Activity.java +9 −2 Original line number Diff line number Diff line Loading @@ -747,6 +747,7 @@ public class Activity extends ContextThemeWrapper int mResultCode = RESULT_CANCELED; Intent mResultData = null; private TranslucentConversionListener mTranslucentCallback; private boolean mChangeCanvasToTranslucent; private boolean mTitleReady = false; Loading Loading @@ -4903,7 +4904,9 @@ public class Activity extends ContextThemeWrapper public void convertFromTranslucent() { try { mTranslucentCallback = null; ActivityManagerNative.getDefault().convertFromTranslucent(mToken); if (ActivityManagerNative.getDefault().convertFromTranslucent(mToken)) { WindowManagerGlobal.getInstance().changeCanvasOpacity(mToken, true); } } catch (RemoteException e) { // pass } Loading Loading @@ -4931,6 +4934,7 @@ public class Activity extends ContextThemeWrapper public void convertToTranslucent(TranslucentConversionListener callback) { try { mTranslucentCallback = callback; mChangeCanvasToTranslucent = ActivityManagerNative.getDefault().convertToTranslucent(mToken); } catch (RemoteException e) { // pass Loading @@ -4943,6 +4947,9 @@ public class Activity extends ContextThemeWrapper mTranslucentCallback.onTranslucentConversionComplete(drawComplete); mTranslucentCallback = null; } if (mChangeCanvasToTranslucent) { WindowManagerGlobal.getInstance().changeCanvasOpacity(mToken, false); } } /** Loading core/java/android/app/ActivityManagerNative.java +10 −4 Original line number Diff line number Diff line Loading @@ -1502,16 +1502,18 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM case CONVERT_FROM_TRANSLUCENT_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IBinder token = data.readStrongBinder(); convertFromTranslucent(token); boolean converted = convertFromTranslucent(token); reply.writeNoException(); reply.writeInt(converted ? 1 : 0); return true; } case CONVERT_TO_TRANSLUCENT_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IBinder token = data.readStrongBinder(); convertToTranslucent(token); boolean converted = convertToTranslucent(token); reply.writeNoException(); reply.writeInt(converted ? 1 : 0); return true; } Loading Loading @@ -3876,7 +3878,7 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); } public void convertFromTranslucent(IBinder token) public boolean convertFromTranslucent(IBinder token) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); Loading @@ -3884,11 +3886,13 @@ class ActivityManagerProxy implements IActivityManager data.writeStrongBinder(token); mRemote.transact(CONVERT_FROM_TRANSLUCENT_TRANSACTION, data, reply, 0); reply.readException(); boolean res = reply.readInt() != 0; data.recycle(); reply.recycle(); return res; } public void convertToTranslucent(IBinder token) public boolean convertToTranslucent(IBinder token) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); Loading @@ -3896,8 +3900,10 @@ class ActivityManagerProxy implements IActivityManager data.writeStrongBinder(token); mRemote.transact(CONVERT_TO_TRANSLUCENT_TRANSACTION, data, reply, 0); reply.readException(); boolean res = reply.readInt() != 0; data.recycle(); reply.recycle(); return res; } public void setImmersive(IBinder token, boolean immersive) Loading core/java/android/app/IActivityManager.java +2 −2 Original line number Diff line number Diff line Loading @@ -301,8 +301,8 @@ public interface IActivityManager extends IInterface { public void finishHeavyWeightApp() throws RemoteException; public void convertFromTranslucent(IBinder token) throws RemoteException; public void convertToTranslucent(IBinder token) throws RemoteException; public boolean convertFromTranslucent(IBinder token) throws RemoteException; public boolean convertToTranslucent(IBinder token) throws RemoteException; public void notifyActivityDrawn(IBinder token) throws RemoteException; public void setImmersive(IBinder token, boolean immersive) throws RemoteException; Loading core/java/android/view/ViewRootImpl.java +5 −0 Original line number Diff line number Diff line Loading @@ -5960,6 +5960,11 @@ public final class ViewRootImpl implements ViewParent, // Do nothing. } void changeCanvasOpacity(boolean opaque) { // TODO(romainguy): recreate Canvas (software or hardware) to reflect the opacity change. Log.d(TAG, "changeCanvasOpacity: opaque=" + opaque); } class TakenSurfaceHolder extends BaseSurfaceHolder { @Override public boolean onAllowLockCanvas() { Loading core/java/android/view/WindowManagerGlobal.java +15 −0 Original line number Diff line number Diff line Loading @@ -494,6 +494,21 @@ public final class WindowManagerGlobal { } } } /** @hide */ public void changeCanvasOpacity(IBinder token, boolean opaque) { if (token == null) { return; } synchronized (mLock) { for (int i = mParams.size() - 1; i >= 0; --i) { if (mParams.get(i).token == token) { mRoots.get(i).changeCanvasOpacity(opaque); return; } } } } } final class WindowLeaked extends AndroidRuntimeException { Loading Loading
core/java/android/app/Activity.java +9 −2 Original line number Diff line number Diff line Loading @@ -747,6 +747,7 @@ public class Activity extends ContextThemeWrapper int mResultCode = RESULT_CANCELED; Intent mResultData = null; private TranslucentConversionListener mTranslucentCallback; private boolean mChangeCanvasToTranslucent; private boolean mTitleReady = false; Loading Loading @@ -4903,7 +4904,9 @@ public class Activity extends ContextThemeWrapper public void convertFromTranslucent() { try { mTranslucentCallback = null; ActivityManagerNative.getDefault().convertFromTranslucent(mToken); if (ActivityManagerNative.getDefault().convertFromTranslucent(mToken)) { WindowManagerGlobal.getInstance().changeCanvasOpacity(mToken, true); } } catch (RemoteException e) { // pass } Loading Loading @@ -4931,6 +4934,7 @@ public class Activity extends ContextThemeWrapper public void convertToTranslucent(TranslucentConversionListener callback) { try { mTranslucentCallback = callback; mChangeCanvasToTranslucent = ActivityManagerNative.getDefault().convertToTranslucent(mToken); } catch (RemoteException e) { // pass Loading @@ -4943,6 +4947,9 @@ public class Activity extends ContextThemeWrapper mTranslucentCallback.onTranslucentConversionComplete(drawComplete); mTranslucentCallback = null; } if (mChangeCanvasToTranslucent) { WindowManagerGlobal.getInstance().changeCanvasOpacity(mToken, false); } } /** Loading
core/java/android/app/ActivityManagerNative.java +10 −4 Original line number Diff line number Diff line Loading @@ -1502,16 +1502,18 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM case CONVERT_FROM_TRANSLUCENT_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IBinder token = data.readStrongBinder(); convertFromTranslucent(token); boolean converted = convertFromTranslucent(token); reply.writeNoException(); reply.writeInt(converted ? 1 : 0); return true; } case CONVERT_TO_TRANSLUCENT_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IBinder token = data.readStrongBinder(); convertToTranslucent(token); boolean converted = convertToTranslucent(token); reply.writeNoException(); reply.writeInt(converted ? 1 : 0); return true; } Loading Loading @@ -3876,7 +3878,7 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); } public void convertFromTranslucent(IBinder token) public boolean convertFromTranslucent(IBinder token) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); Loading @@ -3884,11 +3886,13 @@ class ActivityManagerProxy implements IActivityManager data.writeStrongBinder(token); mRemote.transact(CONVERT_FROM_TRANSLUCENT_TRANSACTION, data, reply, 0); reply.readException(); boolean res = reply.readInt() != 0; data.recycle(); reply.recycle(); return res; } public void convertToTranslucent(IBinder token) public boolean convertToTranslucent(IBinder token) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); Loading @@ -3896,8 +3900,10 @@ class ActivityManagerProxy implements IActivityManager data.writeStrongBinder(token); mRemote.transact(CONVERT_TO_TRANSLUCENT_TRANSACTION, data, reply, 0); reply.readException(); boolean res = reply.readInt() != 0; data.recycle(); reply.recycle(); return res; } public void setImmersive(IBinder token, boolean immersive) Loading
core/java/android/app/IActivityManager.java +2 −2 Original line number Diff line number Diff line Loading @@ -301,8 +301,8 @@ public interface IActivityManager extends IInterface { public void finishHeavyWeightApp() throws RemoteException; public void convertFromTranslucent(IBinder token) throws RemoteException; public void convertToTranslucent(IBinder token) throws RemoteException; public boolean convertFromTranslucent(IBinder token) throws RemoteException; public boolean convertToTranslucent(IBinder token) throws RemoteException; public void notifyActivityDrawn(IBinder token) throws RemoteException; public void setImmersive(IBinder token, boolean immersive) throws RemoteException; Loading
core/java/android/view/ViewRootImpl.java +5 −0 Original line number Diff line number Diff line Loading @@ -5960,6 +5960,11 @@ public final class ViewRootImpl implements ViewParent, // Do nothing. } void changeCanvasOpacity(boolean opaque) { // TODO(romainguy): recreate Canvas (software or hardware) to reflect the opacity change. Log.d(TAG, "changeCanvasOpacity: opaque=" + opaque); } class TakenSurfaceHolder extends BaseSurfaceHolder { @Override public boolean onAllowLockCanvas() { Loading
core/java/android/view/WindowManagerGlobal.java +15 −0 Original line number Diff line number Diff line Loading @@ -494,6 +494,21 @@ public final class WindowManagerGlobal { } } } /** @hide */ public void changeCanvasOpacity(IBinder token, boolean opaque) { if (token == null) { return; } synchronized (mLock) { for (int i = mParams.size() - 1; i >= 0; --i) { if (mParams.get(i).token == token) { mRoots.get(i).changeCanvasOpacity(opaque); return; } } } } } final class WindowLeaked extends AndroidRuntimeException { Loading