Merge "Revert "Fix flicker when swiching resolution change"" into tm-qpr-dev
This commit is contained in:
@@ -455,6 +455,7 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean needToUpdateProviderViews = false;
|
||||||
final String newUniqueId = mDisplayInfo.uniqueId;
|
final String newUniqueId = mDisplayInfo.uniqueId;
|
||||||
if (!Objects.equals(newUniqueId, mDisplayUniqueId)) {
|
if (!Objects.equals(newUniqueId, mDisplayUniqueId)) {
|
||||||
mDisplayUniqueId = newUniqueId;
|
mDisplayUniqueId = newUniqueId;
|
||||||
@@ -472,6 +473,37 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab
|
|||||||
setupDecorations();
|
setupDecorations();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mScreenDecorHwcLayer != null) {
|
||||||
|
updateHwLayerRoundedCornerDrawable();
|
||||||
|
updateHwLayerRoundedCornerExistAndSize();
|
||||||
|
}
|
||||||
|
needToUpdateProviderViews = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
final float newRatio = getPhysicalPixelDisplaySizeRatio();
|
||||||
|
if (mRoundedCornerResDelegate.getPhysicalPixelDisplaySizeRatio() != newRatio) {
|
||||||
|
mRoundedCornerResDelegate.setPhysicalPixelDisplaySizeRatio(newRatio);
|
||||||
|
if (mScreenDecorHwcLayer != null) {
|
||||||
|
updateHwLayerRoundedCornerExistAndSize();
|
||||||
|
}
|
||||||
|
needToUpdateProviderViews = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (needToUpdateProviderViews) {
|
||||||
|
updateOverlayProviderViews(null);
|
||||||
|
} else {
|
||||||
|
updateOverlayProviderViews(new Integer[] {
|
||||||
|
mFaceScanningViewId,
|
||||||
|
R.id.display_cutout,
|
||||||
|
R.id.display_cutout_left,
|
||||||
|
R.id.display_cutout_right,
|
||||||
|
R.id.display_cutout_bottom,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mScreenDecorHwcLayer != null) {
|
||||||
|
mScreenDecorHwcLayer.onDisplayChanged(newUniqueId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -1037,8 +1069,6 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab
|
|||||||
&& (newRotation != mRotation || displayModeChanged(mDisplayMode, newMod))) {
|
&& (newRotation != mRotation || displayModeChanged(mDisplayMode, newMod))) {
|
||||||
mRotation = newRotation;
|
mRotation = newRotation;
|
||||||
mDisplayMode = newMod;
|
mDisplayMode = newMod;
|
||||||
mRoundedCornerResDelegate.setPhysicalPixelDisplaySizeRatio(
|
|
||||||
getPhysicalPixelDisplaySizeRatio());
|
|
||||||
if (mScreenDecorHwcLayer != null) {
|
if (mScreenDecorHwcLayer != null) {
|
||||||
mScreenDecorHwcLayer.pendingConfigChange = false;
|
mScreenDecorHwcLayer.pendingConfigChange = false;
|
||||||
mScreenDecorHwcLayer.updateRotation(mRotation);
|
mScreenDecorHwcLayer.updateRotation(mRotation);
|
||||||
|
|||||||
@@ -78,18 +78,23 @@ class RoundedCornerResDelegate(
|
|||||||
reloadMeasures()
|
reloadMeasures()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun reloadAll(newReloadToken: Int) {
|
||||||
|
if (reloadToken == newReloadToken) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reloadToken = newReloadToken
|
||||||
|
reloadRes()
|
||||||
|
reloadMeasures()
|
||||||
|
}
|
||||||
|
|
||||||
fun updateDisplayUniqueId(newDisplayUniqueId: String?, newReloadToken: Int?) {
|
fun updateDisplayUniqueId(newDisplayUniqueId: String?, newReloadToken: Int?) {
|
||||||
if (displayUniqueId != newDisplayUniqueId) {
|
if (displayUniqueId != newDisplayUniqueId) {
|
||||||
displayUniqueId = newDisplayUniqueId
|
displayUniqueId = newDisplayUniqueId
|
||||||
newReloadToken ?.let { reloadToken = it }
|
newReloadToken ?.let { reloadToken = it }
|
||||||
reloadRes()
|
reloadRes()
|
||||||
reloadMeasures()
|
reloadMeasures()
|
||||||
} else if (newReloadToken != null) {
|
} else {
|
||||||
if (reloadToken == newReloadToken) {
|
newReloadToken?.let { reloadAll(it) }
|
||||||
return
|
|
||||||
}
|
|
||||||
reloadToken = newReloadToken
|
|
||||||
reloadMeasures()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1005,13 +1005,18 @@ public class ScreenDecorationsTest extends SysuiTestCase {
|
|||||||
assertEquals(new Size(3, 3), resDelegate.getTopRoundedSize());
|
assertEquals(new Size(3, 3), resDelegate.getTopRoundedSize());
|
||||||
assertEquals(new Size(4, 4), resDelegate.getBottomRoundedSize());
|
assertEquals(new Size(4, 4), resDelegate.getBottomRoundedSize());
|
||||||
|
|
||||||
doReturn(2f).when(mScreenDecorations).getPhysicalPixelDisplaySizeRatio();
|
setupResources(20 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */,
|
||||||
|
getTestsDrawable(com.android.systemui.tests.R.drawable.rounded4px)
|
||||||
|
/* roundedTopDrawable */,
|
||||||
|
getTestsDrawable(com.android.systemui.tests.R.drawable.rounded5px)
|
||||||
|
/* roundedBottomDrawable */,
|
||||||
|
0 /* roundedPadding */, true /* privacyDot */, false /* faceScanning*/);
|
||||||
mDisplayInfo.rotation = Surface.ROTATION_270;
|
mDisplayInfo.rotation = Surface.ROTATION_270;
|
||||||
|
|
||||||
mScreenDecorations.onConfigurationChanged(null);
|
mScreenDecorations.onConfigurationChanged(null);
|
||||||
|
|
||||||
assertEquals(new Size(6, 6), resDelegate.getTopRoundedSize());
|
assertEquals(new Size(4, 4), resDelegate.getTopRoundedSize());
|
||||||
assertEquals(new Size(8, 8), resDelegate.getBottomRoundedSize());
|
assertEquals(new Size(5, 5), resDelegate.getBottomRoundedSize());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -1287,6 +1292,51 @@ public class ScreenDecorationsTest extends SysuiTestCase {
|
|||||||
verifyFaceScanningViewExists(true);
|
verifyFaceScanningViewExists(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOnDisplayChanged_hwcLayer() {
|
||||||
|
setupResources(0 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */,
|
||||||
|
null /* roundedTopDrawable */, null /* roundedBottomDrawable */,
|
||||||
|
0 /* roundedPadding */, false /* privacyDot */, false /* faceScanning */);
|
||||||
|
final DisplayDecorationSupport decorationSupport = new DisplayDecorationSupport();
|
||||||
|
decorationSupport.format = PixelFormat.R_8;
|
||||||
|
doReturn(decorationSupport).when(mDisplay).getDisplayDecorationSupport();
|
||||||
|
|
||||||
|
// top cutout
|
||||||
|
mMockCutoutList.add(new CutoutDecorProviderImpl(BOUNDS_POSITION_TOP));
|
||||||
|
|
||||||
|
mScreenDecorations.start();
|
||||||
|
|
||||||
|
final ScreenDecorHwcLayer hwcLayer = mScreenDecorations.mScreenDecorHwcLayer;
|
||||||
|
spyOn(hwcLayer);
|
||||||
|
doReturn(mDisplay).when(hwcLayer).getDisplay();
|
||||||
|
|
||||||
|
mScreenDecorations.mDisplayListener.onDisplayChanged(1);
|
||||||
|
|
||||||
|
verify(hwcLayer, times(1)).onDisplayChanged(any());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOnDisplayChanged_nonHwcLayer() {
|
||||||
|
setupResources(0 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */,
|
||||||
|
null /* roundedTopDrawable */, null /* roundedBottomDrawable */,
|
||||||
|
0 /* roundedPadding */, false /* privacyDot */, false /* faceScanning */);
|
||||||
|
|
||||||
|
// top cutout
|
||||||
|
mMockCutoutList.add(new CutoutDecorProviderImpl(BOUNDS_POSITION_TOP));
|
||||||
|
|
||||||
|
mScreenDecorations.start();
|
||||||
|
|
||||||
|
final ScreenDecorations.DisplayCutoutView cutoutView = (ScreenDecorations.DisplayCutoutView)
|
||||||
|
mScreenDecorations.getOverlayView(R.id.display_cutout);
|
||||||
|
assertNotNull(cutoutView);
|
||||||
|
spyOn(cutoutView);
|
||||||
|
doReturn(mDisplay).when(cutoutView).getDisplay();
|
||||||
|
|
||||||
|
mScreenDecorations.mDisplayListener.onDisplayChanged(1);
|
||||||
|
|
||||||
|
verify(cutoutView, times(1)).onDisplayChanged(any());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testHasSameProvidersWithNullOverlays() {
|
public void testHasSameProvidersWithNullOverlays() {
|
||||||
setupResources(0 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */,
|
setupResources(0 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */,
|
||||||
|
|||||||
@@ -24,11 +24,12 @@ import androidx.annotation.DrawableRes
|
|||||||
import androidx.test.filters.SmallTest
|
import androidx.test.filters.SmallTest
|
||||||
import com.android.internal.R as InternalR
|
import com.android.internal.R as InternalR
|
||||||
import com.android.systemui.R as SystemUIR
|
import com.android.systemui.R as SystemUIR
|
||||||
import com.android.systemui.SysuiTestCase
|
|
||||||
import com.android.systemui.tests.R
|
import com.android.systemui.tests.R
|
||||||
|
import com.android.systemui.SysuiTestCase
|
||||||
import org.junit.Assert.assertEquals
|
import org.junit.Assert.assertEquals
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
import org.mockito.Mock
|
import org.mockito.Mock
|
||||||
import org.mockito.MockitoAnnotations
|
import org.mockito.MockitoAnnotations
|
||||||
@@ -101,11 +102,14 @@ class RoundedCornerResDelegateTest : SysuiTestCase() {
|
|||||||
assertEquals(Size(3, 3), roundedCornerResDelegate.topRoundedSize)
|
assertEquals(Size(3, 3), roundedCornerResDelegate.topRoundedSize)
|
||||||
assertEquals(Size(4, 4), roundedCornerResDelegate.bottomRoundedSize)
|
assertEquals(Size(4, 4), roundedCornerResDelegate.bottomRoundedSize)
|
||||||
|
|
||||||
roundedCornerResDelegate.physicalPixelDisplaySizeRatio = 2f
|
setupResources(radius = 100,
|
||||||
|
roundedTopDrawable = getTestsDrawable(R.drawable.rounded4px),
|
||||||
|
roundedBottomDrawable = getTestsDrawable(R.drawable.rounded5px))
|
||||||
|
|
||||||
roundedCornerResDelegate.updateDisplayUniqueId(null, 1)
|
roundedCornerResDelegate.updateDisplayUniqueId(null, 1)
|
||||||
|
|
||||||
assertEquals(Size(6, 6), roundedCornerResDelegate.topRoundedSize)
|
assertEquals(Size(4, 4), roundedCornerResDelegate.topRoundedSize)
|
||||||
assertEquals(Size(8, 8), roundedCornerResDelegate.bottomRoundedSize)
|
assertEquals(Size(5, 5), roundedCornerResDelegate.bottomRoundedSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user