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