Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 02307bb4 authored by Craig Mautner's avatar Craig Mautner Committed by Android Git Automerger
Browse files

am 7b88aa7c: am 00775127: Merge "Notify ViewRootImpl when it\'s safe to modify...

am 7b88aa7c: am 00775127: Merge "Notify ViewRootImpl when it\'s safe to modify Canvas." into klp-dev

* commit '7b88aa7c':
  Notify ViewRootImpl when it's safe to modify Canvas.
parents 59b4658e 7b88aa7c
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -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;

@@ -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
        }
@@ -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
@@ -4943,6 +4947,9 @@ public class Activity extends ContextThemeWrapper
            mTranslucentCallback.onTranslucentConversionComplete(drawComplete);
            mTranslucentCallback = null;
        }
        if (mChangeCanvasToTranslucent) {
            WindowManagerGlobal.getInstance().changeCanvasOpacity(mToken, false);
        }
    }

    /**
+10 −4
Original line number Diff line number Diff line
@@ -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;
        }

@@ -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();
@@ -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();
@@ -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)
+2 −2
Original line number Diff line number Diff line
@@ -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;
+5 −0
Original line number Diff line number Diff line
@@ -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() {
+15 −0
Original line number Diff line number Diff line
@@ -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