• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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