• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2019 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.server.wm.backgroundactivity.appa;
18 
19 import android.content.ComponentName;
20 import android.content.Context;
21 import android.server.wm.component.ComponentsBase;
22 
23 import java.util.HashMap;
24 
25 public class Components extends ComponentsBase {
26     public static final String JAVA_PACKAGE_NAME = getPackageName(Components.class);
27     private static final HashMap<String, Components> sPackageNameToComponents = new HashMap<>();
28 
get(Context context)29     public static Components get(Context context) {
30         return get(context.getPackageName());
31     }
32 
get(String packageName)33     public static Components get(String packageName) {
34         synchronized (sPackageNameToComponents) {
35             return sPackageNameToComponents.computeIfAbsent(packageName, Components::new);
36         }
37     }
38 
39     /** Action constants for {@link #FOREGROUND_ACTIVITY}. */
40     public static class ForegroundActivityAction {
41         public final String LAUNCH_BACKGROUND_ACTIVITIES;
42         public final String FINISH_ACTIVITY;
43 
ForegroundActivityAction(String packageName)44         public ForegroundActivityAction(String packageName) {
45             LAUNCH_BACKGROUND_ACTIVITIES = packageName + ".ACTION_LAUNCH_BACKGROUND_ACTIVITIES";
46             FINISH_ACTIVITY = packageName + ".ACTION_FINISH_ACTIVITY";
47         }
48     }
49 
50     /** Action constants for {@link #FOREGROUND_EMBEDDING_ACTIVITY}. */
51     public static class ForegroundEmbeddedActivityAction {
52         public final String LAUNCH_EMBEDDED_ACTIVITY;
53         public final String FINISH_ACTIVITY;
54 
ForegroundEmbeddedActivityAction(String packageName)55         public ForegroundEmbeddedActivityAction(String packageName) {
56             LAUNCH_EMBEDDED_ACTIVITY = packageName + ".ACTION_LAUNCH_EMBEDDED_ACTIVITY";
57             FINISH_ACTIVITY = packageName + ".ACTION_FINISH_ACTIVITY";
58         }
59     }
60 
61     /** Action constants for {@link #LAUNCH_INTO_PIP_ACTIVITY}. */
62     public static class LaunchIntoPipActivityAction {
63         public final String LAUNCH_INTO_PIP;
64 
LaunchIntoPipActivityAction(String packageName)65         public LaunchIntoPipActivityAction(String packageName) {
66             LAUNCH_INTO_PIP = packageName + ".ACTION_LAUNCH_INTO_PIP";
67         }
68     }
69 
70     /** Extra key constants for {@link #FOREGROUND_ACTIVITY}. */
71     public static class ForegroundActivityExtra {
72         public final String LAUNCH_BACKGROUND_ACTIVITY =
73                 "LAUNCH_BACKGROUND_ACTIVITY_EXTRA";
74         public final String LAUNCH_SECOND_BACKGROUND_ACTIVITY =
75                 "LAUNCH_SECOND_BACKGROUND_ACTIVITY_EXTRA";
76         public final String RELAUNCH_FOREGROUND_ACTIVITY_EXTRA =
77                 "RELAUNCH_FOREGROUND_ACTIVITY_EXTRA";
78         public final String START_ACTIVITY_FROM_FG_ACTIVITY_DELAY_MS =
79                 "START_ACTIVITY_FROM_FG_ACTIVITY_DELAY_MS_EXTRA";
80         public final String START_ACTIVITY_FROM_FG_ACTIVITY_NEW_TASK =
81                 "START_ACTIVITY_FROM_FG_ACTIVITY_NEW_TASK_EXTRA";
82 
83         // Keep in sync with  android.server.wm.backgroundactivity.common.CommonComponents
84         // .CommonForegroundActivityExtras
85         public final String ACTIVITY_ID = "ACTIVITY_ID_EXTRA";
86         public final String LAUNCH_INTENTS = "LAUNCH_INTENTS_EXTRA";
87         public final String FINISH_FIRST = "FINISH_FIRST_EXTRA";
88     }
89 
90     /** Extra key constants for {@link #SEND_PENDING_INTENT_RECEIVER} */
91     public static class SendPendingIntentReceiverExtra {
92         public final String IS_BROADCAST = "IS_BROADCAST_EXTRA";
93         public final String APP_B_PACKAGE = "APP_B_PACKAGE_EXTRA";
94 
95         /**
96          * Create the intent with BAL set to the explicit value.
97          *
98          * <p>This should not have any effect as the ActivityOptions on the Intent are not used when
99          * starting the PendingIntent.
100          */
101         public final String ALLOW_BAL_EXTRA_ON_PENDING_INTENT =
102                 "ALLOW_BAL_EXTRA_ON_PENDING_INTENT";
103         /**
104          * Create a PendingIntent with creator BAL option set to Deny BAL privilege.
105          */
106         public final String DENY_CREATOR_BAL_PRIVILEGE = "DENY_CREATOR_BAL_PRIVILEGE";
107         /**
108          * Create a PendingIntent to launch App B Foreground Activity instead of the usual App A
109          * Background Activity.
110          */
111         public final String CREATE_PI_LAUNCH_APP_B = "CREATE_PI_LAUNCH_APP_B";
112     }
113 
114     /** Extra key constants for {@link #START_ACTIVITY_RECEIVER} */
115     public static class StartActivityReceiverExtra {
116         public final String START_ACTIVITY_DELAY_MS =
117                 "START_ACTIVITY_FROM_FG_ACTIVITY_DELAY_MS_EXTRA";
118     }
119 
120     /** Extra key constants for {@link #VIRTUAL_DISPLAY_ACTIVITY} */
121     public static class VirtualDisplayActivityExtra {
122         public final String USE_PUBLIC_PRESENTATION =
123                 "USE_PUBLIC_PRESENTATION_EXTRA";
124     }
125 
126     // TODO(b/263368846) rename to camelCase
127     public final String APP_PACKAGE_NAME;
128     public final ComponentName BACKGROUND_ACTIVITY;
129     public final ComponentName SECOND_BACKGROUND_ACTIVITY;
130     public final ComponentName FOREGROUND_ACTIVITY;
131     public final ComponentName FOREGROUND_EMBEDDING_ACTIVITY;
132     public final ComponentName SEND_PENDING_INTENT_RECEIVER;
133     public final ComponentName START_ACTIVITY_RECEIVER;
134     public final ComponentName SIMPLE_ADMIN_RECEIVER;
135     public final ComponentName BACKGROUND_ACTIVITY_TEST_SERVICE;
136     public final ComponentName ACTIVITY_START_SERVICE;
137     public final ComponentName PIP_ACTIVITY;
138     public final ComponentName LAUNCH_INTO_PIP_ACTIVITY;
139     public final ComponentName RELAUNCHING_ACTIVITY;
140     public final ComponentName VIRTUAL_DISPLAY_ACTIVITY;
141     public final ComponentName WIDGET_CONFIG_TEST_ACTIVITY;
142     public final ComponentName WIDGET_PROVIDER;
143     public final ComponentName START_NEXT_MATCHING_ACTIVITY;
144 
145     public final ForegroundActivityAction FOREGROUND_ACTIVITY_ACTIONS;
146     public final ForegroundActivityExtra FOREGROUND_ACTIVITY_EXTRA = new ForegroundActivityExtra();
147 
148     public final ForegroundEmbeddedActivityAction FOREGROUND_EMBEDDING_ACTIVITY_ACTIONS;
149 
150     public final LaunchIntoPipActivityAction LAUNCH_INTO_PIP_ACTIONS;
151 
152     public final SendPendingIntentReceiverExtra SEND_PENDING_INTENT_RECEIVER_EXTRA =
153             new SendPendingIntentReceiverExtra();
154     public final StartActivityReceiverExtra START_ACTIVITY_RECEIVER_EXTRA =
155             new StartActivityReceiverExtra();
156 
157     public final VirtualDisplayActivityExtra VIRTUAL_DISPLAY_ACTIVITY_EXTRA =
158             new VirtualDisplayActivityExtra();
159 
Components(String appPackageName)160     public Components(String appPackageName) {
161         APP_PACKAGE_NAME = appPackageName;
162 
163         BACKGROUND_ACTIVITY =
164                 component(APP_PACKAGE_NAME, "BackgroundActivity");
165         SECOND_BACKGROUND_ACTIVITY =
166                 component(APP_PACKAGE_NAME, "SecondBackgroundActivity");
167         FOREGROUND_ACTIVITY =
168                 component(APP_PACKAGE_NAME, "ForegroundActivity");
169         FOREGROUND_EMBEDDING_ACTIVITY =
170                 component(APP_PACKAGE_NAME, "ForegroundEmbeddingActivity");
171         SEND_PENDING_INTENT_RECEIVER =
172                 component(APP_PACKAGE_NAME, "SendPendingIntentReceiver");
173         START_ACTIVITY_RECEIVER =
174                 component(APP_PACKAGE_NAME, "StartBackgroundActivityReceiver");
175         SIMPLE_ADMIN_RECEIVER =
176                 component(APP_PACKAGE_NAME, "SimpleAdminReceiver");
177         BACKGROUND_ACTIVITY_TEST_SERVICE =
178                 component(APP_PACKAGE_NAME, "BackgroundActivityTestService");
179         PIP_ACTIVITY =
180                 component(APP_PACKAGE_NAME, "PipActivity");
181         LAUNCH_INTO_PIP_ACTIVITY =
182                 component(APP_PACKAGE_NAME, "LaunchIntoPipActivity");
183         RELAUNCHING_ACTIVITY =
184                 component(APP_PACKAGE_NAME, "RelaunchingActivity");
185         VIRTUAL_DISPLAY_ACTIVITY =
186                 component(APP_PACKAGE_NAME, "VirtualDisplayActivity");
187         WIDGET_CONFIG_TEST_ACTIVITY =
188                 component(APP_PACKAGE_NAME, "WidgetConfigTestActivity");
189         WIDGET_PROVIDER =
190                 component(APP_PACKAGE_NAME, "WidgetProvider");
191         ACTIVITY_START_SERVICE =
192                 component(APP_PACKAGE_NAME, "ActivityStarterService");
193         START_NEXT_MATCHING_ACTIVITY =
194                 component(APP_PACKAGE_NAME, "StartNextMatchingActivity");
195 
196         FOREGROUND_ACTIVITY_ACTIONS = new ForegroundActivityAction(APP_PACKAGE_NAME);
197         FOREGROUND_EMBEDDING_ACTIVITY_ACTIONS =
198                 new ForegroundEmbeddedActivityAction(APP_PACKAGE_NAME);
199         LAUNCH_INTO_PIP_ACTIONS = new LaunchIntoPipActivityAction(APP_PACKAGE_NAME);
200     }
201 
component(String packageName, String className)202     private ComponentName component(String packageName, String className) {
203         String fullClassName = JAVA_PACKAGE_NAME + "." + className;
204         return new ComponentName(packageName, fullClassName);
205     }
206 }
207