1 /* 2 * Copyright (C) 2024 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 package com.android.server.wm; 17 18 import android.annotation.NonNull; 19 import android.content.pm.PackageManager; 20 21 import com.android.server.wm.utils.OptPropFactory; 22 23 import java.io.PrintWriter; 24 25 /** 26 * Allows the interaction with all the app compat policies and configurations 27 */ 28 class AppCompatController { 29 @NonNull 30 private final TransparentPolicy mTransparentPolicy; 31 @NonNull 32 private final AppCompatOrientationPolicy mOrientationPolicy; 33 @NonNull 34 private final AppCompatAspectRatioPolicy mAspectRatioPolicy; 35 @NonNull 36 private final AppCompatSafeRegionPolicy mSafeRegionPolicy; 37 @NonNull 38 private final AppCompatReachabilityPolicy mReachabilityPolicy; 39 @NonNull 40 private final DesktopAppCompatAspectRatioPolicy mDesktopAspectRatioPolicy; 41 @NonNull 42 private final AppCompatOverrides mAppCompatOverrides; 43 @NonNull 44 private final AppCompatDeviceStateQuery mDeviceStateQuery; 45 @NonNull 46 private final AppCompatLetterboxPolicy mLetterboxPolicy; 47 @NonNull 48 private final AppCompatSizeCompatModePolicy mSizeCompatModePolicy; 49 @NonNull 50 private final AppCompatSandboxingPolicy mSandboxingPolicy; 51 @NonNull 52 private final AppCompatDisplayCompatModePolicy mDisplayCompatModePolicy; 53 AppCompatController(@onNull WindowManagerService wmService, @NonNull ActivityRecord activityRecord)54 AppCompatController(@NonNull WindowManagerService wmService, 55 @NonNull ActivityRecord activityRecord) { 56 final PackageManager packageManager = wmService.mContext.getPackageManager(); 57 final OptPropFactory optPropBuilder = new OptPropFactory(packageManager, 58 activityRecord.packageName, activityRecord.mUserId); 59 mDeviceStateQuery = new AppCompatDeviceStateQuery(activityRecord); 60 mTransparentPolicy = new TransparentPolicy(activityRecord, 61 wmService.mAppCompatConfiguration); 62 mAppCompatOverrides = new AppCompatOverrides(activityRecord, packageManager, 63 wmService.mAppCompatConfiguration, optPropBuilder, mDeviceStateQuery); 64 mOrientationPolicy = new AppCompatOrientationPolicy(activityRecord, mAppCompatOverrides); 65 mAspectRatioPolicy = new AppCompatAspectRatioPolicy(activityRecord, 66 mTransparentPolicy, mAppCompatOverrides); 67 mSafeRegionPolicy = new AppCompatSafeRegionPolicy(activityRecord, packageManager); 68 mReachabilityPolicy = new AppCompatReachabilityPolicy(activityRecord, 69 wmService.mAppCompatConfiguration); 70 mLetterboxPolicy = new AppCompatLetterboxPolicy(activityRecord, 71 wmService.mAppCompatConfiguration); 72 mDesktopAspectRatioPolicy = new DesktopAppCompatAspectRatioPolicy(activityRecord, 73 mAppCompatOverrides, mTransparentPolicy, wmService.mAppCompatConfiguration); 74 mSizeCompatModePolicy = new AppCompatSizeCompatModePolicy(activityRecord, 75 mAppCompatOverrides); 76 mSandboxingPolicy = new AppCompatSandboxingPolicy(activityRecord); 77 mDisplayCompatModePolicy = new AppCompatDisplayCompatModePolicy(); 78 } 79 80 @NonNull getTransparentPolicy()81 TransparentPolicy getTransparentPolicy() { 82 return mTransparentPolicy; 83 } 84 85 @NonNull getOrientationPolicy()86 AppCompatOrientationPolicy getOrientationPolicy() { 87 return mOrientationPolicy; 88 } 89 90 @NonNull getAspectRatioPolicy()91 AppCompatAspectRatioPolicy getAspectRatioPolicy() { 92 return mAspectRatioPolicy; 93 } 94 95 @NonNull getSafeRegionPolicy()96 AppCompatSafeRegionPolicy getSafeRegionPolicy() { 97 return mSafeRegionPolicy; 98 } 99 100 @NonNull getDesktopAspectRatioPolicy()101 DesktopAppCompatAspectRatioPolicy getDesktopAspectRatioPolicy() { 102 return mDesktopAspectRatioPolicy; 103 } 104 105 @NonNull getOrientationOverrides()106 AppCompatOrientationOverrides getOrientationOverrides() { 107 return mAppCompatOverrides.getOrientationOverrides(); 108 } 109 110 @NonNull getCameraOverrides()111 AppCompatCameraOverrides getCameraOverrides() { 112 return mAppCompatOverrides.getCameraOverrides(); 113 } 114 115 @NonNull getAspectRatioOverrides()116 AppCompatAspectRatioOverrides getAspectRatioOverrides() { 117 return mAppCompatOverrides.getAspectRatioOverrides(); 118 } 119 120 @NonNull getResizeOverrides()121 AppCompatResizeOverrides getResizeOverrides() { 122 return mAppCompatOverrides.getResizeOverrides(); 123 } 124 125 @NonNull getReachabilityPolicy()126 AppCompatReachabilityPolicy getReachabilityPolicy() { 127 return mReachabilityPolicy; 128 } 129 130 @NonNull getLetterboxPolicy()131 AppCompatLetterboxPolicy getLetterboxPolicy() { 132 return mLetterboxPolicy; 133 } 134 135 @NonNull getFocusOverrides()136 AppCompatFocusOverrides getFocusOverrides() { 137 return mAppCompatOverrides.getFocusOverrides(); 138 } 139 140 @NonNull getReachabilityOverrides()141 AppCompatReachabilityOverrides getReachabilityOverrides() { 142 return mAppCompatOverrides.getReachabilityOverrides(); 143 } 144 145 @NonNull getDeviceStateQuery()146 AppCompatDeviceStateQuery getDeviceStateQuery() { 147 return mDeviceStateQuery; 148 } 149 150 @NonNull getLetterboxOverrides()151 AppCompatLetterboxOverrides getLetterboxOverrides() { 152 return mAppCompatOverrides.getLetterboxOverrides(); 153 } 154 155 @NonNull getSizeCompatModePolicy()156 AppCompatSizeCompatModePolicy getSizeCompatModePolicy() { 157 return mSizeCompatModePolicy; 158 } 159 160 @NonNull getSandboxingPolicy()161 AppCompatSandboxingPolicy getSandboxingPolicy() { 162 return mSandboxingPolicy; 163 } 164 165 @NonNull getDisplayCompatModePolicy()166 AppCompatDisplayCompatModePolicy getDisplayCompatModePolicy() { 167 return mDisplayCompatModePolicy; 168 } 169 dump(@onNull PrintWriter pw, @NonNull String prefix)170 void dump(@NonNull PrintWriter pw, @NonNull String prefix) { 171 getTransparentPolicy().dump(pw, prefix); 172 getLetterboxPolicy().dump(pw, prefix); 173 getSizeCompatModePolicy().dump(pw, prefix); 174 getSafeRegionPolicy().dump(pw, prefix); 175 } 176 } 177