Exposing some ViewRoomImple methods in shared lib

This would allow us to implement SyncRtSurfaceTransactionApplierCompat directly in Launcher
so that we can better handle surface lifecycle

Also removing java 7 restriction from librayr as the latest gradle properly handle java-8 jars

Bug: 148885018
Bug: 148194313
Test: Verified jar works with Launcher
Change-Id: I57adfea4b41ce12c8f8f2697dc554feca7ccc6b6
diff --git a/packages/SystemUI/shared/Android.bp b/packages/SystemUI/shared/Android.bp
index 592f6c2..68f4b746 100644
--- a/packages/SystemUI/shared/Android.bp
+++ b/packages/SystemUI/shared/Android.bp
@@ -38,9 +38,7 @@
         "PluginCoreLib",
     ],
 
-    // Enforce that the library is built against java 7 so that there are
-    // no compatibility issues with launcher
-    java_version: "1.7",
 
+    java_version: "1.8",
     min_sdk_version: "26",
 }
diff --git a/packages/SystemUI/shared/AndroidManifest.xml b/packages/SystemUI/shared/AndroidManifest.xml
index 43b9c75..aaadea6 100644
--- a/packages/SystemUI/shared/AndroidManifest.xml
+++ b/packages/SystemUI/shared/AndroidManifest.xml
@@ -18,7 +18,5 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.systemui.shared">
 
-    <uses-sdk
-        android:minSdkVersion="26" />
 
 </manifest>
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/SurfaceControlCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/SurfaceControlCompat.java
index c2a4af9..acc6913 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/SurfaceControlCompat.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/SurfaceControlCompat.java
@@ -20,6 +20,9 @@
 import android.view.View;
 import android.view.ViewRootImpl;
 
+/**
+ * TODO: Remove this class
+ */
 public class SurfaceControlCompat {
     final SurfaceControl mSurfaceControl;
 
@@ -37,4 +40,8 @@
     public boolean isValid() {
         return mSurfaceControl != null && mSurfaceControl.isValid();
     }
+
+    public SurfaceControl getSurfaceControl() {
+        return mSurfaceControl;
+    }
 }
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/SyncRtSurfaceTransactionApplierCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/SyncRtSurfaceTransactionApplierCompat.java
index 2e6b195..31fe22e 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/SyncRtSurfaceTransactionApplierCompat.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/SyncRtSurfaceTransactionApplierCompat.java
@@ -23,8 +23,8 @@
 import android.os.Handler.Callback;
 import android.os.Message;
 import android.os.Trace;
-import android.view.Surface;
 import android.view.SurfaceControl;
+import android.view.SurfaceControl.Transaction;
 import android.view.View;
 import android.view.ViewRootImpl;
 
@@ -108,13 +108,12 @@
                     return;
                 }
                 Trace.traceBegin(Trace.TRACE_TAG_VIEW, "Sync transaction frameNumber=" + frame);
-                TransactionCompat t = new TransactionCompat();
+                Transaction t = new Transaction();
                 for (int i = params.length - 1; i >= 0; i--) {
                     SyncRtSurfaceTransactionApplierCompat.SurfaceParams surfaceParams =
                             params[i];
-                    SurfaceControlCompat surface = surfaceParams.surface;
-                    t.deferTransactionUntil(surface, mBarrierSurfaceControl, frame);
-                    applyParams(t, surfaceParams);
+                    t.deferTransactionUntil(surfaceParams.surface, mBarrierSurfaceControl, frame);
+                    surfaceParams.applyTo(t);
                 }
                 t.setEarlyWakeup();
                 t.apply();
@@ -152,31 +151,7 @@
 
     public static void applyParams(TransactionCompat t,
             SyncRtSurfaceTransactionApplierCompat.SurfaceParams params) {
-        if ((params.flags & FLAG_MATRIX) != 0) {
-            t.setMatrix(params.surface, params.matrix);
-        }
-        if ((params.flags & FLAG_WINDOW_CROP) != 0) {
-            t.setWindowCrop(params.surface, params.windowCrop);
-        }
-        if ((params.flags & FLAG_ALPHA) != 0) {
-            t.setAlpha(params.surface, params.alpha);
-        }
-        if ((params.flags & FLAG_LAYER) != 0) {
-            t.setLayer(params.surface, params.layer);
-        }
-        if ((params.flags & FLAG_CORNER_RADIUS) != 0) {
-            t.setCornerRadius(params.surface, params.cornerRadius);
-        }
-        if ((params.flags & FLAG_BACKGROUND_BLUR_RADIUS) != 0) {
-            t.setBackgroundBlurRadius(params.surface, params.backgroundBlurRadius);
-        }
-        if ((params.flags & FLAG_VISIBILITY) != 0) {
-            if (params.visible) {
-                t.show(params.surface);
-            } else {
-                t.hide(params.surface);
-            }
-        }
+        params.applyTo(t.mTransaction);
     }
 
     /**
@@ -210,7 +185,7 @@
 
     public static class SurfaceParams {
         public static class Builder {
-            final SurfaceControlCompat surface;
+            final SurfaceControl surface;
             int flags;
             float alpha;
             float cornerRadius;
@@ -224,6 +199,13 @@
              * @param surface The surface to modify.
              */
             public Builder(SurfaceControlCompat surface) {
+                this(surface.mSurfaceControl);
+            }
+
+            /**
+             * @param surface The surface to modify.
+             */
+            public Builder(SurfaceControl surface) {
                 this.surface = surface;
             }
 
