Merge "Remove EGL references from CanvasContext header"
diff --git a/api/test-current.txt b/api/test-current.txt
index 0127dfe..bf2730a 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -318,10 +318,16 @@
}
public final class NotificationChannel implements android.os.Parcelable {
+ method public int getOriginalImportance();
+ method public boolean isBlockableSystem();
method public boolean isImportanceLockedByCriticalDeviceFunction();
method public boolean isImportanceLockedByOEM();
+ method public void setBlockableSystem(boolean);
+ method public void setDeleted(boolean);
+ method public void setFgServiceShown(boolean);
method public void setImportanceLockedByCriticalDeviceFunction(boolean);
method public void setImportanceLockedByOEM(boolean);
+ method public void setOriginalImportance(int);
}
public final class NotificationChannelGroup implements android.os.Parcelable {
diff --git a/cmds/statsd/src/FieldValue.cpp b/cmds/statsd/src/FieldValue.cpp
index 13f5c8a..1185127 100644
--- a/cmds/statsd/src/FieldValue.cpp
+++ b/cmds/statsd/src/FieldValue.cpp
@@ -149,6 +149,18 @@
return false;
}
+bool isUidField(const Field& field, const Value& value) {
+ auto it = android::util::AtomsInfo::kAtomsWithUidField.find(field.getTag());
+
+ if (it != android::util::AtomsInfo::kAtomsWithUidField.end()) {
+ int uidField = it->second;
+ return field.getDepth() == 0 && field.getPosAtDepth(0) == uidField &&
+ value.getType() == INT;
+ }
+
+ return false;
+}
+
Value::Value(const Value& from) {
type = from.getType();
switch (type) {
@@ -464,4 +476,4 @@
} // namespace statsd
} // namespace os
-} // namespace android
\ No newline at end of file
+} // namespace android
diff --git a/cmds/statsd/src/FieldValue.h b/cmds/statsd/src/FieldValue.h
index 6729e05..0e033e0 100644
--- a/cmds/statsd/src/FieldValue.h
+++ b/cmds/statsd/src/FieldValue.h
@@ -392,6 +392,7 @@
void translateFieldMatcher(const FieldMatcher& matcher, std::vector<Matcher>* output);
bool isAttributionUidField(const Field& field, const Value& value);
+bool isUidField(const Field& field, const Value& value);
bool equalDimensions(const std::vector<Matcher>& dimension_a,
const std::vector<Matcher>& dimension_b);
diff --git a/cmds/statsd/src/matchers/matcher_util.cpp b/cmds/statsd/src/matchers/matcher_util.cpp
index 8dc5cef..10ac4a1 100644
--- a/cmds/statsd/src/matchers/matcher_util.cpp
+++ b/cmds/statsd/src/matchers/matcher_util.cpp
@@ -84,7 +84,7 @@
bool tryMatchString(const UidMap& uidMap, const Field& field, const Value& value,
const string& str_match) {
- if (isAttributionUidField(field, value)) {
+ if (isAttributionUidField(field, value) || isUidField(field, value)) {
int uid = value.int_value;
auto aidIt = UidMap::sAidToUidMapping.find(str_match);
if (aidIt != UidMap::sAidToUidMapping.end()) {
diff --git a/cmds/statsd/tests/LogEntryMatcher_test.cpp b/cmds/statsd/tests/LogEntryMatcher_test.cpp
index 2b9528f..70f0f6f 100644
--- a/cmds/statsd/tests/LogEntryMatcher_test.cpp
+++ b/cmds/statsd/tests/LogEntryMatcher_test.cpp
@@ -29,6 +29,7 @@
using std::vector;
const int32_t TAG_ID = 123;
+const int32_t TAG_ID_2 = 28; // hardcoded tag of atom with uid field
const int FIELD_ID_1 = 1;
const int FIELD_ID_2 = 2;
const int FIELD_ID_3 = 2;
@@ -297,6 +298,45 @@
EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
}
+TEST(AtomMatcherTest, TestUidFieldMatcher) {
+ UidMap uidMap;
+ uidMap.updateMap(
+ 1, {1111, 1111, 2222, 3333, 3333} /* uid list */, {1, 1, 2, 1, 2} /* version list */,
+ {android::String16("v1"), android::String16("v1"), android::String16("v2"),
+ android::String16("v1"), android::String16("v2")},
+ {android::String16("pkg0"), android::String16("pkg1"), android::String16("pkg1"),
+ android::String16("Pkg2"), android::String16("PkG3")} /* package name list */,
+ {android::String16(""), android::String16(""), android::String16(""),
+ android::String16(""), android::String16("")});
+
+ // Set up matcher
+ AtomMatcher matcher;
+ auto simpleMatcher = matcher.mutable_simple_atom_matcher();
+ simpleMatcher->set_atom_id(TAG_ID);
+ simpleMatcher->add_field_value_matcher()->set_field(1);
+ simpleMatcher->mutable_field_value_matcher(0)->set_eq_string("pkg0");
+
+ // Set up the event
+ LogEvent event(TAG_ID, 0);
+ event.write(1111);
+ event.init();
+
+ LogEvent event2(TAG_ID_2, 0);
+ event2.write(1111);
+ event2.write("some value");
+ event2.init();
+
+ // Tag not in kAtomsWithUidField
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event));
+
+ // Tag found in kAtomsWithUidField and has matching uid
+ EXPECT_TRUE(matchesSimple(uidMap, *simpleMatcher, event2));
+
+ // Tag found in kAtomsWithUidField but has non-matching uid
+ simpleMatcher->mutable_field_value_matcher(0)->set_eq_string("Pkg2");
+ EXPECT_FALSE(matchesSimple(uidMap, *simpleMatcher, event2));
+}
+
TEST(AtomMatcherTest, TestNeqAnyStringMatcher) {
UidMap uidMap;
uidMap.updateMap(
diff --git a/core/java/android/app/NotificationChannel.java b/core/java/android/app/NotificationChannel.java
index 69ec831..3effd11 100644
--- a/core/java/android/app/NotificationChannel.java
+++ b/core/java/android/app/NotificationChannel.java
@@ -15,8 +15,6 @@
*/
package android.app;
-import static android.app.NotificationManager.IMPORTANCE_HIGH;
-
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.TestApi;
@@ -86,6 +84,7 @@
private static final String ATT_GROUP = "group";
private static final String ATT_BLOCKABLE_SYSTEM = "blockable_system";
private static final String ATT_ALLOW_BUBBLE = "can_bubble";
+ private static final String ATT_ORIG_IMP = "orig_imp";
private static final String DELIMITER = ",";
/**
@@ -151,6 +150,7 @@
private String mName;
private String mDesc;
private int mImportance = DEFAULT_IMPORTANCE;
+ private int mOriginalImportance = DEFAULT_IMPORTANCE;
private boolean mBypassDnd;
private int mLockscreenVisibility = DEFAULT_VISIBILITY;
private Uri mSound = Settings.System.DEFAULT_NOTIFICATION_URI;
@@ -234,6 +234,7 @@
mBlockableSystem = in.readBoolean();
mAllowBubbles = in.readBoolean();
mImportanceLockedByOEM = in.readBoolean();
+ mOriginalImportance = in.readInt();
}
@Override
@@ -288,6 +289,7 @@
dest.writeBoolean(mBlockableSystem);
dest.writeBoolean(mAllowBubbles);
dest.writeBoolean(mImportanceLockedByOEM);
+ dest.writeInt(mOriginalImportance);
}
/**
@@ -307,6 +309,7 @@
/**
* @hide
*/
+ @TestApi
public void setFgServiceShown(boolean shown) {
mFgServiceShown = shown;
}
@@ -314,6 +317,7 @@
/**
* @hide
*/
+ @TestApi
public void setDeleted(boolean deleted) {
mDeleted = deleted;
}
@@ -322,6 +326,7 @@
* @hide
*/
@UnsupportedAppUsage
+ @TestApi
public void setBlockableSystem(boolean blockableSystem) {
mBlockableSystem = blockableSystem;
}
@@ -641,6 +646,7 @@
/**
* @hide
*/
+ @TestApi
public boolean isBlockableSystem() {
return mBlockableSystem;
}
@@ -678,6 +684,22 @@
}
/**
+ * @hide
+ */
+ @TestApi
+ public int getOriginalImportance() {
+ return mOriginalImportance;
+ }
+
+ /**
+ * @hide
+ */
+ @TestApi
+ public void setOriginalImportance(int importance) {
+ mOriginalImportance = importance;
+ }
+
+ /**
* Returns whether the user has chosen the importance of this channel, either to affirm the
* initial selection from the app, or changed it to be higher or lower.
* @see #getImportance()
@@ -729,6 +751,7 @@
setFgServiceShown(safeBool(parser, ATT_FG_SERVICE_SHOWN, false));
setBlockableSystem(safeBool(parser, ATT_BLOCKABLE_SYSTEM, false));
setAllowBubbles(safeBool(parser, ATT_ALLOW_BUBBLE, DEFAULT_ALLOW_BUBBLE));
+ setOriginalImportance(safeInt(parser, ATT_ORIG_IMP, DEFAULT_IMPORTANCE));
}
@Nullable
@@ -850,6 +873,9 @@
if (canBubble() != DEFAULT_ALLOW_BUBBLE) {
out.attribute(null, ATT_ALLOW_BUBBLE, Boolean.toString(canBubble()));
}
+ if (getOriginalImportance() != DEFAULT_IMPORTANCE) {
+ out.attribute(null, ATT_ORIG_IMP, Integer.toString(getOriginalImportance()));
+ }
// mImportanceLockedDefaultApp and mImportanceLockedByOEM have a different source of
// truth and so aren't written to this xml file
@@ -896,6 +922,7 @@
record.put(ATT_GROUP, getGroup());
record.put(ATT_BLOCKABLE_SYSTEM, isBlockableSystem());
record.put(ATT_ALLOW_BUBBLE, canBubble());
+ // TODO: original importance
return record;
}
@@ -1005,7 +1032,8 @@
&& Objects.equals(getGroup(), that.getGroup())
&& Objects.equals(getAudioAttributes(), that.getAudioAttributes())
&& mImportanceLockedByOEM == that.mImportanceLockedByOEM
- && mImportanceLockedDefaultApp == that.mImportanceLockedDefaultApp;
+ && mImportanceLockedDefaultApp == that.mImportanceLockedDefaultApp
+ && mOriginalImportance == that.mOriginalImportance;
}
@Override
@@ -1015,7 +1043,7 @@
getUserLockedFields(),
isFgServiceShown(), mVibrationEnabled, mShowBadge, isDeleted(), getGroup(),
getAudioAttributes(), isBlockableSystem(), mAllowBubbles,
- mImportanceLockedByOEM, mImportanceLockedDefaultApp);
+ mImportanceLockedByOEM, mImportanceLockedDefaultApp, mOriginalImportance);
result = 31 * result + Arrays.hashCode(mVibration);
return result;
}
@@ -1045,6 +1073,7 @@
+ ", mAllowBubbles=" + mAllowBubbles
+ ", mImportanceLockedByOEM=" + mImportanceLockedByOEM
+ ", mImportanceLockedDefaultApp=" + mImportanceLockedDefaultApp
+ + ", mOriginalImp=" + mOriginalImportance
+ '}';
pw.println(prefix + output);
}
@@ -1073,6 +1102,7 @@
+ ", mAllowBubbles=" + mAllowBubbles
+ ", mImportanceLockedByOEM=" + mImportanceLockedByOEM
+ ", mImportanceLockedDefaultApp=" + mImportanceLockedDefaultApp
+ + ", mOriginalImp=" + mOriginalImportance
+ '}';
}
diff --git a/core/java/android/view/CompositionSamplingListener.java b/core/java/android/view/CompositionSamplingListener.java
index e4309a6..368445c 100644
--- a/core/java/android/view/CompositionSamplingListener.java
+++ b/core/java/android/view/CompositionSamplingListener.java
@@ -17,7 +17,6 @@
package android.view;
import android.graphics.Rect;
-import android.os.IBinder;
import com.android.internal.util.Preconditions;
@@ -58,11 +57,12 @@
* Registers a sampling listener.
*/
public static void register(CompositionSamplingListener listener,
- int displayId, IBinder stopLayer, Rect samplingArea) {
+ int displayId, SurfaceControl stopLayer, Rect samplingArea) {
Preconditions.checkArgument(displayId == Display.DEFAULT_DISPLAY,
"default display only for now");
- nativeRegister(listener.mNativeListener, stopLayer, samplingArea.left, samplingArea.top,
- samplingArea.right, samplingArea.bottom);
+ long nativeStopLayerObject = stopLayer != null ? stopLayer.mNativeObject : 0;
+ nativeRegister(listener.mNativeListener, nativeStopLayerObject, samplingArea.left,
+ samplingArea.top, samplingArea.right, samplingArea.bottom);
}
/**
@@ -84,7 +84,7 @@
private static native long nativeCreate(CompositionSamplingListener thiz);
private static native void nativeDestroy(long ptr);
- private static native void nativeRegister(long ptr, IBinder stopLayer,
+ private static native void nativeRegister(long ptr, long stopLayerObject,
int samplingAreaLeft, int top, int right, int bottom);
private static native void nativeUnregister(long ptr);
}
diff --git a/core/java/android/view/InputWindowHandle.java b/core/java/android/view/InputWindowHandle.java
index 16a6412..10a9aaa 100644
--- a/core/java/android/view/InputWindowHandle.java
+++ b/core/java/android/view/InputWindowHandle.java
@@ -109,10 +109,10 @@
* bounds of a parent window. That is the window should receive touch events outside its
* window but be limited to its stack bounds, such as in the case of split screen.
*/
- public WeakReference<IBinder> touchableRegionCropHandle = new WeakReference<>(null);
+ public WeakReference<SurfaceControl> touchableRegionSurfaceControl = new WeakReference<>(null);
/**
- * Replace {@link touchableRegion} with the bounds of {@link touchableRegionCropHandle}. If
+ * Replace {@link touchableRegion} with the bounds of {@link touchableRegionSurfaceControl}. If
* the handle is {@code null}, the bounds of the surface associated with this window is used
* as the touchable region.
*/
@@ -164,8 +164,6 @@
* Crop the window touchable region to the bounds of the surface provided.
*/
public void setTouchableRegionCrop(@Nullable SurfaceControl bounds) {
- if (bounds != null) {
- touchableRegionCropHandle = new WeakReference<>(bounds.getHandle());
- }
+ touchableRegionSurfaceControl = new WeakReference<>(bounds);
}
}
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java
index c1633ae5..d1ab7c99 100644
--- a/core/java/android/view/SurfaceControl.java
+++ b/core/java/android/view/SurfaceControl.java
@@ -84,14 +84,13 @@
private static native long nativeCopyFromSurfaceControl(long nativeObject);
private static native void nativeWriteToParcel(long nativeObject, Parcel out);
private static native void nativeRelease(long nativeObject);
- private static native void nativeDestroy(long nativeObject);
private static native void nativeDisconnect(long nativeObject);
private static native ScreenshotGraphicBuffer nativeScreenshot(IBinder displayToken,
Rect sourceCrop, int width, int height, boolean useIdentityTransform, int rotation,
boolean captureSecureLayers);
private static native ScreenshotGraphicBuffer nativeCaptureLayers(IBinder displayToken,
- IBinder layerHandleToken, Rect sourceCrop, float frameScale, IBinder[] excludeLayers);
+ long layerObject, Rect sourceCrop, float frameScale, long[] excludeLayerObjects);
private static native long nativeCreateTransaction();
private static native long nativeGetNativeTransactionFinalizer();
@@ -103,7 +102,7 @@
private static native void nativeSetLayer(long transactionObj, long nativeObject, int zorder);
private static native void nativeSetRelativeLayer(long transactionObj, long nativeObject,
- IBinder relativeTo, int zorder);
+ long relativeToObject, int zorder);
private static native void nativeSetPosition(long transactionObj, long nativeObject,
float x, float y);
private static native void nativeSetGeometryAppliesWithResize(long transactionObj,
@@ -173,18 +172,17 @@
private static native void nativeSetDisplayPowerMode(
IBinder displayToken, int mode);
private static native void nativeDeferTransactionUntil(long transactionObj, long nativeObject,
- IBinder handle, long frame);
+ long barrierObject, long frame);
private static native void nativeDeferTransactionUntilSurface(long transactionObj,
long nativeObject,
long surfaceObject, long frame);
private static native void nativeReparentChildren(long transactionObj, long nativeObject,
- IBinder handle);
+ long newParentObject);
private static native void nativeReparent(long transactionObj, long nativeObject,
long newParentNativeObject);
private static native void nativeSeverChildren(long transactionObj, long nativeObject);
private static native void nativeSetOverrideScalingMode(long transactionObj, long nativeObject,
int scalingMode);
- private static native IBinder nativeGetHandle(long nativeObject);
private static native boolean nativeGetTransformToDisplayInverse(long nativeObject);
private static native Display.HdrCapabilities nativeGetHdrCapabilities(IBinder displayToken);
@@ -932,19 +930,6 @@
}
/**
- * Release the local resources like {@link #release} but also
- * remove the Surface from the screen.
- * @hide
- */
- public void remove() {
- if (mNativeObject != 0) {
- nativeDestroy(mNativeObject);
- mNativeObject = 0;
- }
- mCloseGuard.close();
- }
-
- /**
* Disconnect any client still connected to the surface.
* @hide
*/
@@ -1023,9 +1008,9 @@
/**
* @hide
*/
- public void deferTransactionUntil(IBinder handle, long frame) {
+ public void deferTransactionUntil(SurfaceControl barrier, long frame) {
synchronized(SurfaceControl.class) {
- sGlobalTransaction.deferTransactionUntil(this, handle, frame);
+ sGlobalTransaction.deferTransactionUntil(this, barrier, frame);
}
}
@@ -1041,9 +1026,9 @@
/**
* @hide
*/
- public void reparentChildren(IBinder newParentHandle) {
+ public void reparentChildren(SurfaceControl newParent) {
synchronized(SurfaceControl.class) {
- sGlobalTransaction.reparentChildren(this, newParentHandle);
+ sGlobalTransaction.reparentChildren(this, newParent);
}
}
@@ -1078,13 +1063,6 @@
/**
* @hide
*/
- public IBinder getHandle() {
- return nativeGetHandle(mNativeObject);
- }
-
- /**
- * @hide
- */
public static void setAnimationTransaction() {
synchronized (SurfaceControl.class) {
sGlobalTransaction.setAnimationTransaction();
@@ -1989,7 +1967,7 @@
/**
* Captures a layer and its children and returns a {@link GraphicBuffer} with the content.
*
- * @param layerHandleToken The root layer to capture.
+ * @param layer The root layer to capture.
* @param sourceCrop The portion of the root surface to capture; caller may pass in 'new
* Rect()' or null if no cropping is desired.
* @param frameScale The desired scale of the returned buffer; the raw
@@ -1998,20 +1976,25 @@
* @return Returns a GraphicBuffer that contains the layer capture.
* @hide
*/
- public static ScreenshotGraphicBuffer captureLayers(IBinder layerHandleToken, Rect sourceCrop,
+ public static ScreenshotGraphicBuffer captureLayers(SurfaceControl layer, Rect sourceCrop,
float frameScale) {
final IBinder displayToken = SurfaceControl.getInternalDisplayToken();
- return nativeCaptureLayers(displayToken, layerHandleToken, sourceCrop, frameScale, null);
+ return nativeCaptureLayers(displayToken, layer.mNativeObject, sourceCrop, frameScale, null);
}
/**
* Like {@link captureLayers} but with an array of layer handles to exclude.
* @hide
*/
- public static ScreenshotGraphicBuffer captureLayersExcluding(IBinder layerHandleToken,
- Rect sourceCrop, float frameScale, IBinder[] exclude) {
+ public static ScreenshotGraphicBuffer captureLayersExcluding(SurfaceControl layer,
+ Rect sourceCrop, float frameScale, SurfaceControl[] exclude) {
final IBinder displayToken = SurfaceControl.getInternalDisplayToken();
- return nativeCaptureLayers(displayToken, layerHandleToken, sourceCrop, frameScale, exclude);
+ long[] nativeExcludeObjects = new long[exclude.length];
+ for (int i = 0; i < exclude.length; i++) {
+ nativeExcludeObjects[i] = exclude[i].mNativeObject;
+ }
+ return nativeCaptureLayers(displayToken, layer.mNativeObject, sourceCrop, frameScale,
+ nativeExcludeObjects);
}
/**
@@ -2228,8 +2211,7 @@
*/
public Transaction setRelativeLayer(SurfaceControl sc, SurfaceControl relativeTo, int z) {
sc.checkNotReleased();
- nativeSetRelativeLayer(mNativeObject, sc.mNativeObject,
- relativeTo.getHandle(), z);
+ nativeSetRelativeLayer(mNativeObject, sc.mNativeObject, relativeTo.mNativeObject, z);
return this;
}
@@ -2416,13 +2398,14 @@
* @hide
*/
@UnsupportedAppUsage
- public Transaction deferTransactionUntil(SurfaceControl sc, IBinder handle,
+ public Transaction deferTransactionUntil(SurfaceControl sc, SurfaceControl barrier,
long frameNumber) {
if (frameNumber < 0) {
return this;
}
sc.checkNotReleased();
- nativeDeferTransactionUntil(mNativeObject, sc.mNativeObject, handle, frameNumber);
+ nativeDeferTransactionUntil(mNativeObject, sc.mNativeObject, barrier.mNativeObject,
+ frameNumber);
return this;
}
@@ -2444,9 +2427,9 @@
/**
* @hide
*/
- public Transaction reparentChildren(SurfaceControl sc, IBinder newParentHandle) {
+ public Transaction reparentChildren(SurfaceControl sc, SurfaceControl newParent) {
sc.checkNotReleased();
- nativeReparentChildren(mNativeObject, sc.mNativeObject, newParentHandle);
+ nativeReparentChildren(mNativeObject, sc.mNativeObject, newParent.mNativeObject);
return this;
}
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index f765471..f661e06 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -200,6 +200,7 @@
private int mPendingReportDraws;
private SurfaceControl.Transaction mRtTransaction = new SurfaceControl.Transaction();
+ private SurfaceControl.Transaction mTmpTransaction = new SurfaceControl.Transaction();
public SurfaceView(Context context) {
this(context, null);
@@ -339,7 +340,7 @@
updateSurface();
if (mSurfaceControl != null) {
- mSurfaceControl.remove();
+ mTmpTransaction.remove(mSurfaceControl).apply();
}
mSurfaceControl = null;
@@ -534,13 +535,14 @@
private void releaseSurfaces() {
if (mSurfaceControl != null) {
- mSurfaceControl.remove();
+ mTmpTransaction.remove(mSurfaceControl);
mSurfaceControl = null;
}
if (mBackgroundControl != null) {
- mBackgroundControl.remove();
+ mTmpTransaction.remove(mBackgroundControl);
mBackgroundControl = null;
}
+ mTmpTransaction.apply();
}
/** @hide */
@@ -849,7 +851,7 @@
}
if (mDeferredDestroySurfaceControl != null) {
- mDeferredDestroySurfaceControl.remove();
+ mTmpTransaction.remove(mDeferredDestroySurfaceControl).apply();
mDeferredDestroySurfaceControl = null;
}
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 6b30f5e..fa1c05d 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -1631,7 +1631,7 @@
mSurfaceSession = null;
if (mBoundsSurfaceControl != null) {
- mBoundsSurfaceControl.remove();
+ mTransaction.remove(mBoundsSurfaceControl).apply();
mBoundsSurface.release();
mBoundsSurfaceControl = null;
}
diff --git a/core/java/android/widget/Magnifier.java b/core/java/android/widget/Magnifier.java
index ccafa64..d3c6972 100644
--- a/core/java/android/widget/Magnifier.java
+++ b/core/java/android/widget/Magnifier.java
@@ -1035,7 +1035,7 @@
// Destroy the renderer. This will not proceed until pending frame callbacks complete.
mRenderer.destroy();
mSurface.destroy();
- mSurfaceControl.remove();
+ new SurfaceControl.Transaction().remove(mSurfaceControl).apply();
mSurfaceSession.kill();
mHandler.removeCallbacks(mMagnifierUpdater);
if (mBitmap != null) {
diff --git a/core/jni/android_hardware_input_InputWindowHandle.cpp b/core/jni/android_hardware_input_InputWindowHandle.cpp
index a1d1d4f..98680fa1e 100644
--- a/core/jni/android_hardware_input_InputWindowHandle.cpp
+++ b/core/jni/android_hardware_input_InputWindowHandle.cpp
@@ -23,6 +23,7 @@
#include <utils/threads.h>
#include <android/graphics/Region.h>
+#include <gui/SurfaceControl.h>
#include <ui/Region.h>
#include "android_hardware_input_InputWindowHandle.h"
@@ -32,8 +33,9 @@
namespace android {
struct WeakRefHandleField {
- jfieldID handle;
+ jfieldID ctrl;
jmethodID get;
+ jfieldID mNativeObject;
};
static struct {
@@ -63,7 +65,7 @@
jfieldID displayId;
jfieldID portalToDisplayId;
jfieldID replaceTouchableRegionWithCrop;
- WeakRefHandleField touchableRegionCropHandle;
+ WeakRefHandleField touchableRegionSurfaceControl;
} gInputWindowHandleClassInfo;
static Mutex gHandleMutex;
@@ -172,19 +174,27 @@
mInfo.replaceTouchableRegionWithCrop = env->GetBooleanField(obj,
gInputWindowHandleClassInfo.replaceTouchableRegionWithCrop);
- jobject handleObj = env->GetObjectField(obj,
- gInputWindowHandleClassInfo.touchableRegionCropHandle.handle);
- if (handleObj) {
+ jobject weakSurfaceCtrl = env->GetObjectField(obj,
+ gInputWindowHandleClassInfo.touchableRegionSurfaceControl.ctrl);
+ bool touchableRegionCropHandleSet = false;
+ if (weakSurfaceCtrl) {
// Promote java weak reference.
- jobject strongHandleObj = env->CallObjectMethod(handleObj,
- gInputWindowHandleClassInfo.touchableRegionCropHandle.get);
- if (strongHandleObj) {
- mInfo.touchableRegionCropHandle = ibinderForJavaObject(env, strongHandleObj);
- env->DeleteLocalRef(strongHandleObj);
- } else {
- mInfo.touchableRegionCropHandle.clear();
+ jobject strongSurfaceCtrl = env->CallObjectMethod(weakSurfaceCtrl,
+ gInputWindowHandleClassInfo.touchableRegionSurfaceControl.get);
+ if (strongSurfaceCtrl) {
+ jlong mNativeObject = env->GetLongField(strongSurfaceCtrl,
+ gInputWindowHandleClassInfo.touchableRegionSurfaceControl.mNativeObject);
+ if (mNativeObject) {
+ auto ctrl = reinterpret_cast<SurfaceControl *>(mNativeObject);
+ mInfo.touchableRegionCropHandle = ctrl->getHandle();
+ touchableRegionCropHandleSet = true;
+ }
+ env->DeleteLocalRef(strongSurfaceCtrl);
}
- env->DeleteLocalRef(handleObj);
+ env->DeleteLocalRef(weakSurfaceCtrl);
+ }
+ if (!touchableRegionCropHandleSet) {
+ mInfo.touchableRegionCropHandle.clear();
}
env->DeleteLocalRef(obj);
@@ -340,11 +350,17 @@
jclass weakRefClazz;
FIND_CLASS(weakRefClazz, "java/lang/ref/Reference");
- GET_METHOD_ID(gInputWindowHandleClassInfo.touchableRegionCropHandle.get, weakRefClazz,
+ GET_METHOD_ID(gInputWindowHandleClassInfo.touchableRegionSurfaceControl.get, weakRefClazz,
"get", "()Ljava/lang/Object;")
- GET_FIELD_ID(gInputWindowHandleClassInfo.touchableRegionCropHandle.handle, clazz,
- "touchableRegionCropHandle", "Ljava/lang/ref/WeakReference;");
+ GET_FIELD_ID(gInputWindowHandleClassInfo.touchableRegionSurfaceControl.ctrl, clazz,
+ "touchableRegionSurfaceControl", "Ljava/lang/ref/WeakReference;");
+
+ jclass surfaceControlClazz;
+ FIND_CLASS(surfaceControlClazz, "android/view/SurfaceControl");
+ GET_FIELD_ID(gInputWindowHandleClassInfo.touchableRegionSurfaceControl.mNativeObject,
+ surfaceControlClazz, "mNativeObject", "J");
+
return 0;
}
diff --git a/core/jni/android_view_CompositionSamplingListener.cpp b/core/jni/android_view_CompositionSamplingListener.cpp
index d489ae0..783b0d4 100644
--- a/core/jni/android_view_CompositionSamplingListener.cpp
+++ b/core/jni/android_view_CompositionSamplingListener.cpp
@@ -87,11 +87,11 @@
listener->decStrong((void*)nativeCreate);
}
-void nativeRegister(JNIEnv* env, jclass clazz, jlong ptr, jobject stopLayerTokenObj,
+void nativeRegister(JNIEnv* env, jclass clazz, jlong ptr, jlong stopLayerObj,
jint left, jint top, jint right, jint bottom) {
sp<CompositionSamplingListener> listener = reinterpret_cast<CompositionSamplingListener*>(ptr);
- sp<IBinder> stopLayerHandle = ibinderForJavaObject(env, stopLayerTokenObj);
-
+ auto stopLayer = reinterpret_cast<SurfaceControl*>(stopLayerObj);
+ sp<IBinder> stopLayerHandle = stopLayer != nullptr ? stopLayer->getHandle() : nullptr;
if (SurfaceComposerClient::addRegionSamplingListener(
Rect(left, top, right, bottom), stopLayerHandle, listener) != OK) {
constexpr auto error_msg = "Couldn't addRegionSamplingListener";
@@ -116,7 +116,7 @@
(void*)nativeCreate },
{ "nativeDestroy", "(J)V",
(void*)nativeDestroy },
- { "nativeRegister", "(JLandroid/os/IBinder;IIII)V",
+ { "nativeRegister", "(JJIIII)V",
(void*)nativeRegister },
{ "nativeUnregister", "(J)V",
(void*)nativeUnregister }
diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp
index f55077a..78dd1aa 100644
--- a/core/jni/android_view_SurfaceControl.cpp
+++ b/core/jni/android_view_SurfaceControl.cpp
@@ -217,12 +217,6 @@
ctrl->decStrong((void *)nativeCreate);
}
-static void nativeDestroy(JNIEnv* env, jclass clazz, jlong nativeObject) {
- sp<SurfaceControl> ctrl(reinterpret_cast<SurfaceControl *>(nativeObject));
- ctrl->destroy();
- ctrl->decStrong((void *)nativeCreate);
-}
-
static void nativeDisconnect(JNIEnv* env, jclass clazz, jlong nativeObject) {
SurfaceControl* const ctrl = reinterpret_cast<SurfaceControl *>(nativeObject);
if (ctrl != NULL) {
@@ -272,11 +266,11 @@
}
static jobject nativeCaptureLayers(JNIEnv* env, jclass clazz, jobject displayTokenObj,
- jobject layerHandleToken, jobject sourceCropObj, jfloat frameScale,
- jobjectArray excludeArray) {
+ jlong layerObject, jobject sourceCropObj, jfloat frameScale,
+ jlongArray excludeObjectArray) {
- sp<IBinder> layerHandle = ibinderForJavaObject(env, layerHandleToken);
- if (layerHandle == NULL) {
+ auto layer = reinterpret_cast<SurfaceControl *>(layerObject);
+ if (layer == NULL) {
return NULL;
}
@@ -286,19 +280,20 @@
}
std::unordered_set<sp<IBinder>,ISurfaceComposer::SpHash<IBinder>> excludeHandles;
- if (excludeArray != NULL) {
- const jsize len = env->GetArrayLength(excludeArray);
+ if (excludeObjectArray != NULL) {
+ const jsize len = env->GetArrayLength(excludeObjectArray);
excludeHandles.reserve(len);
+ const jlong* objects = env->GetLongArrayElements(excludeObjectArray, nullptr);
for (jsize i = 0; i < len; i++) {
- jobject obj = env->GetObjectArrayElement(excludeArray, i);
- if (obj == nullptr) {
+ auto excludeObject = reinterpret_cast<SurfaceControl *>(objects[i]);
+ if (excludeObject == nullptr) {
jniThrowNullPointerException(env, "Exclude layer is null");
return NULL;
}
- sp<IBinder> excludeHandle = ibinderForJavaObject(env, obj);
- excludeHandles.emplace(excludeHandle);
+ excludeHandles.emplace(excludeObject->getHandle());
}
+ env->ReleaseLongArrayElements(excludeObjectArray, const_cast<jlong*>(objects), JNI_ABORT);
}
sp<GraphicBuffer> buffer;
@@ -308,7 +303,7 @@
const ui::ColorMode colorMode = SurfaceComposerClient::getActiveColorMode(displayToken);
dataspace = pickDataspaceFromColorMode(colorMode);
}
- status_t res = ScreenshotClient::captureChildLayers(layerHandle, dataspace,
+ status_t res = ScreenshotClient::captureChildLayers(layer->getHandle(), dataspace,
ui::PixelFormat::RGBA_8888, sourceCrop,
excludeHandles, frameScale, &buffer);
if (res != NO_ERROR) {
@@ -360,15 +355,12 @@
static void nativeSetRelativeLayer(JNIEnv* env, jclass clazz, jlong transactionObj,
jlong nativeObject,
- jobject relativeTo, jint zorder) {
+ jlong relativeToObject, jint zorder) {
auto ctrl = reinterpret_cast<SurfaceControl *>(nativeObject);
- sp<IBinder> handle = ibinderForJavaObject(env, relativeTo);
-
- {
- auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj);
- transaction->setRelativeLayer(ctrl, handle, zorder);
- }
+ auto relative = reinterpret_cast<SurfaceControl *>(relativeToObject);
+ auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj);
+ transaction->setRelativeLayer(ctrl, relative->getHandle(), zorder);
}
static void nativeSetPosition(JNIEnv* env, jclass clazz, jlong transactionObj,
@@ -465,7 +457,7 @@
env, inputWindow);
handle->updateInfo();
- SurfaceControl* const ctrl = reinterpret_cast<SurfaceControl *>(nativeObject);
+ auto ctrl = reinterpret_cast<SurfaceControl *>(nativeObject);
transaction->setInputWindowInfo(ctrl, *handle->getInfo());
}
@@ -1109,15 +1101,11 @@
}
static void nativeDeferTransactionUntil(JNIEnv* env, jclass clazz, jlong transactionObj,
- jlong nativeObject,
- jobject handleObject, jlong frameNumber) {
+ jlong nativeObject, jlong barrierObject, jlong frameNumber) {
auto ctrl = reinterpret_cast<SurfaceControl *>(nativeObject);
- sp<IBinder> handle = ibinderForJavaObject(env, handleObject);
-
- {
- auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj);
- transaction->deferTransactionUntil_legacy(ctrl, handle, frameNumber);
- }
+ auto barrier = reinterpret_cast<SurfaceControl *>(barrierObject);
+ auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj);
+ transaction->deferTransactionUntil_legacy(ctrl, barrier->getHandle(), frameNumber);
}
static void nativeDeferTransactionUntilSurface(JNIEnv* env, jclass clazz, jlong transactionObj,
@@ -1133,15 +1121,12 @@
static void nativeReparentChildren(JNIEnv* env, jclass clazz, jlong transactionObj,
jlong nativeObject,
- jobject newParentObject) {
+ jlong newParentObject) {
auto ctrl = reinterpret_cast<SurfaceControl *>(nativeObject);
- sp<IBinder> handle = ibinderForJavaObject(env, newParentObject);
-
- {
- auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj);
- transaction->reparentChildren(ctrl, handle);
- }
+ auto newParent = reinterpret_cast<SurfaceControl *>(newParentObject);
+ auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj);
+ transaction->reparentChildren(ctrl, newParent->getHandle());
}
static void nativeReparent(JNIEnv* env, jclass clazz, jlong transactionObj,
@@ -1149,11 +1134,8 @@
jlong newParentObject) {
auto ctrl = reinterpret_cast<SurfaceControl *>(nativeObject);
auto newParent = reinterpret_cast<SurfaceControl *>(newParentObject);
-
- {
- auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj);
- transaction->reparent(ctrl, newParent != NULL ? newParent->getHandle() : NULL);
- }
+ auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj);
+ transaction->reparent(ctrl, newParent != NULL ? newParent->getHandle() : NULL);
}
static void nativeSeverChildren(JNIEnv* env, jclass clazz, jlong transactionObj,
@@ -1173,11 +1155,6 @@
transaction->setOverrideScalingMode(ctrl, scalingMode);
}
-static jobject nativeGetHandle(JNIEnv* env, jclass clazz, jlong nativeObject) {
- auto ctrl = reinterpret_cast<SurfaceControl *>(nativeObject);
- return javaObjectForIBinder(env, ctrl->getHandle());
-}
-
static jobject nativeGetHdrCapabilities(JNIEnv* env, jclass clazz, jobject tokenObject) {
sp<IBinder> token(ibinderForJavaObject(env, tokenObject));
if (token == NULL) return NULL;
@@ -1295,8 +1272,6 @@
(void*)nativeWriteToParcel },
{"nativeRelease", "(J)V",
(void*)nativeRelease },
- {"nativeDestroy", "(J)V",
- (void*)nativeDestroy },
{"nativeDisconnect", "(J)V",
(void*)nativeDisconnect },
{"nativeCreateTransaction", "()J",
@@ -1313,7 +1288,7 @@
(void*)nativeSetEarlyWakeup },
{"nativeSetLayer", "(JJI)V",
(void*)nativeSetLayer },
- {"nativeSetRelativeLayer", "(JJLandroid/os/IBinder;I)V",
+ {"nativeSetRelativeLayer", "(JJJI)V",
(void*)nativeSetRelativeLayer },
{"nativeSetPosition", "(JJFF)V",
(void*)nativeSetPosition },
@@ -1391,11 +1366,11 @@
(void*)nativeSetDisplayPowerMode },
{"nativeGetProtectedContentSupport", "()Z",
(void*)nativeGetProtectedContentSupport },
- {"nativeDeferTransactionUntil", "(JJLandroid/os/IBinder;J)V",
+ {"nativeDeferTransactionUntil", "(JJJJ)V",
(void*)nativeDeferTransactionUntil },
{"nativeDeferTransactionUntilSurface", "(JJJJ)V",
(void*)nativeDeferTransactionUntilSurface },
- {"nativeReparentChildren", "(JJLandroid/os/IBinder;)V",
+ {"nativeReparentChildren", "(JJJ)V",
(void*)nativeReparentChildren } ,
{"nativeReparent", "(JJJ)V",
(void*)nativeReparent },
@@ -1403,15 +1378,13 @@
(void*)nativeSeverChildren } ,
{"nativeSetOverrideScalingMode", "(JJI)V",
(void*)nativeSetOverrideScalingMode },
- {"nativeGetHandle", "(J)Landroid/os/IBinder;",
- (void*)nativeGetHandle },
{"nativeScreenshot",
"(Landroid/os/IBinder;Landroid/graphics/Rect;IIZIZ)"
"Landroid/view/SurfaceControl$ScreenshotGraphicBuffer;",
(void*)nativeScreenshot },
{"nativeCaptureLayers",
- "(Landroid/os/IBinder;Landroid/os/IBinder;Landroid/graphics/Rect;"
- "F[Landroid/os/IBinder;)"
+ "(Landroid/os/IBinder;JLandroid/graphics/Rect;"
+ "F[J)"
"Landroid/view/SurfaceControl$ScreenshotGraphicBuffer;",
(void*)nativeCaptureLayers },
{"nativeSetInputWindowInfo", "(JJLandroid/view/InputWindowHandle;)V",
diff --git a/core/tests/coretests/src/android/view/CompositionSamplingListenerTest.java b/core/tests/coretests/src/android/view/CompositionSamplingListenerTest.java
index 75a2e8a..729a555 100644
--- a/core/tests/coretests/src/android/view/CompositionSamplingListenerTest.java
+++ b/core/tests/coretests/src/android/view/CompositionSamplingListenerTest.java
@@ -19,7 +19,6 @@
import static android.view.Display.DEFAULT_DISPLAY;
import android.graphics.Rect;
-import android.os.Binder;
import android.platform.test.annotations.Presubmit;
import androidx.test.filters.SmallTest;
@@ -35,7 +34,7 @@
@Test
public void testRegisterUnregister() {
- CompositionSamplingListener.register(mListener, DEFAULT_DISPLAY, new Binder(),
+ CompositionSamplingListener.register(mListener, DEFAULT_DISPLAY, new SurfaceControl(),
new Rect(1, 1, 10, 10));
CompositionSamplingListener.unregister(mListener);
}
diff --git a/libs/hwui/pipeline/skia/ReorderBarrierDrawables.cpp b/libs/hwui/pipeline/skia/ReorderBarrierDrawables.cpp
index 5133bae..3b8caeb 100644
--- a/libs/hwui/pipeline/skia/ReorderBarrierDrawables.cpp
+++ b/libs/hwui/pipeline/skia/ReorderBarrierDrawables.cpp
@@ -27,7 +27,7 @@
namespace skiapipeline {
StartReorderBarrierDrawable::StartReorderBarrierDrawable(SkiaDisplayList* data)
- : mEndChildIndex(0), mBeginChildIndex(data->mChildNodes.size()), mDisplayList(data) {}
+ : mEndChildIndex(-1), mBeginChildIndex(data->mChildNodes.size()), mDisplayList(data) {}
void StartReorderBarrierDrawable::onDraw(SkCanvas* canvas) {
if (mChildren.empty()) {
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 af32f48..073688b 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,7 +18,6 @@
import android.graphics.Matrix;
import android.graphics.Rect;
-import android.os.IBinder;
import android.view.Surface;
import android.view.SurfaceControl.Transaction;
@@ -88,12 +87,6 @@
}
public TransactionCompat deferTransactionUntil(SurfaceControlCompat surfaceControl,
- IBinder handle, long frameNumber) {
- mTransaction.deferTransactionUntil(surfaceControl.mSurfaceControl, handle, frameNumber);
- return this;
- }
-
- public TransactionCompat deferTransactionUntil(SurfaceControlCompat surfaceControl,
Surface barrier, long frameNumber) {
mTransaction.deferTransactionUntilSurface(surfaceControl.mSurfaceControl, barrier,
frameNumber);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavBarTintController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavBarTintController.java
index bfd17b9..8bb8ca2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavBarTintController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavBarTintController.java
@@ -159,7 +159,7 @@
}
mSamplingListenerRegistered = true;
CompositionSamplingListener.register(mSamplingListener, DEFAULT_DISPLAY,
- mNavigationBarView.getViewRootImpl().getSurfaceControl().getHandle(),
+ mNavigationBarView.getViewRootImpl().getSurfaceControl(),
mSamplingBounds);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/RegionSamplingHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/RegionSamplingHelper.java
index 2b0bb21..8026f65 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/RegionSamplingHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/RegionSamplingHelper.java
@@ -18,12 +18,9 @@
import static android.view.Display.DEFAULT_DISPLAY;
-import android.annotation.Nullable;
import android.content.res.Resources;
import android.graphics.Rect;
import android.os.Handler;
-import android.os.IBinder;
-import android.provider.Settings;
import android.view.CompositionSamplingListener;
import android.view.SurfaceControl;
import android.view.View;
@@ -181,8 +178,7 @@
unregisterSamplingListener();
mSamplingListenerRegistered = true;
CompositionSamplingListener.register(mSamplingListener, DEFAULT_DISPLAY,
- stopLayerControl != null ? stopLayerControl.getHandle() : null,
- mSamplingRequestBounds);
+ stopLayerControl, mSamplingRequestBounds);
mRegisteredSamplingBounds.set(mSamplingRequestBounds);
mRegisteredStopLayer = stopLayerControl;
}
diff --git a/services/core/java/com/android/server/display/ColorFade.java b/services/core/java/com/android/server/display/ColorFade.java
index 36d9c0e..7be1b8a 100644
--- a/services/core/java/com/android/server/display/ColorFade.java
+++ b/services/core/java/com/android/server/display/ColorFade.java
@@ -634,13 +634,8 @@
if (mSurfaceControl != null) {
mSurfaceLayout.dispose();
mSurfaceLayout = null;
- SurfaceControl.openTransaction();
- try {
- mSurfaceControl.remove();
- mSurface.release();
- } finally {
- SurfaceControl.closeTransaction();
- }
+ new Transaction().remove(mSurfaceControl).apply();
+ mSurface.release();
mSurfaceControl = null;
mSurfaceVisible = false;
mSurfaceAlpha = 0f;
diff --git a/services/core/java/com/android/server/notification/PreferencesHelper.java b/services/core/java/com/android/server/notification/PreferencesHelper.java
index 7b45a1b..92ac1d4 100644
--- a/services/core/java/com/android/server/notification/PreferencesHelper.java
+++ b/services/core/java/com/android/server/notification/PreferencesHelper.java
@@ -17,6 +17,7 @@
package com.android.server.notification;
import static android.app.NotificationManager.IMPORTANCE_NONE;
+import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED;
import android.annotation.IntDef;
import android.annotation.NonNull;
@@ -686,6 +687,11 @@
}
}
+ if (existing.getOriginalImportance() == IMPORTANCE_UNSPECIFIED) {
+ existing.setOriginalImportance(channel.getImportance());
+ needsPolicyFileChange = true;
+ }
+
updateConfig();
return needsPolicyFileChange;
}
@@ -719,7 +725,7 @@
if (!r.showBadge) {
channel.setShowBadge(false);
}
-
+ channel.setOriginalImportance(channel.getImportance());
r.channels.put(channel.getId(), channel);
if (channel.canBypassDnd() != mAreChannelsBypassingDnd) {
updateChannelsBypassingDnd(mContext.getUserId());
diff --git a/services/core/java/com/android/server/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java
index a2891e9..bace7e3 100644
--- a/services/core/java/com/android/server/wm/AccessibilityController.java
+++ b/services/core/java/com/android/server/wm/AccessibilityController.java
@@ -905,7 +905,7 @@
}
public void releaseSurface() {
- mSurfaceControl.remove();
+ mService.mTransactionFactory.make().remove(mSurfaceControl).apply();
mSurface.release();
}
diff --git a/services/core/java/com/android/server/wm/BlackFrame.java b/services/core/java/com/android/server/wm/BlackFrame.java
index 84ba5ca9..7fc17e1 100644
--- a/services/core/java/com/android/server/wm/BlackFrame.java
+++ b/services/core/java/com/android/server/wm/BlackFrame.java
@@ -97,6 +97,7 @@
final BlackSurface[] mBlackSurfaces = new BlackSurface[4];
final boolean mForceDefaultOrientation;
+ private final TransactionFactory mTransactionFactory;
public void printTo(String prefix, PrintWriter pw) {
pw.print(prefix); pw.print("Outer: "); mOuterRect.printShortString(pw);
@@ -111,11 +112,12 @@
}
}
- public BlackFrame(SurfaceControl.Transaction t,
- Rect outer, Rect inner, int layer, DisplayContent dc,
- boolean forceDefaultOrientation) throws OutOfResourcesException {
+ public BlackFrame(TransactionFactory factory, SurfaceControl.Transaction t, Rect outer,
+ Rect inner, int layer, DisplayContent dc, boolean forceDefaultOrientation)
+ throws OutOfResourcesException {
boolean success = false;
+ mTransactionFactory = factory;
mForceDefaultOrientation = forceDefaultOrientation;
// TODO: Why do we use 4 surfaces instead of just one big one behind the screenshot?
@@ -149,14 +151,16 @@
public void kill() {
if (mBlackSurfaces != null) {
+ SurfaceControl.Transaction t = mTransactionFactory.make();
for (int i=0; i<mBlackSurfaces.length; i++) {
if (mBlackSurfaces[i] != null) {
if (SHOW_TRANSACTIONS || SHOW_SURFACE_ALLOC) Slog.i(TAG_WM,
" BLACK " + mBlackSurfaces[i].surface + ": DESTROY");
- mBlackSurfaces[i].surface.remove();
+ t.remove(mBlackSurfaces[i].surface);
mBlackSurfaces[i] = null;
}
}
+ t.apply();
}
}
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 4dcb58a..57ed92d 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -4554,13 +4554,15 @@
.show(mSplitScreenDividerAnchor);
scheduleAnimation();
} else {
- mAppAnimationLayer.remove();
+ mWmService.mTransactionFactory.make()
+ .remove(mAppAnimationLayer)
+ .remove(mBoostedAppAnimationLayer)
+ .remove(mHomeAppAnimationLayer)
+ .remove(mSplitScreenDividerAnchor)
+ .apply();
mAppAnimationLayer = null;
- mBoostedAppAnimationLayer.remove();
mBoostedAppAnimationLayer = null;
- mHomeAppAnimationLayer.remove();
mHomeAppAnimationLayer = null;
- mSplitScreenDividerAnchor.remove();
mSplitScreenDividerAnchor = null;
}
}
diff --git a/services/core/java/com/android/server/wm/Letterbox.java b/services/core/java/com/android/server/wm/Letterbox.java
index c3ea72f..bb035d5 100644
--- a/services/core/java/com/android/server/wm/Letterbox.java
+++ b/services/core/java/com/android/server/wm/Letterbox.java
@@ -261,7 +261,7 @@
public void remove() {
if (mSurface != null) {
- mSurface.remove();
+ new SurfaceControl.Transaction().remove(mSurface).apply();
mSurface = null;
}
if (mInputInterceptor != null) {
diff --git a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java
index b90d602..fe4c9a4 100644
--- a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java
+++ b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java
@@ -557,7 +557,7 @@
Rect outer = new Rect(-mOriginalWidth*1, -mOriginalHeight*1,
mOriginalWidth*2, mOriginalHeight*2);
Rect inner = new Rect(0, 0, mOriginalWidth, mOriginalHeight);
- mCustomBlackFrame = new BlackFrame(t, outer, inner,
+ mCustomBlackFrame = new BlackFrame(mService.mTransactionFactory, t, outer, inner,
SCREEN_FREEZE_LAYER_CUSTOM, mDisplayContent, false);
mCustomBlackFrame.setMatrix(t, mFrameInitialMatrix);
} catch (OutOfResourcesException e) {
@@ -588,7 +588,7 @@
mOriginalWidth*2, mOriginalHeight*2);
inner = new Rect(0, 0, mOriginalWidth, mOriginalHeight);
}
- mExitingBlackFrame = new BlackFrame(t, outer, inner,
+ mExitingBlackFrame = new BlackFrame(mService.mTransactionFactory, t, outer, inner,
SCREEN_FREEZE_LAYER_EXIT, mDisplayContent, mForceDefaultOrientation);
mExitingBlackFrame.setMatrix(t, mFrameInitialMatrix);
} catch (OutOfResourcesException e) {
@@ -601,7 +601,7 @@
Rect outer = new Rect(-finalWidth*1, -finalHeight*1,
finalWidth*2, finalHeight*2);
Rect inner = new Rect(0, 0, finalWidth, finalHeight);
- mEnteringBlackFrame = new BlackFrame(t, outer, inner,
+ mEnteringBlackFrame = new BlackFrame(mService.mTransactionFactory, t, outer, inner,
SCREEN_FREEZE_LAYER_ENTER, mDisplayContent, false);
} catch (OutOfResourcesException e) {
Slog.w(TAG, "Unable to allocate black surface", e);
@@ -639,7 +639,7 @@
if (SHOW_TRANSACTIONS ||
SHOW_SURFACE_ALLOC) Slog.i(TAG_WM,
" FREEZE " + mSurfaceControl + ": DESTROY");
- mSurfaceControl.remove();
+ mService.mTransactionFactory.make().remove(mSurfaceControl).apply();
mSurfaceControl = null;
}
if (mCustomBlackFrame != null) {
diff --git a/services/core/java/com/android/server/wm/SeamlessRotator.java b/services/core/java/com/android/server/wm/SeamlessRotator.java
index 05f556c..bcd90a1 100644
--- a/services/core/java/com/android/server/wm/SeamlessRotator.java
+++ b/services/core/java/com/android/server/wm/SeamlessRotator.java
@@ -100,9 +100,9 @@
t.setPosition(win.mSurfaceControl, win.mLastSurfacePosition.x, win.mLastSurfacePosition.y);
if (win.mWinAnimator.mSurfaceController != null && !timeout) {
t.deferTransactionUntil(win.mSurfaceControl,
- win.mWinAnimator.mSurfaceController.getHandle(), win.getFrameNumber());
+ win.mWinAnimator.mSurfaceController.mSurfaceControl, win.getFrameNumber());
t.deferTransactionUntil(win.mWinAnimator.mSurfaceController.mSurfaceControl,
- win.mWinAnimator.mSurfaceController.getHandle(), win.getFrameNumber());
+ win.mWinAnimator.mSurfaceController.mSurfaceControl, win.getFrameNumber());
}
}
diff --git a/services/core/java/com/android/server/wm/TaskScreenshotAnimatable.java b/services/core/java/com/android/server/wm/TaskScreenshotAnimatable.java
index ee4e462..8031cfd 100644
--- a/services/core/java/com/android/server/wm/TaskScreenshotAnimatable.java
+++ b/services/core/java/com/android/server/wm/TaskScreenshotAnimatable.java
@@ -47,8 +47,7 @@
}
final Rect tmpRect = task.getBounds();
tmpRect.offset(0, 0);
- return SurfaceControl.captureLayers(
- task.getSurfaceControl().getHandle(), tmpRect, 1f);
+ return SurfaceControl.captureLayers(task.getSurfaceControl(), tmpRect, 1f);
}
private TaskScreenshotAnimatable(Task task,
diff --git a/services/core/java/com/android/server/wm/TaskSnapshotController.java b/services/core/java/com/android/server/wm/TaskSnapshotController.java
index 9fdc045..bd114d9 100644
--- a/services/core/java/com/android/server/wm/TaskSnapshotController.java
+++ b/services/core/java/com/android/server/wm/TaskSnapshotController.java
@@ -258,7 +258,7 @@
mTmpRect.offsetTo(0, 0);
final SurfaceControl.ScreenshotGraphicBuffer screenshotBuffer =
SurfaceControl.captureLayers(
- task.getSurfaceControl().getHandle(), mTmpRect, scaleFraction);
+ task.getSurfaceControl(), mTmpRect, scaleFraction);
final GraphicBuffer buffer = screenshotBuffer != null ? screenshotBuffer.getGraphicBuffer()
: null;
if (buffer == null || buffer.getWidth() <= 1 || buffer.getHeight() <= 1) {
diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java
index 0798c59..ddf25e6 100644
--- a/services/core/java/com/android/server/wm/TaskStack.java
+++ b/services/core/java/com/android/server/wm/TaskStack.java
@@ -1007,7 +1007,7 @@
EventLog.writeEvent(EventLogTags.WM_STACK_REMOVED, mStackId);
if (mAnimationBackgroundSurface != null) {
- mAnimationBackgroundSurface.remove();
+ mWmService.mTransactionFactory.make().remove(mAnimationBackgroundSurface).apply();
mAnimationBackgroundSurface = null;
}
diff --git a/services/core/java/com/android/server/wm/WallpaperController.java b/services/core/java/com/android/server/wm/WallpaperController.java
index 21410c4..6147272 100644
--- a/services/core/java/com/android/server/wm/WallpaperController.java
+++ b/services/core/java/com/android/server/wm/WallpaperController.java
@@ -735,7 +735,7 @@
bounds.offsetTo(0, 0);
SurfaceControl.ScreenshotGraphicBuffer wallpaperBuffer = SurfaceControl.captureLayers(
- wallpaperWindowState.getSurfaceControl().getHandle(), bounds, 1 /* frameScale */);
+ wallpaperWindowState.getSurfaceControl(), bounds, 1 /* frameScale */);
if (wallpaperBuffer == null) {
Slog.w(TAG_WM, "Failed to screenshot wallpaper");
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index d1ddbfe..bf874be 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -4918,7 +4918,7 @@
if (surfaceInsetsChanging() && mWinAnimator.hasSurface()) {
mLastSurfaceInsets.set(mAttrs.surfaceInsets);
t.deferTransactionUntil(mSurfaceControl,
- mWinAnimator.mSurfaceController.mSurfaceControl.getHandle(),
+ mWinAnimator.mSurfaceController.mSurfaceControl,
getFrameNumber());
}
}
diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java
index 15bbf90..73344ac 100644
--- a/services/core/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java
@@ -398,7 +398,7 @@
// transparent to the app.
if (mWin.mAppToken == null || mWin.mAppToken.isRelaunching() == false) {
mPostDrawTransaction.reparentChildren(mPendingDestroySurface.mSurfaceControl,
- mSurfaceController.mSurfaceControl.getHandle())
+ mSurfaceController.mSurfaceControl)
.apply();
}
}
@@ -1013,7 +1013,7 @@
// the WS position is reset (so the stack position is shown) at the same
// time that the buffer size changes.
setOffsetPositionForStackResize(false);
- mSurfaceController.deferTransactionUntil(mSurfaceController.getHandle(),
+ mSurfaceController.deferTransactionUntil(mSurfaceController.mSurfaceControl,
mWin.getFrameNumber());
} else {
final TaskStack stack = mWin.getStack();
@@ -1044,7 +1044,7 @@
// comes in at the new size (normally position and crop are unfrozen).
// setGeometryAppliesWithResizeInTransaction accomplishes this for us.
if (wasForceScaled && !mForceScaleUntilResize) {
- mSurfaceController.deferTransactionUntil(mSurfaceController.getHandle(),
+ mSurfaceController.deferTransactionUntil(mSurfaceController.mSurfaceControl,
mWin.getFrameNumber());
mSurfaceController.forceScaleableInTransaction(false);
}
@@ -1296,7 +1296,7 @@
final SurfaceControl pendingSurfaceControl = mPendingDestroySurface.mSurfaceControl;
mPostDrawTransaction.hide(pendingSurfaceControl);
mPostDrawTransaction.reparentChildren(pendingSurfaceControl,
- mSurfaceController.getHandle());
+ mSurfaceController.mSurfaceControl);
}
mPostDrawTransaction.apply();
diff --git a/services/core/java/com/android/server/wm/WindowSurfaceController.java b/services/core/java/com/android/server/wm/WindowSurfaceController.java
index bef0f81..a616e06 100644
--- a/services/core/java/com/android/server/wm/WindowSurfaceController.java
+++ b/services/core/java/com/android/server/wm/WindowSurfaceController.java
@@ -33,7 +33,6 @@
import android.graphics.Rect;
import android.graphics.Region;
import android.os.Debug;
-import android.os.IBinder;
import android.os.Trace;
import android.util.Slog;
import android.util.proto.ProtoOutputStream;
@@ -123,7 +122,7 @@
void reparentChildrenInTransaction(WindowSurfaceController other) {
if (SHOW_TRANSACTIONS) Slog.i(TAG, "REPARENT from: " + this + " to: " + other);
if ((mSurfaceControl != null) && (other.mSurfaceControl != null)) {
- mSurfaceControl.reparentChildren(other.getHandle());
+ mSurfaceControl.reparentChildren(other.mSurfaceControl);
}
}
@@ -162,7 +161,7 @@
}
try {
if (mSurfaceControl != null) {
- mSurfaceControl.remove();
+ mTmpTransaction.remove(mSurfaceControl).apply();
}
} catch (RuntimeException e) {
Slog.w(TAG, "Error destroying surface in: " + this, e);
@@ -452,9 +451,9 @@
return false;
}
- void deferTransactionUntil(IBinder handle, long frame) {
+ void deferTransactionUntil(SurfaceControl barrier, long frame) {
// TODO: Logging
- mSurfaceControl.deferTransactionUntil(handle, frame);
+ mSurfaceControl.deferTransactionUntil(barrier, frame);
}
void forceScaleableInTransaction(boolean force) {
@@ -483,13 +482,6 @@
return mSurfaceControl != null;
}
- IBinder getHandle() {
- if (mSurfaceControl == null) {
- return null;
- }
- return mSurfaceControl.getHandle();
- }
-
void getSurfaceControl(SurfaceControl outSurfaceControl) {
outSurfaceControl.copyFrom(mSurfaceControl);
}
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationChannelTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationChannelTest.java
deleted file mode 100644
index 1408749..0000000
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationChannelTest.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (C) 2017 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.server.notification;
-
-import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
-
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertNull;
-
-import android.app.NotificationChannel;
-import android.net.Uri;
-import android.os.Parcel;
-import android.test.suitebuilder.annotation.SmallTest;
-import android.util.Xml;
-
-import androidx.test.runner.AndroidJUnit4;
-
-import com.android.internal.util.FastXmlSerializer;
-import com.android.server.UiServiceTestCase;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlSerializer;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class NotificationChannelTest extends UiServiceTestCase {
-
- @Test
- public void testWriteToParcel() {
- NotificationChannel channel =
- new NotificationChannel("1", "one", IMPORTANCE_DEFAULT);
- Parcel parcel = Parcel.obtain();
- channel.writeToParcel(parcel, 0);
- parcel.setDataPosition(0);
- NotificationChannel channel1 = NotificationChannel.CREATOR.createFromParcel(parcel);
- assertEquals(channel, channel1);
- }
-
- @Test
- public void testSystemBlockable() {
- NotificationChannel channel = new NotificationChannel("a", "ab", IMPORTANCE_DEFAULT);
- assertEquals(false, channel.isBlockableSystem());
- channel.setBlockableSystem(true);
- assertEquals(true, channel.isBlockableSystem());
- }
-
- @Test
- public void testEmptyVibration_noException() throws Exception {
- NotificationChannel channel = new NotificationChannel("a", "ab", IMPORTANCE_DEFAULT);
- channel.setVibrationPattern(new long[0]);
-
- XmlSerializer serializer = new FastXmlSerializer();
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- serializer.setOutput(new BufferedOutputStream(baos), "utf-8");
- channel.writeXml(serializer);
- }
-
- @Test
- public void testBackupEmptySound() throws Exception {
- NotificationChannel channel = new NotificationChannel("a", "ab", IMPORTANCE_DEFAULT);
- channel.setSound(Uri.EMPTY, null);
-
- XmlSerializer serializer = new FastXmlSerializer();
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- serializer.setOutput(new BufferedOutputStream(baos), "utf-8");
- channel.writeXmlForBackup(serializer, getContext());
-
- XmlPullParser parser = Xml.newPullParser();
- parser.setInput(new BufferedInputStream(
- new ByteArrayInputStream(baos.toByteArray())), null);
- NotificationChannel restored = new NotificationChannel("a", "ab", IMPORTANCE_DEFAULT);
- restored.populateFromXmlForRestore(parser, getContext());
-
- assertNull(restored.getSound());
- }
-}
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
index 1ed1639..9ecf198 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
@@ -131,6 +131,7 @@
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.AtomicFile;
+import android.util.Xml;
import androidx.annotation.Nullable;
import androidx.test.InstrumentationRegistry;
@@ -138,6 +139,7 @@
import com.android.internal.R;
import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
import com.android.internal.statusbar.NotificationVisibility;
+import com.android.internal.util.FastXmlSerializer;
import com.android.server.LocalServices;
import com.android.server.SystemService;
import com.android.server.UiServiceTestCase;
@@ -156,9 +158,13 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.stubbing.Answer;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlSerializer;
import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
@@ -3060,6 +3066,25 @@
}
@Test
+ public void testBackupEmptySound() throws Exception {
+ NotificationChannel channel = new NotificationChannel("a", "ab", IMPORTANCE_DEFAULT);
+ channel.setSound(Uri.EMPTY, null);
+
+ XmlSerializer serializer = new FastXmlSerializer();
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ serializer.setOutput(new BufferedOutputStream(baos), "utf-8");
+ channel.writeXmlForBackup(serializer, getContext());
+
+ XmlPullParser parser = Xml.newPullParser();
+ parser.setInput(new BufferedInputStream(
+ new ByteArrayInputStream(baos.toByteArray())), null);
+ NotificationChannel restored = new NotificationChannel("a", "ab", IMPORTANCE_DEFAULT);
+ restored.populateFromXmlForRestore(parser, getContext());
+
+ assertNull(restored.getSound());
+ }
+
+ @Test
public void testBackup() throws Exception {
int systemChecks = mService.countSystemChecks;
mBinderService.getBackupPayload(1);
@@ -3067,6 +3092,17 @@
}
@Test
+ public void testEmptyVibration_noException() throws Exception {
+ NotificationChannel channel = new NotificationChannel("a", "ab", IMPORTANCE_DEFAULT);
+ channel.setVibrationPattern(new long[0]);
+
+ XmlSerializer serializer = new FastXmlSerializer();
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ serializer.setOutput(new BufferedOutputStream(baos), "utf-8");
+ channel.writeXml(serializer);
+ }
+
+ @Test
public void updateUriPermissions_update() throws Exception {
NotificationChannel c = new NotificationChannel(
TEST_CHANNEL_ID, TEST_CHANNEL_ID, IMPORTANCE_DEFAULT);
diff --git a/services/tests/wmtests/src/com/android/server/wm/DimmerTests.java b/services/tests/wmtests/src/com/android/server/wm/DimmerTests.java
index 292a05b..a98f79c 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DimmerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DimmerTests.java
@@ -169,7 +169,7 @@
mDimmer.updateDims(mTransaction, new Rect());
verify(mTransaction).show(getDimLayer());
- verify(dimLayer, never()).remove();
+ verify(mTransaction, never()).remove(dimLayer);
}
@Test
@@ -231,7 +231,7 @@
mDimmer.updateDims(mTransaction, new Rect());
verify(mTransaction).show(dimLayer);
- verify(dimLayer, never()).remove();
+ verify(mTransaction, never()).remove(dimLayer);
}
@Test
diff --git a/services/tests/wmtests/src/com/android/server/wm/StubTransaction.java b/services/tests/wmtests/src/com/android/server/wm/StubTransaction.java
index dec88f0..83dd69a 100644
--- a/services/tests/wmtests/src/com/android/server/wm/StubTransaction.java
+++ b/services/tests/wmtests/src/com/android/server/wm/StubTransaction.java
@@ -145,8 +145,8 @@
}
@Override
- public SurfaceControl.Transaction deferTransactionUntil(SurfaceControl sc, IBinder handle,
- long frameNumber) {
+ public SurfaceControl.Transaction deferTransactionUntil(SurfaceControl sc,
+ SurfaceControl barrier, long frameNumber) {
return this;
}
@@ -158,7 +158,8 @@
}
@Override
- public SurfaceControl.Transaction reparentChildren(SurfaceControl sc, IBinder newParentHandle) {
+ public SurfaceControl.Transaction reparentChildren(SurfaceControl sc,
+ SurfaceControl newParent) {
return this;
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java
index b93c994..acfc2ea 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowContainerTests.java
@@ -114,16 +114,12 @@
@Test
public void testAddChildSetsSurfacePosition() {
try (MockSurfaceBuildingContainer top = new MockSurfaceBuildingContainer(mWm)) {
-
- final SurfaceControl.Transaction transaction = mock(SurfaceControl.Transaction.class);
- mWm.mTransactionFactory = () -> transaction;
-
WindowContainer child = new WindowContainer(mWm);
child.setBounds(1, 1, 10, 10);
- verify(transaction, never()).setPosition(any(), anyFloat(), anyFloat());
+ verify(mTransaction, never()).setPosition(any(), anyFloat(), anyFloat());
top.addChild(child, 0);
- verify(transaction, times(1)).setPosition(any(), eq(1.f), eq(1.f));
+ verify(mTransaction, times(1)).setPosition(any(), eq(1.f), eq(1.f));
}
}