• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2020 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 android.window;
18 
19 import android.annotation.IntDef;
20 import android.annotation.NonNull;
21 import android.annotation.Nullable;
22 import android.app.ActivityManager;
23 import android.app.TaskInfo;
24 import android.content.pm.ActivityInfo;
25 import android.os.Parcel;
26 import android.os.Parcelable;
27 import android.view.InsetsState;
28 import android.view.InsetsVisibilities;
29 import android.view.WindowManager;
30 
31 /**
32  * Information you can retrieve about a starting window of a particular task that is currently
33  * start in the system.
34  * @hide
35  */
36 public final class StartingWindowInfo implements Parcelable {
37     /**
38      * Prefer nothing or not care the type of starting window.
39      * @hide
40      */
41     public static final int STARTING_WINDOW_TYPE_NONE = 0;
42     /**
43      * Prefer splash screen starting window.
44      * @hide
45      */
46     public static final int STARTING_WINDOW_TYPE_SPLASH_SCREEN = 1;
47     /**
48      * Prefer snapshot starting window.
49      * @hide
50      */
51     public static final int STARTING_WINDOW_TYPE_SNAPSHOT = 2;
52     /**
53      * Prefer solid color splash screen starting window.
54      * @hide
55      */
56     public static final int STARTING_WINDOW_TYPE_SOLID_COLOR_SPLASH_SCREEN = 3;
57 
58     /** @hide **/
59     public static final int STARTING_WINDOW_TYPE_LEGACY_SPLASH_SCREEN = 4;
60 
61     /**
62      * @hide
63      */
64     @IntDef(flag = true, prefix = "STARTING_WINDOW_TYPE_", value = {
65             STARTING_WINDOW_TYPE_NONE,
66             STARTING_WINDOW_TYPE_SPLASH_SCREEN,
67             STARTING_WINDOW_TYPE_SNAPSHOT,
68             STARTING_WINDOW_TYPE_SOLID_COLOR_SPLASH_SCREEN,
69             STARTING_WINDOW_TYPE_LEGACY_SPLASH_SCREEN
70     })
71     public @interface StartingWindowType {}
72 
73     /**
74      * The {@link TaskInfo} from this task.
75      *  @hide
76      */
77     @NonNull
78     public ActivityManager.RunningTaskInfo taskInfo;
79 
80     /**
81      * The {@link ActivityInfo} of the target activity which to create the starting window.
82      * It can be null if the info is the same as the top in task info.
83      * @hide
84      */
85     @Nullable
86     public ActivityInfo targetActivityInfo;
87 
88     /**
89      * InsetsState of TopFullscreenOpaqueWindow
90      * @hide
91      */
92     @Nullable
93     public InsetsState topOpaqueWindowInsetsState;
94 
95     /**
96      * LayoutParams of TopFullscreenOpaqueWindow
97      * @hide
98      */
99     @Nullable
100     public WindowManager.LayoutParams topOpaqueWindowLayoutParams;
101 
102     /**
103      * LayoutParams of MainWindow
104      * @hide
105      */
106     @Nullable
107     public WindowManager.LayoutParams mainWindowLayoutParams;
108 
109     /**
110      * @hide
111      */
112     @IntDef(flag = true, prefix = "TYPE_PARAMETER_", value = {
113             TYPE_PARAMETER_NEW_TASK,
114             TYPE_PARAMETER_TASK_SWITCH,
115             TYPE_PARAMETER_PROCESS_RUNNING,
116             TYPE_PARAMETER_ALLOW_TASK_SNAPSHOT,
117             TYPE_PARAMETER_ACTIVITY_CREATED,
118             TYPE_PARAMETER_USE_SOLID_COLOR_SPLASH_SCREEN,
119             TYPE_PARAMETER_ALLOW_HANDLE_SOLID_COLOR_SCREEN,
120             TYPE_PARAMETER_LEGACY_SPLASH_SCREEN
121     })
122     public @interface StartingTypeParams {}
123 
124     /**
125      * The parameters of the starting window...
126      * @hide
127      */
128     public static final int TYPE_PARAMETER_NEW_TASK = 0x00000001;
129     /** @hide */
130     public static final int TYPE_PARAMETER_TASK_SWITCH = 0x00000002;
131     /** @hide */
132     public static final int TYPE_PARAMETER_PROCESS_RUNNING = 0x00000004;
133     /** @hide */
134     public static final int TYPE_PARAMETER_ALLOW_TASK_SNAPSHOT = 0x00000008;
135     /** @hide */
136     public static final int TYPE_PARAMETER_ACTIVITY_CREATED = 0x00000010;
137     /** @hide */
138     public static final int TYPE_PARAMETER_USE_SOLID_COLOR_SPLASH_SCREEN = 0x00000020;
139     /**
140      * The parameter which indicates if the activity has finished drawing.
141      * @hide
142      */
143     public static final int TYPE_PARAMETER_ACTIVITY_DRAWN = 0x00000040;
144     /**
145      * Application will receive the
146      * {@link
147      * android.window.SplashScreen.OnExitAnimationListener#onSplashScreenExit(SplashScreenView)}
148      * callback, even when the splash screen only shows a solid color.
149      *
150      * @hide
151      */
152     public static final int TYPE_PARAMETER_ALLOW_HANDLE_SOLID_COLOR_SCREEN = 0x00000080;
153     /**
154      * Application is allowed to use the legacy splash screen
155      * @hide
156      */
157     public static final int TYPE_PARAMETER_LEGACY_SPLASH_SCREEN = 0x80000000;
158 
159     /**
160      * The parameters which effect the starting window type.
161      * @see android.window.StartingWindowInfo.StartingTypeParams
162      * @hide
163      */
164     public int startingWindowTypeParameter;
165 
166     /**
167      * Specifies a theme for the splash screen.
168      * @hide
169      */
170     public int splashScreenThemeResId;
171 
172     /**
173      * Is keyguard occluded on default display.
174      * @hide
175      */
176     public boolean isKeyguardOccluded = false;
177 
178     /**
179      * TaskSnapshot.
180      * @hide
181      */
182     public TaskSnapshot taskSnapshot;
183 
184     /**
185      * The requested insets visibility of the top main window.
186      * @hide
187      */
188     public final InsetsVisibilities requestedVisibilities = new InsetsVisibilities();
189 
StartingWindowInfo()190     public StartingWindowInfo() {
191 
192     }
193 
StartingWindowInfo(@onNull Parcel source)194     private StartingWindowInfo(@NonNull Parcel source) {
195         readFromParcel(source);
196     }
197 
198     /**
199      * Return whether the application allow to handle the solid color style splash screen.
200      */
allowHandleSolidColorSplashScreen()201     public boolean allowHandleSolidColorSplashScreen() {
202         return (startingWindowTypeParameter & TYPE_PARAMETER_ALLOW_HANDLE_SOLID_COLOR_SCREEN) != 0;
203     }
204 
205     @Override
describeContents()206     public int describeContents() {
207         return 0;
208     }
209 
210     @Override
writeToParcel(@onNull Parcel dest, int flags)211     public void writeToParcel(@NonNull Parcel dest, int flags) {
212         dest.writeTypedObject(taskInfo, flags);
213         dest.writeTypedObject(targetActivityInfo, flags);
214         dest.writeInt(startingWindowTypeParameter);
215         dest.writeTypedObject(topOpaqueWindowInsetsState, flags);
216         dest.writeTypedObject(topOpaqueWindowLayoutParams, flags);
217         dest.writeTypedObject(mainWindowLayoutParams, flags);
218         dest.writeInt(splashScreenThemeResId);
219         dest.writeBoolean(isKeyguardOccluded);
220         dest.writeTypedObject(taskSnapshot, flags);
221         requestedVisibilities.writeToParcel(dest, flags);
222     }
223 
readFromParcel(@onNull Parcel source)224     void readFromParcel(@NonNull Parcel source) {
225         taskInfo = source.readTypedObject(ActivityManager.RunningTaskInfo.CREATOR);
226         targetActivityInfo = source.readTypedObject(ActivityInfo.CREATOR);
227         startingWindowTypeParameter = source.readInt();
228         topOpaqueWindowInsetsState = source.readTypedObject(InsetsState.CREATOR);
229         topOpaqueWindowLayoutParams = source.readTypedObject(
230                 WindowManager.LayoutParams.CREATOR);
231         mainWindowLayoutParams = source.readTypedObject(WindowManager.LayoutParams.CREATOR);
232         splashScreenThemeResId = source.readInt();
233         isKeyguardOccluded = source.readBoolean();
234         taskSnapshot = source.readTypedObject(TaskSnapshot.CREATOR);
235         requestedVisibilities.readFromParcel(source);
236     }
237 
238     @Override
toString()239     public String toString() {
240         return "StartingWindowInfo{taskId=" + taskInfo.taskId
241                 + " targetActivityInfo=" + targetActivityInfo
242                 + " displayId=" + taskInfo.displayId
243                 + " topActivityType=" + taskInfo.topActivityType
244                 + " preferredStartingWindowType="
245                 + Integer.toHexString(startingWindowTypeParameter)
246                 + " insetsState=" + topOpaqueWindowInsetsState
247                 + " topWindowLayoutParams=" + topOpaqueWindowLayoutParams
248                 + " mainWindowLayoutParams=" + mainWindowLayoutParams
249                 + " splashScreenThemeResId " + Integer.toHexString(splashScreenThemeResId);
250     }
251 
252     public static final @android.annotation.NonNull Creator<StartingWindowInfo> CREATOR =
253             new Creator<StartingWindowInfo>() {
254                 public StartingWindowInfo createFromParcel(@NonNull Parcel source) {
255                     return new StartingWindowInfo(source);
256                 }
257                 public StartingWindowInfo[] newArray(int size) {
258                     return new StartingWindowInfo[size];
259                 }
260             };
261 }
262