@@ -317,11 +299,12 @@
          */
         public SurfaceParams(SurfaceControlCompat surface, float alpha, Matrix matrix,
                 Rect windowCrop, int layer, float cornerRadius) {
-            this(surface, FLAG_ALL & ~(FLAG_VISIBILITY | FLAG_BACKGROUND_BLUR_RADIUS), alpha,
+            this(surface.mSurfaceControl,
+                    FLAG_ALL & ~(FLAG_VISIBILITY | FLAG_BACKGROUND_BLUR_RADIUS), alpha,
                     matrix, windowCrop, layer, cornerRadius, 0 /* backgroundBlurRadius */, true);
         }
 
-        private SurfaceParams(SurfaceControlCompat surface, int flags, float alpha, Matrix matrix,
+        private SurfaceParams(SurfaceControl surface, int flags, float alpha, Matrix matrix,
                 Rect windowCrop, int layer, float cornerRadius, int backgroundBlurRadius,
                 boolean visible) {
             this.flags = flags;
@@ -336,8 +319,9 @@
         }
 
         private final int flags;
+        private final float[] mTmpValues = new float[9];
 
-        public final SurfaceControlCompat surface;
+        public final SurfaceControl surface;
         public final float alpha;
         public final float cornerRadius;
         public final int backgroundBlurRadius;
@@ -345,5 +329,33 @@
         public final Rect windowCrop;
         public final int layer;
         public final boolean visible;
+
+        public void applyTo(SurfaceControl.Transaction t) {
+            if ((flags & FLAG_MATRIX) != 0) {
+                t.setMatrix(surface, matrix, mTmpValues);
+            }
+            if ((flags & FLAG_WINDOW_CROP) != 0) {
+                t.setWindowCrop(surface, windowCrop);
+            }
+            if ((flags & FLAG_ALPHA) != 0) {
+                t.setAlpha(surface, alpha);
+            }
+            if ((flags & FLAG_LAYER) != 0) {
+                t.setLayer(surface, layer);
+            }
+            if ((flags & FLAG_CORNER_RADIUS) != 0) {
+                t.setCornerRadius(surface, cornerRadius);
+            }
+            if ((flags & FLAG_BACKGROUND_BLUR_RADIUS) != 0) {
+                t.setBackgroundBlurRadius(surface, backgroundBlurRadius);
+            }
+            if ((flags & FLAG_VISIBILITY) != 0) {
+                if (visible) {
+                    t.show(surface);
+                } else {
+                    t.hide(surface);
+                }
+            }
+        }
     }
 }
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/TransactionCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/TransactionCompat.java
index c1c91f7..bdb6c06 100644
--- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/TransactionCompat.java
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/TransactionCompat.java
@@ -18,9 +18,8 @@
 
 import android.graphics.Matrix;
 import android.graphics.Rect;
-import android.view.Surface;
-import android.view.SurfaceControl.Transaction;
 import android.view.SurfaceControl;
+import android.view.SurfaceControl.Transaction;
 
 public class TransactionCompat {
 
@@ -109,4 +108,13 @@
         mTransaction.setColor(surfaceControl.mSurfaceControl, color);
         return this;
     }
+
+    public static void deferTransactionUntil(Transaction t, SurfaceControl surfaceControl,
+            SurfaceControl barrier, long frameNumber) {
+        t.deferTransactionUntil(surfaceControl, barrier, frameNumber);
+    }
+
+    public static void setEarlyWakeup(Transaction t) {
+        t.setEarlyWakeup();
+    }
 }
diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/ViewRootImplCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/ViewRootImplCompat.java
new file mode 100644
index 0000000..dd61326
--- /dev/null
+++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/ViewRootImplCompat.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+package com.android.systemui.shared.system;
+
+import android.view.SurfaceControl;
+import android.view.View;
+import android.view.ViewRootImpl;
+
+import java.util.function.LongConsumer;
+
+/**
+ * Helper class to expose some ViewRoomImpl methods
+ */
+public class ViewRootImplCompat {
+
+    private final ViewRootImpl mViewRoot;
+
+    public ViewRootImplCompat(View view) {
+        mViewRoot = view == null ? null : view.getViewRootImpl();
+    }
+
+    public SurfaceControl getRenderSurfaceControl() {
+        return mViewRoot == null ? null : mViewRoot.getRenderSurfaceControl();
+    }
+
+    public SurfaceControl getSurfaceControl() {
+        return mViewRoot == null ? null : mViewRoot.getSurfaceControl();
+    }
+
+    public boolean isValid() {
+        return mViewRoot != null;
+    }
+
+    public View getView() {
+        return mViewRoot == null ? null : mViewRoot.getView();
+    }
+
+    public void registerRtFrameCallback(LongConsumer callback) {
+        if (mViewRoot != null) {
+            mViewRoot.registerRtFrameCallback(callback::accept);
+        }
+    }
+}