Status Update
Comments
se...@google.com <se...@google.com> #2
Looking at the exiftool data, it reports Orientation = 6, which is rotated 90 degrees counter-clockwise and needs 90 degrees clockwise rotation to appear correct. Of course, it's unusual that a Google format would be correct in exiftool and not in Google's own ExifInterface library. I see it's also not handling the rotation as I would expect in Chrome.
exiftool -V ~/Downloads/676x380.webp
ExifToolVersion = 12.60
FileName = 676x380.webp Dog\ Yule\ Log.mp4 Lil\ Bub\ Video\ Yule\ Log.mp4 android-studio-2022.2.1.19-mac_arm.dmg gradle.properties simpsons_background.png
Directory = /Users/clee/Downloads
FileSize = 116812
FileModifyDate = 1683650274
FileAccessDate = 1683655195
FileInodeChangeDate = 1683654924
FilePermissions = 33188
FileType = WEBP
FileTypeExtension = WEBP
MIMEType = image/webp
FileType [override] = Extended WEBP
FileTypeExtension [override] = WEBP
RIFF 'VP8X' chunk (10 bytes of data):
VP8X (SubDirectory) -->
+ [BinaryData directory, 10 bytes]
| WebP_Flags = 8
| ImageWidth = 2063598243
| ImageHeight = 97024
RIFF 'VP8 ' chunk (53444 bytes of data):
VP8Bitstream (SubDirectory) -->
+ [BinaryData directory, 53444 bytes]
| VP8Version = 0
| ImageWidth = 676
| HorizontalScale = 0
| ImageHeight = 380
| VerticalScale = 0
RIFF 'EXIF' chunk (63321 bytes of data):
Warning = [minor] Improper EXIF header
EXIF (SubDirectory) -->
+ [TIFF directory]
| ExifByteOrder = II
| + [IFD0 directory with 12 entries]
| | 0) ImageWidth = 4000
| | 1) ImageHeight = 3000
| | 2) Make = samsung
| | 3) Model = SM-S908U1
| | 4) Orientation = 6
| | 5) XResolution = 72 (72/1)
| | 6) YResolution = 72 (72/1)
| | 7) ResolutionUnit = 2
| | 8) Software = S908U1UES2CWCC
| | 9) ModifyDate = 2023:04:22 09:15:37
| | 10) YCbCrPositioning = 1
| | 11) ExifOffset (SubDirectory) -->
| | + [ExifIFD directory with 30 entries]
| | | 0) ExposureTime = 0.03333333333 (1/30)
| | | 1) FNumber = 2.2 (220/100)
| | | 2) ExposureProgram = 2
| | | 3) ISO = 400
| | | 4) ExifVersion = 0220
| | | 5) DateTimeOriginal = 2023:04:22 09:15:37
| | | 6) CreateDate = 2023:04:22 09:15:37
| | | 7) OffsetTime = -05:00
| | | 8) OffsetTimeOriginal = -05:00
| | | 9) ShutterSpeedValue = 0.03333333333 (1/30)
| | | 10) ApertureValue = 2.27 (227/100)
| | | 11) BrightnessValue = 0.21 (21/100)
| | | 12) ExposureCompensation = 0 (0/100)
| | | 13) MaxApertureValue = 2.27 (227/100)
| | | 14) MeteringMode = 2
| | | 15) Flash = 0
| | | 16) FocalLength = 2.2 (220/100)
| | | 17) SubSecTime = 960
| | | 18) SubSecTimeOriginal = 960
| | | 19) SubSecTimeDigitized = 960
| | | 20) FlashpixVersion = 0100
| | | 21) ColorSpace = 1
| | | 22) ExifImageWidth = 676
| | | 23) ExifImageHeight = 380
| | | 24) ExposureMode = 0
| | | 25) WhiteBalance = 0
| | | 26) DigitalZoomRatio = 1 (100/100)
| | | 27) FocalLengthIn35mmFormat = 13
| | | 28) SceneCaptureType = 0
| | | 29) ImageUniqueID = DA8XLOD01SM
| + [IFD1 directory with 8 entries]
| | 0) ImageWidth = 512
| | 1) ImageHeight = 384
| | 2) Compression = 6
| | 3) XResolution = 72 (72/1)
| | 4) YResolution = 72 (72/1)
| | 5) ResolutionUnit = 2
| | 6) ThumbnailOffset = 852
| | 7) ThumbnailLength = 62463
mn...@google.com <mn...@google.com> #3
For context, I found this because I got a bug report about a similar issue with an upside down photo on a Samsung Galaxy S10 and managed to reproduce the problem as a sideways WEBP on an S22 Ultra. I can supply more pictures from different Samsung models exhibiting this same problem if that would be useful.
mi...@37signals.com <mi...@37signals.com> #4
Will anyone please take a look at this bug? It appears on many, very common devices and results in mis-rotated images.
mn...@google.com <mn...@google.com> #5
Hi,
I can confirm there is an issue with the WebP exif reading implementation. I ran into the same issue when retrieving WebP images from the Amazon's Serverless Image Handler. Initially I thought it was a bug in the library I'm using (Coil) but found out it wasn't the case.
I have a bugfix available for the issue and am preparing a PR (that will be submitted via Gerrit).
Validated with my own images (a yellow sticky note captured at all 4 orientations) + the one from the google repo + the one from the topic starter.
Note: The bottom left image is a google webp without exif, the bottom right image is a google webp with exif
Note 2: It's also broken in Chrome & Firefox but works correctly on Safari/Finder on MacOS. I might submit bugfixes for those too.
mi...@37signals.com <mi...@37signals.com> #6
mn...@google.com <mn...@google.com> #8
Thanks for the detailed investigation! I've replied on the PR with more details - but I'm not sure this image is a valid WebP.
ap...@google.com <ap...@google.com> #9
Branch: androidx-main
commit 161d43d41357f5d34fe7907c82ed9fca0b04d57a
Author: Laurence Muller <laurence.muller@gmail.com>
Date: Fri Dec 22 14:38:22 2023
Fix attribute reader for WebP images with Exif App1 Sections
The current attribute reader for WebP images fails to read the attributes if the Exif metadata contains an Exif App1 Section. The reason is that the byte-order is specified after the Exif App1 Section marker in the Exif payload. This patch will check if the Exif App1 section is present and correct the payload accordingly. This will allow it to read the Exif metadata (such as image orientation) correctly.
Test: Added a new image to cover this use case with a test. Run the instrument test using: ./gradlew :exifinterface:exifinterface:connectedAndroidTest
Fixes:
Change-Id: Idbb14e9fbcb038616ce650da03ed1d7eb9f997a5
M exifinterface/exifinterface/src/androidTest/java/androidx/exifinterface/media/ExifInterfaceTest.java
A exifinterface/exifinterface/src/androidTest/res/raw/invalid_webp_with_jpeg_app1_marker.webp
M exifinterface/exifinterface/src/androidTest/res/values/arrays.xml
M exifinterface/exifinterface/src/main/java/androidx/exifinterface/media/ExifInterface.java
na...@google.com <na...@google.com> #10
Hi, since this issue is now fixed in the codebase, is there any timeline on when this will be rolled out via a minor update (e.g v1.3.8)?
Would love to be able to use Exifinterface without having to use local workarounds in my apps.
Description
Jetpack Compose component(s) used:
Android Studio Build: Meerkat | 2024.3.1 Beta 1
Kotlin version: 2.1.0
Steps to Reproduce or Code Sample to Reproduce:
Using the new Autofill support in 1.8.0 works well:
TextField(modifier = Modifier.semantics { contentType = ContentType.Password }, ... )
However, when auto-focus is added to the field, the autofill hints fail to show automatically. The only way to show them again is to long-press on the field and select Autofill menu item.
Requesting autofill after focus request does nothing (either in LaunchedEffect or onFocusChanged modifier).
```
val focusRequester = remember { FocusRequester() }
LaunchedEffect(Unit) {
focusRequester.requestFocus()
}
TextField(
modifier = Modifier
.focusRequester(focusRequester)
.semantics { contentType = ContentType.Password },
...
```
Stack trace (if applicable):
```
startInputInner - Id : 0
startInputInner - IInputMethodManagerGlobalInvoker.startInputOrWindowGainedFocus
startInputInner - Id : 0
startInputInner - IInputMethodManagerGlobalInvoker.startInputOrWindowGainedFocus
com.xxx: onRequestShow at ORIGIN_CLIENT_SHOW_SOFT_INPUT reason SHOW_SOFT_INPUT_BY_INSETS_API
show(ime(), fromIme=false)
setRequestedVisibleTypes: visible=true, mask=ime, host=com.xxx.StartActivity, from=android.view.InsetsController.controlAnimationUnchecked:1445 android.view.InsetsController.applyAnimation:2005 android.view.InsetsController.applyAnimation:1968 android.view.InsetsController.show:1309 android.view.InsetsController.show:1237 androidx.core.view.SoftwareKeyboardControllerCompat$Impl30.show:194 androidx.core.view.SoftwareKeyboardControllerCompat.show:71 androidx.compose.ui.text.input.InputMethodManagerImpl.showSoftInput:81 androidx.compose.ui.text.input.TextInputServiceAndroid.setKeyboardVisibleImmediately:475 androidx.compose.ui.text.input.TextInputServiceAndroid.processInputCommands:359
ris()
ssi(): flags=0 view=com.xxx reason = SHOW_SOFT_INPUT_BY_INSETS_API
ssi() view is not EditText
showSoftInput() view=androidx.compose.ui.platform.AndroidComposeView{3c95fa5 VFED..... .F....ID 0,0-1080,2400 aid=1073741846} flags=0 reason=SHOW_SOFT_INPUT_BY_INSETS_API
setRequestedVisibleTypes: visible=false, mask=ime, host=com.xxx.StartActivity, from=android.view.InsetsController.controlAnimationUncheckedInner:1546 android.view.InsetsController.controlAnimationUnchecked:1449 android.view.InsetsController.applyAnimation:2005 android.view.InsetsController.applyAnimation:1968 android.view.InsetsController.show:1309 android.view.InsetsController.show:1237 androidx.core.view.SoftwareKeyboardControllerCompat$Impl30.show:194 androidx.core.view.SoftwareKeyboardControllerCompat.show:71 androidx.compose.ui.text.input.InputMethodManagerImpl.showSoftInput:81 androidx.compose.ui.text.input.TextInputServiceAndroid.setKeyboardVisibleImmediately:475
Flattened final assist data: 1148 bytes, containing 1 windows, 9 views
Flattened final assist data: 1544 bytes, containing 1 windows, 15 views
showSoftInput(View,I)
com.xxx:803fa14f: onRequestShow at ORIGIN_CLIENT_SHOW_SOFT_INPUT reason SHOW_SOFT_INPUT
ssi(): flags=0 view=com.xxx reason = SHOW_SOFT_INPUT
ssi() view is not EditText
showSoftInput() view=androidx.compose.ui.platform.AndroidComposeView{3c95fa5 VFED..... .F....ID 0,0-1080,2400 aid=1073741846} flags=0 reason=SHOW_SOFT_INPUT
Resizing android.view.ViewRootImpl@ec80947: frame = [0,0][1080,2400] reportDraw = false forceLayout = false syncSeqId = -1
Resizing android.view.ViewRootImpl@ec80947: frame = [0,0][1080,2400] reportDraw = false forceLayout = false syncSeqId = -1
Autofill popup was shown.
onStateChanged: host=com.xxxx.StartActivity, from=android.view.ViewRootImpl$ViewRootHandler.handleMessageImpl:7209, state=InsetsState: {mDisplayFrame=Rect(0, 0 - 1080, 2400), mDisplayCutout=DisplayCutout{insets=Rect(0, 88 - 0, 0) waterfall=Insets{left=0, top=0, right=0, bottom=0} boundingRect={Bounds=[Rect(0, 0 - 0, 0), Rect(512, 0 - 568, 88), Rect(0, 0 - 0, 0), Rect(0, 0 - 0, 0)]} cutoutPathParserInfo={CutoutPathParserInfo{displayWidth=1080 displayHeight=2400 physicalDisplayWidth=1080 physicalDisplayHeight=2400 density={2.8125} cutoutSpec={M 0,0 M 0,11.43427858034597 a 9.899054752987353,9.899054752987353 0 1,0 0,19.79810950597471 a 9.899054752987353,9.899054752987353 0 1,0 0,-19.79810950597471 Z @dp} rotation={0} scale={1.0} physicalPixelDisplaySizeRatio={1.0}}}}, mRoundedCorners=RoundedCorners{[RoundedCorner{position=TopLeft, radius=0, center=Point(0, 0)}, RoundedCorner{position=TopRight, radius=0, center=Point(0, 0)}, RoundedCorner{position=BottomRight, radius=0, center=Point(0, 0)}, RoundedCorner{position=BottomLeft, radius=0, center=Point(0, 0)}]} mRoundedCornerFrame=Rect(0, 0 - 1080, 2400), mPrivacyIndicatorBounds=PrivacyIndicatorBounds {static bounds=Rect(956, 0 - 1080, 88) rotation=0}, mDisplayShape=DisplayShape{ spec=-311912193 displayWidth=1080 displayHeight=2400 physicalPixelDisplaySizeRatio=1.0 rotation=0 offsetX=0 offsetY=0 scale=1.0}, mSources= { InsetsSource: {3 mType=ime mFrame=[0,2265][1080,2400] mVisible=false mFlags=[]}, InsetsSource: {27 mType=displayCutout mFrame=[0,0][1080,88] mVisible=true mFlags=[]}, InsetsSource: {3cd60000 mType=statusBars mFrame=[0,0][1080,88] mVisible=true mFlags=[]}, InsetsSource: {3cd60005 mType=mandatorySystemGestures mFrame=[0,0][1080,122] mVisible=true mFlags=[]}, InsetsSource: {3cd60006 mType=tappableElement mFrame=[0,0][1080,88] mVisible=true mFlags=[]}, InsetsSource: {3e2d0001 mType=navigationBars mFrame=[0,2358][1080,2400] mVisible=true mFlags=[SUPPRESS_SCRIM]}, InsetsSource: {3e2d0004 mType=systemGestures mFrame=[0,0][84,2400] mVisible=true mFlags=[]}, InsetsSource: {3e2d0005 mType=mandatorySystemGestures mFrame=[0,2310][1080,2400] mVisible=true mFlags=[]}, InsetsSource: {3e2d0006 mType=tappableElement mFrame=[0,0][0,0] mVisible=true mFlags=[]}, InsetsSource: {3e2d0024 mType=systemGestures mFrame=[996,0][1080,2400] mVisible=true mFlags=[]} }
applyRequestedVisibilityToControl: visible=false, type=ime, host=com.xxx.StartActivity
handleResized, msg = 4 frames=ClientWindowFrames{frame=[0,0][1080,2400] display=[0,0][1080,2400] parentFrame=[0,0][0,0]} forceNextWindowRelayout=false displayId=0 dragResizing=false compatScale=1.0 frameChanged=false attachedFrameChanged=false configChanged=false displayChanged=false compatScaleChanged=false
onStateChanged: host=com.xxx.StartActivity, from=android.view.ViewRootImpl$ViewRootHandler.handleMessageImpl:7209, state=InsetsState: {mDisplayFrame=Rect(0, 0 - 1080, 2400), mDisplayCutout=DisplayCutout{insets=Rect(0, 88 - 0, 0) waterfall=Insets{left=0, top=0, right=0, bottom=0} boundingRect={Bounds=[Rect(0, 0 - 0, 0), Rect(512, 0 - 568, 88), Rect(0, 0 - 0, 0), Rect(0, 0 - 0, 0)]} cutoutPathParserInfo={CutoutPathParserInfo{displayWidth=1080 displayHeight=2400 physicalDisplayWidth=1080 physicalDisplayHeight=2400 density={2.8125} cutoutSpec={M 0,0 M 0,11.43427858034597 a 9.899054752987353,9.899054752987353 0 1,0 0,19.79810950597471 a 9.899054752987353,9.899054752987353 0 1,0 0,-19.79810950597471 Z @dp} rotation={0} scale={1.0} physicalPixelDisplaySizeRatio={1.0}}}}, mRoundedCorners=RoundedCorners{[RoundedCorner{position=TopLeft, radius=0, center=Point(0, 0)}, RoundedCorner{position=TopRight, radius=0, center=Point(0, 0)}, RoundedCorner{position=BottomRight, radius=0, center=Point(0, 0)}, RoundedCorner{position=BottomLeft, radius=0, center=Point(0, 0)}]} mRoundedCornerFrame=Rect(0, 0 - 1080, 2400), mPrivacyIndicatorBounds=PrivacyIndicatorBounds {static bounds=Rect(956, 0 - 1080, 88) rotation=0}, mDisplayShape=DisplayShape{ spec=-311912193 displayWidth=1080 displayHeight=2400 physicalPixelDisplaySizeRatio=1.0 rotation=0 offsetX=0 offsetY=0 scale=1.0}, mSources= { InsetsSource: {3 mType=ime mFrame=[0,1548][1080,2400] mVisible=false mFlags=[]}, InsetsSource: {27 mType=displayCutout mFrame=[0,0][1080,88] mVisible=true mFlags=[]}, InsetsSource: {3cd60000 mType=statusBars mFrame=[0,0][1080,88] mVisible=true mFlags=[]}, InsetsSource: {3cd60005 mType=mandatorySystemGestures mFrame=[0,0][1080,122] mVisible=true mFlags=[]}, InsetsSource: {3cd60006 mType=tappableElement mFrame=[0,0][1080,88] mVisible=true mFlags=[]}, InsetsSource: {3e2d0001 mType=navigationBars mFrame=[0,2358][1080,2400] mVisible=true mFlags=[SUPPRESS_SCRIM]}, InsetsSource: {3e2d0004 mType=systemGestures mFrame=[0,0][84,2400] mVisible=true mFlags=[]}, InsetsSource: {3e2d0005 mType=mandatorySystemGestures mFrame=[0,2310][1080,2400] mVisible=true mFlags=[]}, InsetsSource: {3e2d0006 mType=tappableElement mFrame=[0,0][0,0] mVisible=true mFlags=[]}, InsetsSource: {3e2d0024 mType=systemGestures mFrame=[996,0][1080,2400] mVisible=true mFlags=[]} }
applyRequestedVisibilityToControl: visible=false, type=ime, host=com.xxx.StartActivity
handleResized, msg = 4 frames=ClientWindowFrames{frame=[0,0][1080,2400] display=[0,0][1080,2400] parentFrame=[0,0][0,0]} forceNextWindowRelayout=false displayId=0 dragResizing=false compatScale=1.0 frameChanged=false attachedFrameChanged=false configChanged=false displayChanged=false compatScaleChanged=false
show(ime(), fromIme=true)
setRequestedVisibleTypes: visible=true, mask=ime, host=com.xxx.StartActivity, from=android.view.InsetsController.controlAnimationUnchecked:1445 android.view.InsetsController.handlePendingControlRequest:1324 android.view.InsetsController.show:1260 android.view.ViewRootImpl$ViewRootHandler.handleMessageImpl:7233 android.view.ViewRootImpl$ViewRootHandler.handleMessage:7166 android.os.Handler.dispatchMessage:106 android.os.Looper.loopOnce:230 android.os.Looper.loop:319 android.app.ActivityThread.main:8919 java.lang.reflect.Method.invoke:-2
controlAnimationUncheckedInner: Added types=ime, animType=0, host=com.xxx.StartActivity, from=android.view.InsetsController.controlAnimationUnchecked:1449 android.view.InsetsController.handlePendingControlRequest:1324 android.view.InsetsController.show:1260
show(ime(), fromIme=true)
com.xxx:803fa14f: onCancelled at PHASE_CLIENT_APPLY_ANIMATION
Resizing android.view.ViewRootImpl@ec80947: frame = [0,0][1080,2400] reportDraw = false forceLayout = false syncSeqId = -1
mWNT: t=0xb4000072fa938ab0 mBlastBufferQueue=0xb4000072ea933d70 fn= 52905 mRenderHdrSdrRatio=1.0 caller= android.view.SyncRtSurfaceTransactionApplier.applyTransaction:96 android.view.SyncRtSurfaceTransactionApplier.lambda$scheduleApply$0:69 android.view.SyncRtSurfaceTransactionApplier.$r8$lambda$SgowXC58rj3PR958kHUfRgLZmvE:0
onStateChanged: host=com.xxx.StartActivity, from=android.view.ViewRootImpl$ViewRootHandler.handleMessageImpl:7209, state=InsetsState: {mDisplayFrame=Rect(0, 0 - 1080, 2400), mDisplayCutout=DisplayCutout{insets=Rect(0, 88 - 0, 0) waterfall=Insets{left=0, top=0, right=0, bottom=0} boundingRect={Bounds=[Rect(0, 0 - 0, 0), Rect(512, 0 - 568, 88), Rect(0, 0 - 0, 0), Rect(0, 0 - 0, 0)]} cutoutPathParserInfo={CutoutPathParserInfo{displayWidth=1080 displayHeight=2400 physicalDisplayWidth=1080 physicalDisplayHeight=2400 density={2.8125} cutoutSpec={M 0,0 M 0,11.43427858034597 a 9.899054752987353,9.899054752987353 0 1,0 0,19.79810950597471 a 9.899054752987353,9.899054752987353 0 1,0 0,-19.79810950597471 Z @dp} rotation={0} scale={1.0} physicalPixelDisplaySizeRatio={1.0}}}}, mRoundedCorners=RoundedCorners{[RoundedCorner{position=TopLeft, radius=0, center=Point(0, 0)}, RoundedCorner{position=TopRight, radius=0, center=Point(0, 0)}, RoundedCorner{position=BottomRight, radius=0, center=Point(0, 0)}, RoundedCorner{position=BottomLeft, radius=0, center=Point(0, 0)}]} mRoundedCornerFrame=Rect(0, 0 - 1080, 2400), mPrivacyIndicatorBounds=PrivacyIndicatorBounds {static bounds=Rect(956, 0 - 1080, 88) rotation=0}, mDisplayShape=DisplayShape{ spec=-311912193 displayWidth=1080 displayHeight=2400 physicalPixelDisplaySizeRatio=1.0 rotation=0 offsetX=0 offsetY=0 scale=1.0}, mSources= { InsetsSource: {3 mType=ime mFrame=[0,1548][1080,2400] mVisible=false mFlags=[]}, InsetsSource: {27 mType=displayCutout mFrame=[0,0][1080,88] mVisible=true mFlags=[]}, InsetsSource: {3cd60000 mType=statusBars mFrame=[0,0][1080,88] mVisible=true mFlags=[]}, InsetsSource: {3cd60005 mType=mandatorySystemGestures mFrame=[0,0][1080,122] mVisible=true mFlags=[]}, InsetsSource: {3cd60006 mType=tappableElement mFrame=[0,0][1080,88] mVisible=true mFlags=[]}, InsetsSource: {3e2d0001 mType=navigationBars mFrame=[0,2358][1080,2400] mVisible=true mFlags=[SUPPRESS_SCRIM]}, InsetsSource: {3e2d0004 mType=systemGestures mFrame=[0,0][84,2400] mVisible=true mFlags=[]}, InsetsSource: {3e2d0005 mType=mandatorySystemGestures mFrame=[0,2310][1080,2400] mVisible=true mFlags=[]}, InsetsSource: {3e2d0006 mType=tappableElement mFrame=[0,0][0,0] mVisible=true mFlags=[]}, InsetsSource: {3e2d0024 mType=systemGestures mFrame=[996,0][1080,2400] mVisible=true mFlags=[]} }
onStateChanged: host=com.xxx.StartActivity, from=android.view.ViewRootImpl$ViewRootHandler.handleMessageImpl:7196, state=InsetsState: {mDisplayFrame=Rect(0, 0 - 1080, 2400), mDisplayCutout=DisplayCutout{insets=Rect(0, 88 - 0, 0) waterfall=Insets{left=0, top=0, right=0, bottom=0} boundingRect={Bounds=[Rect(0, 0 - 0, 0), Rect(512, 0 - 568, 88), Rect(0, 0 - 0, 0), Rect(0, 0 - 0, 0)]} cutoutPathParserInfo={CutoutPathParserInfo{displayWidth=1080 displayHeight=2400 physicalDisplayWidth=1080 physicalDisplayHeight=2400 density={2.8125} cutoutSpec={M 0,0 M 0,11.43427858034597 a 9.899054752987353,9.899054752987353 0 1,0 0,19.79810950597471 a 9.899054752987353,9.899054752987353 0 1,0 0,-19.79810950597471 Z @dp} rotation={0} scale={1.0} physicalPixelDisplaySizeRatio={1.0}}}}, mRoundedCorners=RoundedCorners{[RoundedCorner{position=TopLeft, radius=0, center=Point(0, 0)}, RoundedCorner{position=TopRight, radius=0, center=Point(0, 0)}, RoundedCorner{position=BottomRight, radius=0, center=Point(0, 0)}, RoundedCorner{position=BottomLeft, radius=0, center=Point(0, 0)}]} mRoundedCornerFrame=Rect(0, 0 - 1080, 2400), mPrivacyIndicatorBounds=PrivacyIndicatorBounds {static bounds=Rect(956, 0 - 1080, 88) rotation=0}, mDisplayShape=DisplayShape{ spec=-311912193 displayWidth=1080 displayHeight=2400 physicalPixelDisplaySizeRatio=1.0 rotation=0 offsetX=0 offsetY=0 scale=1.0}, mSources= { InsetsSource: {3 mType=ime mFrame=[0,1548][1080,2400] mVisible=true mFlags=[]}, InsetsSource: {27 mType=displayCutout mFrame=[0,0][1080,88] mVisible=true mFlags=[]}, InsetsSource: {3cd60000 mType=statusBars mFrame=[0,0][1080,88] mVisible=true mFlags=[]}, InsetsSource: {3cd60005 mType=mandatorySystemGestures mFrame=[0,0][1080,122] mVisible=true mFlags=[]}, InsetsSource: {3cd60006 mType=tappableElement mFrame=[0,0][1080,88] mVisible=true mFlags=[]}, InsetsSource: {3e2d0001 mType=navigationBars mFrame=[0,2358][1080,2400] mVisible=true mFlags=[SUPPRESS_SCRIM]}, InsetsSource: {3e2d0004 mType=systemGestures mFrame=[0,0][84,2400] mVisible=true mFlags=[]}, InsetsSource: {3e2d0005 mType=mandatorySystemGestures mFrame=[0,2310][1080,2400] mVisible=true mFlags=[]}, InsetsSource: {3e2d0006 mType=tappableElement mFrame=[0,0][0,0] mVisible=true mFlags=[]}, InsetsSource: {3e2d0024 mType=systemGestures mFrame=[996,0][1080,2400] mVisible=true mFlags=[]} }
handleResized, msg = 4 frames=ClientWindowFrames{frame=[0,0][1080,2400] display=[0,0][1080,2400] parentFrame=[0,0][0,0]} forceNextWindowRelayout=false displayId=0 dragResizing=false compatScale=1.0 frameChanged=false attachedFrameChanged=false configChanged=false displayChanged=false compatScaleChanged=false
mWNT: t=0xb4000072fa921cf0 mBlastBufferQueue=0xb4000072ea933d70 fn= 52906 mRenderHdrSdrRatio=1.0 caller= android.view.SyncRtSurfaceTransactionApplier.applyTransaction:96 android.view.SyncRtSurfaceTransactionApplier.lambda$scheduleApply$0:69 android.view.SyncRtSurfaceTransactionApplier.$r8$lambda$SgowXC58rj3PR958kHUfRgLZmvE:0
mWNT: t=0xb4000072fa9530d0 mBlastBufferQueue=0xb4000072ea933d70 fn= 52907 mRenderHdrSdrRatio=1.0 caller= android.view.SyncRtSurfaceTransactionApplier.applyTransaction:96 android.view.SyncRtSurfaceTransactionApplier.lambda$scheduleApply$0:69 android.view.SyncRtSurfaceTransactionApplier.$r8$lambda$SgowXC58rj3PR958kHUfRgLZmvE:0
handleWindowFocusChanged: 0 0 call from android.view.ViewRootImpl.-$$Nest$mhandleWindowFocusChanged:0
mWNT: t=0xb4000072fa940930 mBlastBufferQueue=0xb4000072ea933d70 fn= 52908 mRenderHdrSdrRatio=1.0 caller= android.view.SyncRtSurfaceTransactionApplier.applyTransaction:96 android.view.SyncRtSurfaceTransactionApplier.lambda$scheduleApply$0:69 android.view.SyncRtSurfaceTransactionApplier.$r8$lambda$SgowXC58rj3PR958kHUfRgLZmvE:0
onPreWindowFocus: skipped, hasWindowFocus=false mHasImeFocus=true
onPostWindowFocus: skipped, hasWindowFocus=false mHasImeFocus=true
```