1 /*
2  * Copyright (C) 2014 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.app;
18 
19 import android.annotation.NonNull;
20 import android.annotation.Nullable;
21 import android.content.ComponentName;
22 import android.content.IIntentSender;
23 import android.content.Intent;
24 import android.content.res.Configuration;
25 import android.os.Bundle;
26 import android.os.IBinder;
27 import android.os.SystemClock;
28 import android.service.voice.IVoiceInteractionSession;
29 import android.util.SparseIntArray;
30 
31 import com.android.internal.app.IVoiceInteractor;
32 
33 import java.io.PrintWriter;
34 import java.util.ArrayList;
35 import java.util.List;
36 
37 /**
38  * Activity manager local system service interface.
39  *
40  * @hide Only for use within the system server.
41  */
42 public abstract class ActivityManagerInternal {
43 
44     /**
45      * Type for {@link #notifyAppTransitionStarting}: The transition was started because we had
46      * the surface saved.
47      */
48     public static final int APP_TRANSITION_SAVED_SURFACE = 0;
49 
50     /**
51      * Type for {@link #notifyAppTransitionStarting}: The transition was started because we drew
52      * the splash screen.
53      */
54     public static final int APP_TRANSITION_SPLASH_SCREEN = 1;
55 
56     /**
57      * Type for {@link #notifyAppTransitionStarting}: The transition was started because we all
58      * app windows were drawn
59      */
60     public static final int APP_TRANSITION_WINDOWS_DRAWN = 2;
61 
62     /**
63      * Type for {@link #notifyAppTransitionStarting}: The transition was started because of a
64      * timeout.
65      */
66     public static final int APP_TRANSITION_TIMEOUT = 3;
67 
68     /**
69      * Type for {@link #notifyAppTransitionStarting}: The transition was started because of a
70      * we drew a task snapshot.
71      */
72     public static final int APP_TRANSITION_SNAPSHOT = 4;
73 
74     /**
75      * Grant Uri permissions from one app to another. This method only extends
76      * permission grants if {@code callingUid} has permission to them.
77      */
grantUriPermissionFromIntent(int callingUid, String targetPkg, Intent intent, int targetUserId)78     public abstract void grantUriPermissionFromIntent(int callingUid, String targetPkg,
79             Intent intent, int targetUserId);
80 
81     /**
82      * Verify that calling app has access to the given provider.
83      */
checkContentProviderAccess(String authority, int userId)84     public abstract String checkContentProviderAccess(String authority, int userId);
85 
86     // Called by the power manager.
onWakefulnessChanged(int wakefulness)87     public abstract void onWakefulnessChanged(int wakefulness);
88 
startIsolatedProcess(String entryPoint, String[] mainArgs, String processName, String abiOverride, int uid, Runnable crashHandler)89     public abstract int startIsolatedProcess(String entryPoint, String[] mainArgs,
90             String processName, String abiOverride, int uid, Runnable crashHandler);
91 
92     /**
93      * Acquires a sleep token with the specified tag.
94      *
95      * @param tag A string identifying the purpose of the token (eg. "Dream").
96      */
acquireSleepToken(@onNull String tag)97     public abstract SleepToken acquireSleepToken(@NonNull String tag);
98 
99     /**
100      * Sleep tokens cause the activity manager to put the top activity to sleep.
101      * They are used by components such as dreams that may hide and block interaction
102      * with underlying activities.
103      */
104     public static abstract class SleepToken {
105 
106         /**
107          * Releases the sleep token.
108          */
release()109         public abstract void release();
110     }
111 
112     /**
113      * Returns home activity for the specified user.
114      *
115      * @param userId ID of the user or {@link android.os.UserHandle#USER_ALL}
116      */
getHomeActivityForUser(int userId)117     public abstract ComponentName getHomeActivityForUser(int userId);
118 
119     /**
120      * Called when a user has been deleted. This can happen during normal device usage
121      * or just at startup, when partially removed users are purged. Any state persisted by the
122      * ActivityManager should be purged now.
123      *
124      * @param userId The user being cleaned up.
125      */
onUserRemoved(int userId)126     public abstract void onUserRemoved(int userId);
127 
onLocalVoiceInteractionStarted(IBinder callingActivity, IVoiceInteractionSession mSession, IVoiceInteractor mInteractor)128     public abstract void onLocalVoiceInteractionStarted(IBinder callingActivity,
129             IVoiceInteractionSession mSession,
130             IVoiceInteractor mInteractor);
131 
132     /**
133      * Callback for window manager to let activity manager know that we are finally starting the
134      * app transition;
135      *
136      * @param reasons A map from stack id to a reason integer why the transition was started,, which
137      *                must be one of the APP_TRANSITION_* values.
138      * @param timestamp The time at which the app transition started in
139      *                  {@link SystemClock#uptimeMillis()} timebase.
140      */
notifyAppTransitionStarting(SparseIntArray reasons, long timestamp)141     public abstract void notifyAppTransitionStarting(SparseIntArray reasons, long timestamp);
142 
143     /**
144      * Callback for window manager to let activity manager know that the app transition was
145      * cancelled.
146      */
notifyAppTransitionCancelled()147     public abstract void notifyAppTransitionCancelled();
148 
149     /**
150      * Callback for window manager to let activity manager know that the app transition is finished.
151      */
notifyAppTransitionFinished()152     public abstract void notifyAppTransitionFinished();
153 
154     /**
155      * Returns the top activity from each of the currently visible stacks. The first entry will be
156      * the focused activity.
157      */
getTopVisibleActivities()158     public abstract List<IBinder> getTopVisibleActivities();
159 
160     /**
161      * Callback for window manager to let activity manager know that docked stack changes its
162      * minimized state.
163      */
notifyDockedStackMinimizedChanged(boolean minimized)164     public abstract void notifyDockedStackMinimizedChanged(boolean minimized);
165 
166     /**
167      * Kill foreground apps from the specified user.
168      */
killForegroundAppsForUser(int userHandle)169     public abstract void killForegroundAppsForUser(int userHandle);
170 
171     /**
172      *  Sets how long a {@link PendingIntent} can be temporarily whitelist to by bypass restrictions
173      *  such as Power Save mode.
174      */
setPendingIntentWhitelistDuration(IIntentSender target, IBinder whitelistToken, long duration)175     public abstract void setPendingIntentWhitelistDuration(IIntentSender target,
176             IBinder whitelistToken, long duration);
177 
178     /**
179      * Allow DeviceIdleController to tell us about what apps are whitelisted.
180      */
setDeviceIdleWhitelist(int[] appids)181     public abstract void setDeviceIdleWhitelist(int[] appids);
182 
183     /**
184      * Update information about which app IDs are on the temp whitelist.
185      */
updateDeviceIdleTempWhitelist(int[] appids, int changingAppId, boolean adding)186     public abstract void updateDeviceIdleTempWhitelist(int[] appids, int changingAppId,
187             boolean adding);
188 
189     /**
190      * Updates and persists the {@link Configuration} for a given user.
191      *
192      * @param values the configuration to update
193      * @param userId the user to update the configuration for
194      */
updatePersistentConfigurationForUser(@onNull Configuration values, int userId)195     public abstract void updatePersistentConfigurationForUser(@NonNull Configuration values,
196             int userId);
197 
198     /**
199      * Start activity {@code intents} as if {@code packageName} on user {@code userId} did it.
200      *
201      * @return error codes used by {@link IActivityManager#startActivity} and its siblings.
202      */
startActivitiesAsPackage(String packageName, int userId, Intent[] intents, Bundle bOptions)203     public abstract int startActivitiesAsPackage(String packageName,
204             int userId, Intent[] intents, Bundle bOptions);
205 
206     /**
207      * Get the procstate for the UID.  The return value will be between
208      * {@link ActivityManager#MIN_PROCESS_STATE} and {@link ActivityManager#MAX_PROCESS_STATE}.
209      * Note if the UID doesn't exist, it'll return {@link ActivityManager#PROCESS_STATE_NONEXISTENT}
210      * (-1).
211      */
getUidProcessState(int uid)212     public abstract int getUidProcessState(int uid);
213 
214     /**
215      * Called when Keyguard flags might have changed.
216      *
217      * @param callback Callback to run after activity visibilities have been reevaluated. This can
218      *                 be used from window manager so that when the callback is called, it's
219      *                 guaranteed that all apps have their visibility updated accordingly.
220      */
notifyKeyguardFlagsChanged(@ullable Runnable callback)221     public abstract void notifyKeyguardFlagsChanged(@Nullable Runnable callback);
222 
223     /**
224      * @return {@code true} if system is ready, {@code false} otherwise.
225      */
isSystemReady()226     public abstract boolean isSystemReady();
227 
228     /**
229      * Called when the trusted state of Keyguard has changed.
230      */
notifyKeyguardTrustedChanged()231     public abstract void notifyKeyguardTrustedChanged();
232 
233     /**
234      * Sets if the given pid has an overlay UI or not.
235      *
236      * @param pid The pid we are setting overlay UI for.
237      * @param hasOverlayUi True if the process has overlay UI.
238      * @see android.view.WindowManager.LayoutParams#TYPE_APPLICATION_OVERLAY
239      */
setHasOverlayUi(int pid, boolean hasOverlayUi)240     public abstract void setHasOverlayUi(int pid, boolean hasOverlayUi);
241 
242     /**
243      * Called after the network policy rules are updated by
244      * {@link com.android.server.net.NetworkPolicyManagerService} for a specific {@param uid} and
245      * {@param procStateSeq}.
246      */
notifyNetworkPolicyRulesUpdated(int uid, long procStateSeq)247     public abstract void notifyNetworkPolicyRulesUpdated(int uid, long procStateSeq);
248 
249     /**
250      * Called after virtual display Id is updated by
251      * {@link com.android.server.vr.Vr2dDisplay} with a specific
252      * {@param vr2dDisplayId}.
253      */
setVr2dDisplayId(int vr2dDisplayId)254     public abstract void setVr2dDisplayId(int vr2dDisplayId);
255 
256     /**
257      * Saves the current activity manager state and includes the saved state in the next dump of
258      * activity manager.
259      */
saveANRState(String reason)260     public abstract void saveANRState(String reason);
261 
262     /**
263      * Clears the previously saved activity manager ANR state.
264      */
clearSavedANRState()265     public abstract void clearSavedANRState();
266 }
267