1 /* 2 * Copyright (C) 2021 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.car.pm; 18 19 import static com.google.common.truth.Truth.assertThat; 20 21 import org.junit.Test; 22 import org.junit.runner.RunWith; 23 import org.junit.runners.JUnit4; 24 25 @RunWith(JUnit4.class) 26 public class WindowDumpParserTest { 27 private static final String WINDOW_DUMP = "WINDOW MANAGER WINDOWS (dumpsys window windows)\n" 28 + " Window #0 Window{ccae0fb u10 com.app1}:\n" 29 + " mDisplayId=0 rootTaskId=1000006 mSession=Session{ef1bfd2 2683:u10a10088} " 30 + "mClient=android.os.BinderProxy@46bd28a\n" 31 + " mOwnerUid=1010088 showForAllUsers=false package=com.app1 " 32 + "appop=SYSTEM_ALERT_WINDOW\n" 33 + " mAttrs={(0,0)(0x0) gr=TOP RIGHT CENTER sim={adjust=pan} ty=APPLICATION_OVERLAY" 34 + " fmt=TRANSPARENT\n" 35 + " isOnScreen=true\n" 36 + " isVisible=true\n" 37 38 + " Window #1 Window{17aaef4 u0 App 2}:\n" 39 + " mDisplayId=1 rootTaskId=1000006 mSession=Session{629ba4e 2235:u0a10120} " 40 + "mClient=android.os.Binderproxy@3f3ea06\n" 41 + " mOwnerUid=10120 showForAllUsers=true package=com.app2 appop=NONE\n" 42 + " mAttrs={(24,0)(84x419) gr=BOTTOM RIGHT CENTER sim={adjust=pan} " 43 + "ty=DISPLAY_OVERLAY fmt=TRANSLUCENT\n" 44 + " fl=NOT_FOCUSABLE LAYOUT_NO_LIMITS HARDWARE_ACCELERATED\n" 45 + " pfl=NO_MOVE_ANIMATION USE_BLAST INSET_PARENT_FRAME_BY_IME\n" 46 + " bhv=DEFAULT\n" 47 + " fitTypes=STATUS_BARS NAVIGATION_BARS CAPTION_BAR}\n" 48 + " Requested w=1080 h=1920 mLayoutSeq=154\n" 49 + " mBaseLayer=21000 mSubLayer=0 mToken=AppWindowToken{546fe66 token=Token" 50 + "{8b7a6c1 ActivityRecord{2789ba8 u0 com.app2/.MainActivity t5}}}\n" 51 + " mAppToken=AppWindowToken{546fe66 token=Token{8b7a6c1 ActivityRecord{2789ba8 u0" 52 + " com.app2/.MainActivity t5}}}\n" 53 54 + ".BinderProxy@3f3ea06}\n" 55 + " Frames: containing=[0,0][1080,600] parent=[0,0][1080,600] display=[-10000," 56 + "-10000][10000,10000]\n" 57 + " mFrame=[972,181][1056,600] last=[0,0][0,0]\n" 58 + " surface=[0,0][0,0]\n" 59 + " WindowStateAnimator{8edd4a7 HVAC Passenger Temp}:\n" 60 + " mDrawState=NO_SURFACE mLastHidden=false\n" 61 + " mEnterAnimationPending=false mSystemDecorRect=[0,0][0,0]\n" 62 + " mShownAlpha=0.0 mAlpha=1.0 mLastAlpha=0.0\n" 63 + " mForceSeamlesslyRotate=false seamlesslyRotate: pending=null " 64 + "finishedFrameNumber=0\n" 65 + " isOnScreen=false\n" 66 + " isVisible=false\n" 67 68 + " Window #2 Window{1c5571 u0 HVAC Driver Temp}:\n" 69 + " mDisplayId=1 rootTaskId=1000006 mSession=Session{629ba4e 2235:u0a10120} " 70 + "mClient=android.os.BinderProxy@99ccafb\n" 71 + " mOwnerUid=10120 showForAllUsers=true package=com.app2 appop=NONE\n" 72 + " mAttrs={(24,0)(84x419) gr=BOTTOM LEFT CENTER sim={adjust=pan} " 73 + "ty=DISPLAY_OVERLAY fmt=TRANSLUCENT\n" 74 + " fl=NOT_FOCUSABLE LAYOUT_NO_LIMITS HARDWARE_ACCELERATED\n" 75 + " pfl=NO_MOVE_ANIMATION USE_BLAST INSET_PARENT_FRAME_BY_IME\n" 76 + " bhv=DEFAULT\n" 77 + " fitTypes=STATUS_BARS NAVIGATION_BARS CAPTION_BAR}\n" 78 + " Requested w=84 h=419 mLayoutSeq=143\n" 79 + " mBaseLayer=21000 mSubLayer=0 mToken=ActivityRecord{b44066 u10 com.app2/" 80 + "SecondActivity t1000031}\n" 81 + " mActivityRecord=ActivityRecord{b44066 u10 com.app2/SecondActivity t1000031}\n" 82 + ".BinderProxy@99ccafb}\n" 83 + " mViewVisibility=0x4 mHaveFrame=true mObscured=false\n" 84 + " mGivenContentInsets=[0,0][0,0] mGivenVisibleInsets=[0,0][0,0]\n" 85 + " isOnScreen=false\n" 86 + " isVisible=false\n" 87 88 + " Window #3 Window{1c5571 u0 HVAC Driver Temp}:\n" 89 + " mDisplayId=2 rootTaskId=1000006 mSession=Session{629ba4e 2235:u0a10120} " 90 + "mClient=android.os.BinderProxy@99ccafb\n" 91 + " mOwnerUid=10120 showForAllUsers=true package=com.app3 appop=NONE\n" 92 + " mAttrs={(24,0)(84x419) gr=BOTTOM LEFT CENTER sim={adjust=pan} " 93 + "ty=DISPLAY_OVERLAY fmt=TRANSLUCENT\n" 94 + " fl=NOT_FOCUSABLE LAYOUT_NO_LIMITS HARDWARE_ACCELERATED\n" 95 + " pfl=NO_MOVE_ANIMATION USE_BLAST INSET_PARENT_FRAME_BY_IME\n" 96 + " bhv=DEFAULT\n" 97 + " fitTypes=STATUS_BARS NAVIGATION_BARS CAPTION_BAR}\n" 98 + " Requested w=84 h=419 mLayoutSeq=143\n" 99 + " mBaseLayer=291000 mSubLayer=0 mToken=WindowToken{6bd1718 android.os" 100 + " mActivityRecord=ActivityRecord{a3f066 u10 com.app3/MainActivity t1000031}\n" 101 + ".BinderProxy@99ccafb}\n" 102 + " mViewVisibility=0x4 mHaveFrame=true mObscured=false\n" 103 + " mGivenContentInsets=[0,0][0,0] mGivenVisibleInsets=[0,0][0,0]\n" 104 + " isOnScreen=false\n" 105 + " isVisible=false\n" 106 107 + " Window #4 Window{1c5571 u0 HVAC Driver Temp}:\n" 108 + " mDisplayId=2 rootTaskId=1000006 mSession=Session{629ba4e 2235:u0a10120} " 109 + "mClient=android.os.BinderProxy@99ccafb\n" 110 + " mOwnerUid=10120 showForAllUsers=true package=com.app3 appop=NONE\n" 111 + " mAttrs={(24,0)(84x419) gr=BOTTOM LEFT CENTER sim={adjust=pan} " 112 + "ty=APPLICATION_STARTING fmt=TRANSLUCENT\n" 113 + " fl=NOT_FOCUSABLE LAYOUT_NO_LIMITS HARDWARE_ACCELERATED\n" 114 + " pfl=NO_MOVE_ANIMATION USE_BLAST INSET_PARENT_FRAME_BY_IME\n" 115 + " bhv=DEFAULT\n" 116 + " fitTypes=STATUS_BARS NAVIGATION_BARS CAPTION_BAR}\n" 117 + " Requested w=84 h=419 mLayoutSeq=143\n" 118 + " mBaseLayer=291000 mSubLayer=0 mToken=WindowToken{6bd1718 android.os" 119 + ".BinderProxy@99ccafb}\n" 120 + " mViewVisibility=0x4 mHaveFrame=true mObscured=false\n" 121 + " mGivenContentInsets=[0,0][0,0] mGivenVisibleInsets=[0,0][0,0]\n" 122 + " isOnScreen=false\n" 123 + " isVisible=false\n"; 124 125 private static final WindowDumpParser.Window APP_1_WINDOW = new WindowDumpParser.Window( 126 "com.app1", 0, null); 127 private static final WindowDumpParser.Window APP_2_WINDOW = new WindowDumpParser.Window( 128 "com.app2", 1, "2789ba8 u0 com.app2/.MainActivity t5"); 129 private static final WindowDumpParser.Window APP_2_WINDOW_2 = new WindowDumpParser.Window( 130 "com.app2", 1, "b44066 u10 com.app2/SecondActivity t1000031"); 131 private static final WindowDumpParser.Window APP_3_WINDOW = new WindowDumpParser.Window( 132 "com.app3", 2, "a3f066 u10 com.app3/MainActivity t1000031"); 133 134 @Test testWindowDumpParsing()135 public void testWindowDumpParsing() { 136 assertThat(WindowDumpParser.getParsedAppWindows(WINDOW_DUMP, "com.app1")).containsExactly( 137 APP_1_WINDOW); 138 assertThat(WindowDumpParser.getParsedAppWindows(WINDOW_DUMP, "com.app2")).containsExactly( 139 APP_2_WINDOW, APP_2_WINDOW_2); 140 assertThat(WindowDumpParser.getParsedAppWindows(WINDOW_DUMP, "com.app3")).containsExactly( 141 APP_3_WINDOW); 142 } 143 } 144