19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.app;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1991268cf21eace600792d04db1ac62e9268f48002Dianne Hackbornimport android.os.BatteryStats;
20cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackbornimport android.os.IBinder;
214b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasaniimport com.android.internal.app.IUsageStats;
228a0de58ece89c467c8e7415097d193e5f8db9db8Dianne Hackbornimport com.android.internal.app.ProcessStats;
234b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasaniimport com.android.internal.os.PkgUsageStats;
24cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackbornimport com.android.internal.os.TransferPipe;
258c84109b9fbbf473b225707a38261ff5f99d95fbDianne Hackbornimport com.android.internal.util.FastPrintWriter;
264b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ComponentName;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Intent;
30f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapuimport android.content.pm.ApplicationInfo;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.pm.ConfigurationInfo;
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.pm.IPackageDataObserver;
335320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackbornimport android.content.pm.PackageManager;
344120375d46091df8527bb701882e056fbb0e6b06Dianne Hackbornimport android.content.pm.UserInfo;
355ef44b7566566db08b62245cbb9002b548071603Kenny Rootimport android.content.res.Resources;
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Bitmap;
37967212cb542e6eeb308678367b53381bff984c31Craig Mautnerimport android.graphics.Rect;
388078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackbornimport android.os.Bundle;
394f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackbornimport android.os.Debug;
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Handler;
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel;
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable;
435320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackbornimport android.os.Process;
444b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasaniimport android.os.RemoteException;
458d224caf989b212f8e633cc1a8b0db453300a742Peter Visontayimport android.os.ServiceManager;
462c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackbornimport android.os.SystemProperties;
47f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackbornimport android.os.UserHandle;
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils;
495ef44b7566566db08b62245cbb9002b548071603Kenny Rootimport android.util.DisplayMetrics;
508d224caf989b212f8e633cc1a8b0db453300a742Peter Visontayimport android.util.Log;
51b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackbornimport android.util.Slog;
525ef44b7566566db08b62245cbb9002b548071603Kenny Root
53cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackbornimport java.io.FileDescriptor;
54cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackbornimport java.io.FileOutputStream;
55cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackbornimport java.io.PrintWriter;
568d224caf989b212f8e633cc1a8b0db453300a742Peter Visontayimport java.util.HashMap;
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.List;
588d224caf989b212f8e633cc1a8b0db453300a742Peter Visontayimport java.util.Map;
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Interact with the overall activities running in the system.
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class ActivityManager {
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static String TAG = "ActivityManager";
6543a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato    private static boolean localLOGV = false;
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private final Context mContext;
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private final Handler mHandler;
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
70a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
71cc2195bb560cc155bf3e7d3a7f27fe619a497124Scott Main     * <a href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code
72cc2195bb560cc155bf3e7d3a7f27fe619a497124Scott Main     * &lt;meta-data>}</a> name for a 'home' Activity that declares a package that is to be
73bd413f6c05d10ecd001b80c0f30fd031145da8aeChristopher Tate     * uninstalled in lieu of the declaring one.  The package named here must be
74cc2195bb560cc155bf3e7d3a7f27fe619a497124Scott Main     * signed with the same certificate as the one declaring the {@code &lt;meta-data>}.
75bd413f6c05d10ecd001b80c0f30fd031145da8aeChristopher Tate     */
76bd413f6c05d10ecd001b80c0f30fd031145da8aeChristopher Tate    public static final String META_HOME_ALTERNATE = "android.app.home.alternate";
77bd413f6c05d10ecd001b80c0f30fd031145da8aeChristopher Tate
78bd413f6c05d10ecd001b80c0f30fd031145da8aeChristopher Tate    /**
79a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Result for IActivityManager.startActivity: an error where the
80a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * start had to be canceled.
81a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
82a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
83a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_CANCELED = -6;
84a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
85a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
86a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Result for IActivityManager.startActivity: an error where the
87a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * thing being started is not an activity.
88a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
89a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
90a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_NOT_ACTIVITY = -5;
91a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
92a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
93a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Result for IActivityManager.startActivity: an error where the
94a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * caller does not have permission to start the activity.
95a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
96a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
97a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_PERMISSION_DENIED = -4;
98a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
99a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
100a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Result for IActivityManager.startActivity: an error where the
101a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * caller has requested both to forward a result and to receive
102a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * a result.
103a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
104a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
105a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_FORWARD_AND_REQUEST_CONFLICT = -3;
106a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
107a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
108a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Result for IActivityManager.startActivity: an error where the
109a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * requested class is not found.
110a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
111a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
112a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_CLASS_NOT_FOUND = -2;
113a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
114a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
115a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Result for IActivityManager.startActivity: an error where the
116a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * given Intent could not be resolved to an activity.
117a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
118a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
119a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_INTENT_NOT_RESOLVED = -1;
120a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
121a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
122a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Result for IActivityManaqer.startActivity: the activity was started
123a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * successfully as normal.
124a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
125a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
126a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_SUCCESS = 0;
127a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
128a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
129a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Result for IActivityManaqer.startActivity: the caller asked that the Intent not
130a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * be executed if it is the recipient, and that is indeed the case.
131a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
132a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
133a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_RETURN_INTENT_TO_CALLER = 1;
134a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
135a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
136a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Result for IActivityManaqer.startActivity: activity wasn't really started, but
137a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * a task was simply brought to the foreground.
138a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
139a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
140a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_TASK_TO_FRONT = 2;
141a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
142a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
143a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Result for IActivityManaqer.startActivity: activity wasn't really started, but
144a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * the given Intent was given to the existing top activity.
145a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
146a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
147a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_DELIVERED_TO_TOP = 3;
148a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
149a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
150a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Result for IActivityManaqer.startActivity: request was canceled because
151a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * app switches are temporarily canceled to ensure the user's last request
152a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * (such as pressing home) is performed.
153a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
154a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
155a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_SWITCHES_CANCELED = 4;
156a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
157a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
158a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Flag for IActivityManaqer.startActivity: do special start mode where
159a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * a new activity is launched only if it is needed.
160a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
161a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
162a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_FLAG_ONLY_IF_NEEDED = 1<<0;
163a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
164a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
165a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Flag for IActivityManaqer.startActivity: launch the app for
166a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * debugging.
167a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
168a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
169a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_FLAG_DEBUG = 1<<1;
170a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
171a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
172a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Flag for IActivityManaqer.startActivity: launch the app for
173a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * OpenGL tracing.
174a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
175a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
176a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_FLAG_OPENGL_TRACES = 1<<2;
177a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
178a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
179a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Flag for IActivityManaqer.startActivity: if the app is being
180a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * launched for profiling, automatically stop the profiler once done.
181a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
182a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
183a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int START_FLAG_AUTO_STOP_PROFILER = 1<<3;
184a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
185a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
186a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Result for IActivityManaqer.broadcastIntent: success!
187a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
188a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
189a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int BROADCAST_SUCCESS = 0;
190a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
191a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
192a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Result for IActivityManaqer.broadcastIntent: attempt to broadcast
193a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * a sticky intent without appropriate permission.
194a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
195a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
196a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int BROADCAST_STICKY_CANT_HAVE_PERMISSION = -1;
197a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
198a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
199a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Type for IActivityManaqer.getIntentSender: this PendingIntent is
200a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * for a sendBroadcast operation.
201a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
202a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
203a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int INTENT_SENDER_BROADCAST = 1;
204a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
205a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
206a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Type for IActivityManaqer.getIntentSender: this PendingIntent is
207a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * for a startActivity operation.
208a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
209a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
210a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int INTENT_SENDER_ACTIVITY = 2;
211a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
212a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
213a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Type for IActivityManaqer.getIntentSender: this PendingIntent is
214a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * for an activity result operation.
215a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
216a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
217a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int INTENT_SENDER_ACTIVITY_RESULT = 3;
218a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
219a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    /**
220a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * Type for IActivityManaqer.getIntentSender: this PendingIntent is
221a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * for a startService operation.
222a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     * @hide
223a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn     */
224a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn    public static final int INTENT_SENDER_SERVICE = 4;
225a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn
22680a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn    /** @hide User operation call: success! */
22780a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn    public static final int USER_OP_SUCCESS = 0;
22880a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn
22980a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn    /** @hide User operation call: given user id is not known. */
23080a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn    public static final int USER_OP_UNKNOWN_USER = -1;
23180a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn
23280a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn    /** @hide User operation call: given user id is the current user, can't be stopped. */
23380a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn    public static final int USER_OP_IS_CURRENT = -2;
23480a4af2bbc6af42ae605e454bf89558e564f5244Dianne Hackborn
235a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn    /** @hide Process is a persistent system process. */
236a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn    public static final int PROCESS_STATE_PERSISTENT = 0;
237a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn
238a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn    /** @hide Process is a persistent system process and is doing UI. */
239a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn    public static final int PROCESS_STATE_PERSISTENT_UI = 1;
240a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn
241c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn    /** @hide Process is hosting the current top activities.  Note that this covers
242c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn     * all activities that are visible to the user. */
243a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn    public static final int PROCESS_STATE_TOP = 2;
244a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn
245a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn    /** @hide Process is important to the user, and something they are aware of. */
246c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn    public static final int PROCESS_STATE_IMPORTANT_FOREGROUND = 3;
247a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn
248a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn    /** @hide Process is important to the user, but not something they are aware of. */
249a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn    public static final int PROCESS_STATE_IMPORTANT_BACKGROUND = 4;
250a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn
251a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn    /** @hide Process is in the background running a backup/restore operation. */
252c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn    public static final int PROCESS_STATE_BACKUP = 5;
253c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn
254c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn    /** @hide Process is in the background, but it can't restore its state so we want
255c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn     * to try to avoid killing it. */
256c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn    public static final int PROCESS_STATE_HEAVY_WEIGHT = 6;
257a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn
258c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn    /** @hide Process is in the background running a service.  Unlike oom_adj, this level
259c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn     * is used for both the normal running in background state and the executing
260c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn     * operations state. */
261a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn    public static final int PROCESS_STATE_SERVICE = 7;
262a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn
263c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn    /** @hide Process is in the background running a receiver.   Note that from the
264c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn     * perspective of oom_adj receivers run at a higher foreground level, but for our
265c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn     * prioritization here that is not necessary and putting them below services means
266c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn     * many fewer changes in some process states as they receive broadcasts. */
267c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn    public static final int PROCESS_STATE_RECEIVER = 8;
268c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn
269a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn    /** @hide Process is in the background but hosts the home activity. */
270c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn    public static final int PROCESS_STATE_HOME = 9;
271a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn
272a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn    /** @hide Process is in the background but hosts the last shown activity. */
273c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn    public static final int PROCESS_STATE_LAST_ACTIVITY = 10;
274c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn
275c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn    /** @hide Process is being cached for later use and contains activities. */
276c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn    public static final int PROCESS_STATE_CACHED_ACTIVITY = 11;
277c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn
278c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn    /** @hide Process is being cached for later use and is a client of another cached
279c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn     * process that contains activities. */
280c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn    public static final int PROCESS_STATE_CACHED_ACTIVITY_CLIENT = 12;
281a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn
282c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn    /** @hide Process is being cached for later use and is empty. */
283c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn    public static final int PROCESS_STATE_CACHED_EMPTY = 13;
284a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /*package*/ ActivityManager(Context context, Handler handler) {
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mContext = context;
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mHandler = handler;
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2910f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * Screen compatibility mode: the application most always run in
2920f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * compatibility mode.
2930f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * @hide
2940f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     */
2950f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    public static final int COMPAT_MODE_ALWAYS = -1;
2960f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn
2970f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    /**
2980f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * Screen compatibility mode: the application can never run in
2990f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * compatibility mode.
3000f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * @hide
3010f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     */
3020f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    public static final int COMPAT_MODE_NEVER = -2;
3030f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn
3040f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    /**
3050f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * Screen compatibility mode: unknown.
3060f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * @hide
3070f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     */
3080f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    public static final int COMPAT_MODE_UNKNOWN = -3;
3090f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn
3100f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    /**
3110f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * Screen compatibility mode: the application currently has compatibility
3120f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * mode disabled.
3130f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * @hide
3140f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     */
3150f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    public static final int COMPAT_MODE_DISABLED = 0;
3160f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn
3170f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    /**
3180f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * Screen compatibility mode: the application currently has compatibility
3190f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * mode enabled.
3200f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * @hide
3210f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     */
3220f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    public static final int COMPAT_MODE_ENABLED = 1;
3230f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn
3240f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    /**
3250f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * Screen compatibility mode: request to toggle the application's
3260f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * compatibility mode.
3270f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     * @hide
3280f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn     */
3290f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    public static final int COMPAT_MODE_TOGGLE = 2;
3300f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn
3310f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    /** @hide */
3320f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    public int getFrontActivityScreenCompatMode() {
3330f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn        try {
3340f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn            return ActivityManagerNative.getDefault().getFrontActivityScreenCompatMode();
3350f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn        } catch (RemoteException e) {
3360f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn            // System dead, we will be dead too soon!
3370f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn            return 0;
3380f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn        }
3390f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    }
3400f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn
341df9799f0fc3ef04d9b004ebbda44883f85321b24Dianne Hackborn    /** @hide */
3420f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    public void setFrontActivityScreenCompatMode(int mode) {
3430f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn        try {
3440f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn            ActivityManagerNative.getDefault().setFrontActivityScreenCompatMode(mode);
3450f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn        } catch (RemoteException e) {
3460f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn            // System dead, we will be dead too soon!
3470f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn        }
3480f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    }
3490f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn
350df9799f0fc3ef04d9b004ebbda44883f85321b24Dianne Hackborn    /** @hide */
3510f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    public int getPackageScreenCompatMode(String packageName) {
3520f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn        try {
3530f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn            return ActivityManagerNative.getDefault().getPackageScreenCompatMode(packageName);
3540f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn        } catch (RemoteException e) {
3550f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn            // System dead, we will be dead too soon!
3560f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn            return 0;
3570f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn        }
3580f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    }
3590f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn
360df9799f0fc3ef04d9b004ebbda44883f85321b24Dianne Hackborn    /** @hide */
3610f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    public void setPackageScreenCompatMode(String packageName, int mode) {
3620f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn        try {
3630f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn            ActivityManagerNative.getDefault().setPackageScreenCompatMode(packageName, mode);
3640f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn        } catch (RemoteException e) {
3650f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn            // System dead, we will be dead too soon!
3660f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn        }
3670f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    }
3680f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn
36936cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn    /** @hide */
37036cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn    public boolean getPackageAskScreenCompat(String packageName) {
37136cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        try {
37236cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn            return ActivityManagerNative.getDefault().getPackageAskScreenCompat(packageName);
37336cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        } catch (RemoteException e) {
37436cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn            // System dead, we will be dead too soon!
37536cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn            return false;
37636cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        }
37736cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn    }
37836cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn
37936cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn    /** @hide */
38036cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn    public void setPackageAskScreenCompat(String packageName, boolean ask) {
38136cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        try {
38236cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn            ActivityManagerNative.getDefault().setPackageAskScreenCompat(packageName, ask);
38336cd41f8efa6f6a683d3353d309ff548295af9e9Dianne Hackborn        } catch (RemoteException e) {
3840f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn            // System dead, we will be dead too soon!
3850f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn        }
3860f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    }
3870f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn
3880f1de9adde0b52d2a385a76232bd7ac30c3eeea2Dianne Hackborn    /**
3892c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn     * Return the approximate per-application memory class of the current
3902c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn     * device.  This gives you an idea of how hard a memory limit you should
3912c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn     * impose on your application to let the overall system work best.  The
3922c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn     * returned value is in megabytes; the baseline Android memory class is
3932c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn     * 16 (which happens to be the Java heap limit of those devices); some
3942c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn     * device with more memory may return 24 or even higher numbers.
3952c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn     */
3962c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn    public int getMemoryClass() {
3972c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn        return staticGetMemoryClass();
3982c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn    }
3992c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn
4002c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn    /** @hide */
4012c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn    static public int staticGetMemoryClass() {
4022c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn        // Really brain dead right now -- just take this from the configured
4032c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn        // vm heap size, and assume it is in megabytes and thus ends with "m".
4047ad33c8f9e7ecd356979dbad23c6c171b4f3339dDianne Hackborn        String vmHeapSize = SystemProperties.get("dalvik.vm.heapgrowthlimit", "");
405de39851592679a545b8b6fb749507ccc7ec407f9Dianne Hackborn        if (vmHeapSize != null && !"".equals(vmHeapSize)) {
406de39851592679a545b8b6fb749507ccc7ec407f9Dianne Hackborn            return Integer.parseInt(vmHeapSize.substring(0, vmHeapSize.length()-1));
407de39851592679a545b8b6fb749507ccc7ec407f9Dianne Hackborn        }
408de39851592679a545b8b6fb749507ccc7ec407f9Dianne Hackborn        return staticGetLargeMemoryClass();
4094e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn    }
4104e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn
4114e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn    /**
4124e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn     * Return the approximate per-application memory class of the current
4134e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn     * device when an application is running with a large heap.  This is the
4144e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn     * space available for memory-intensive applications; most applications
4154e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn     * should not need this amount of memory, and should instead stay with the
4164e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn     * {@link #getMemoryClass()} limit.  The returned value is in megabytes.
4174e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn     * This may be the same size as {@link #getMemoryClass()} on memory
4184e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn     * constrained devices, or it may be significantly larger on devices with
4194e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn     * a large amount of available RAM.
4203b81bc18bb661c02ad8074c39dab16644c1e65d0Dianne Hackborn     *
4213b81bc18bb661c02ad8074c39dab16644c1e65d0Dianne Hackborn     * <p>The is the size of the application's Dalvik heap if it has
4223b81bc18bb661c02ad8074c39dab16644c1e65d0Dianne Hackborn     * specified <code>android:largeHeap="true"</code> in its manifest.
4234e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn     */
4244e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn    public int getLargeMemoryClass() {
4254e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn        return staticGetLargeMemoryClass();
4264e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn    }
4274e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn
4284e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn    /** @hide */
4294e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn    static public int staticGetLargeMemoryClass() {
4304e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn        // Really brain dead right now -- just take this from the configured
4314e24aac6aeb6c7dad2a40aa6d455debf2d1738f6Dianne Hackborn        // vm heap size, and assume it is in megabytes and thus ends with "m".
4322c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn        String vmHeapSize = SystemProperties.get("dalvik.vm.heapsize", "16m");
4332c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn        return Integer.parseInt(vmHeapSize.substring(0, vmHeapSize.length()-1));
4342c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn    }
435b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn
4362c6c5e6e49795e6e24cd089c9018377d837ba931Dianne Hackborn    /**
437b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn     * Returns true if this is a low-RAM device.  Exactly whether a device is low-RAM
438b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn     * is ultimately up to the device configuration, but currently it generally means
439b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn     * something in the class of a 512MB device with about a 800x480 or less screen.
440b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn     * This is mostly intended to be used by apps to determine whether they should turn
441b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn     * off certain features that require more RAM.
442b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn     */
443b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn    public boolean isLowRamDevice() {
444b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn        return isLowRamDeviceStatic();
445b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn    }
44698365d7663cbd82979a5700faf0050220b01084dJeff Brown
447b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn    /** @hide */
448b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn    public static boolean isLowRamDeviceStatic() {
4492f61f91491785ef78d92d08ed3e09b0695564fadChristopher Tate        return "true".equals(SystemProperties.get("ro.config.low_ram", "false"));
450b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn    }
451b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn
452b375632c9cf7b7be9309ff55f602499d59cfa597Dianne Hackborn    /**
453b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn     * Used by persistent processes to determine if they are running on a
454b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn     * higher-end device so should be okay using hardware drawing acceleration
455b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn     * (which tends to consume a lot more RAM).
45649d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn     * @hide
45749d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn     */
458b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn    static public boolean isHighEndGfx() {
459b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn        return !isLowRamDeviceStatic() &&
460b4e12494935697fa4ede006b37e6be889ef27109Dianne Hackborn                !Resources.getSystem().getBoolean(com.android.internal.R.bool.config_avoidGfxAccel);
46149d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn    }
46249d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn
46349d228b3f31789f4aed361b526b7edb619a542e9Dianne Hackborn    /**
4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Information you can retrieve about tasks that the user has most recently
4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * started or visited.
4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class RecentTaskInfo implements Parcelable {
4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * If this task is currently running, this is the identifier for it.
4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * If it is not running, this will be -1.
4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int id;
4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
475d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn         * The true identifier of this task, valid even if it is not running.
476d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn         */
477d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn        public int persistentId;
478d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn
479d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn        /**
4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The original Intent used to launch the task.  You can use this
4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Intent to re-launch the task (if it is no longer running) or bring
4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * the current task to the front.
4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public Intent baseIntent;
4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * If this task was started from an alias, this is the actual
4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * activity component that was initially started; the component of
4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * the baseIntent in this case is the name of the actual activity
4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * implementation that the alias referred to.  Otherwise, this is null.
4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public ComponentName origActivity;
493d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn
494d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn        /**
495d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn         * Description of the task's last state.
496d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn         */
497d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn        public CharSequence description;
4986d90fed076fad7874e04833110bb1d63cdbc7eacCraig Mautner
4996d90fed076fad7874e04833110bb1d63cdbc7eacCraig Mautner        /**
5006d90fed076fad7874e04833110bb1d63cdbc7eacCraig Mautner         * The id of the ActivityStack this Task was on most recently.
5012703052413387a0ba9d66f04b6e0421d5f59674eCraig Mautner         * @hide
5026d90fed076fad7874e04833110bb1d63cdbc7eacCraig Mautner         */
5036d90fed076fad7874e04833110bb1d63cdbc7eacCraig Mautner        public int stackId;
5046d90fed076fad7874e04833110bb1d63cdbc7eacCraig Mautner
5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public RecentTaskInfo() {
5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5086d90fed076fad7874e04833110bb1d63cdbc7eacCraig Mautner        @Override
5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int describeContents() {
5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 0;
5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5136d90fed076fad7874e04833110bb1d63cdbc7eacCraig Mautner        @Override
5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void writeToParcel(Parcel dest, int flags) {
5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(id);
516d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn            dest.writeInt(persistentId);
5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (baseIntent != null) {
5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                dest.writeInt(1);
5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                baseIntent.writeToParcel(dest, 0);
5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else {
5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                dest.writeInt(0);
5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ComponentName.writeToParcel(origActivity, dest);
524d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn            TextUtils.writeToParcel(description, dest,
525d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn                    Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
5266d90fed076fad7874e04833110bb1d63cdbc7eacCraig Mautner            dest.writeInt(stackId);
5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void readFromParcel(Parcel source) {
5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            id = source.readInt();
531d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn            persistentId = source.readInt();
5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (source.readInt() != 0) {
5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                baseIntent = Intent.CREATOR.createFromParcel(source);
5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else {
5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                baseIntent = null;
5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            origActivity = ComponentName.readFromParcel(source);
538d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn            description = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
5396d90fed076fad7874e04833110bb1d63cdbc7eacCraig Mautner            stackId = source.readInt();
5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5416d90fed076fad7874e04833110bb1d63cdbc7eacCraig Mautner
5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final Creator<RecentTaskInfo> CREATOR
5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = new Creator<RecentTaskInfo>() {
5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public RecentTaskInfo createFromParcel(Parcel source) {
5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new RecentTaskInfo(source);
5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public RecentTaskInfo[] newArray(int size) {
5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new RecentTaskInfo[size];
5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private RecentTaskInfo(Parcel source) {
5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            readFromParcel(source);
5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Flag for use with {@link #getRecentTasks}: return all tasks, even those
5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * that have set their
5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link android.content.Intent#FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS} flag.
5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int RECENT_WITH_EXCLUDED = 0x0001;
5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
565d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn     * Provides a list that does not contain any
56653d9264de4f99a069dd7306f881d28ddd5956b35Dianne Hackborn     * recent tasks that currently are not available to the user.
56753d9264de4f99a069dd7306f881d28ddd5956b35Dianne Hackborn     */
56853d9264de4f99a069dd7306f881d28ddd5956b35Dianne Hackborn    public static final int RECENT_IGNORE_UNAVAILABLE = 0x0002;
569d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn
570d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn    /**
5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a list of the tasks that the user has recently launched, with
5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the most recent being first and older ones after in order.
573c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     *
574c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * <p><b>Note: this method is only intended for debugging and presenting
575c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * task management user interfaces</b>.  This should never be used for
576c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * core logic in an application, such as deciding between different
577c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * behaviors based on the information found here.  Such uses are
578c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * <em>not</em> supported, and will likely break in the future.  For
579c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * example, if multiple applications can be actively running at the
580c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * same time, assumptions made about the meaning of the data here for
581c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * purposes of control flow will be incorrect.</p>
582c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     *
5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param maxNum The maximum number of entries to return in the list.  The
5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * actual number returned may be smaller, depending on how many tasks the
5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user has started and the maximum number the system can remember.
586d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn     * @param flags Information about what to return.  May be any combination
587805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn     * of {@link #RECENT_WITH_EXCLUDED} and {@link #RECENT_IGNORE_UNAVAILABLE}.
5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a list of RecentTaskInfo records describing each of
5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the recent tasks.
5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws SecurityException Throws SecurityException if the caller does
5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not hold the {@link android.Manifest.permission#GET_TASKS} permission.
5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public List<RecentTaskInfo> getRecentTasks(int maxNum, int flags)
5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throws SecurityException {
5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return ActivityManagerNative.getDefault().getRecentTasks(maxNum,
599f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn                    flags, UserHandle.myUserId());
6008264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani        } catch (RemoteException e) {
6018264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani            // System dead, we will be dead too soon!
6028264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani            return null;
6038264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani        }
6048264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani    }
6058264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani
6068264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani    /**
6078264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * Same as {@link #getRecentTasks(int, int)} but returns the recent tasks for a
6088264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * specific user. It requires holding
6098264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * the {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} permission.
6108264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * @param maxNum The maximum number of entries to return in the list.  The
6118264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * actual number returned may be smaller, depending on how many tasks the
6128264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * user has started and the maximum number the system can remember.
6138264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * @param flags Information about what to return.  May be any combination
6148264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * of {@link #RECENT_WITH_EXCLUDED} and {@link #RECENT_IGNORE_UNAVAILABLE}.
6158264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     *
6168264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * @return Returns a list of RecentTaskInfo records describing each of
6178264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * the recent tasks.
6188264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     *
6198264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * @throws SecurityException Throws SecurityException if the caller does
6208264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * not hold the {@link android.Manifest.permission#GET_TASKS} or the
6218264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} permissions.
6228264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     * @hide
6238264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani     */
6248264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani    public List<RecentTaskInfo> getRecentTasksForUser(int maxNum, int flags, int userId)
6258264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani            throws SecurityException {
6268264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani        try {
6278264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani            return ActivityManagerNative.getDefault().getRecentTasks(maxNum,
6288264408f5995534f8e3147b001664ea0df52aaa5Amith Yamasani                    flags, userId);
6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // System dead, we will be dead too soon!
6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return null;
6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Information you can retrieve about a particular task that is currently
6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * "running" in the system.  Note that a running task does not mean the
6380c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * given task actually has a process it is actively running in; it simply
6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * means that the user has gone to it and never closed it, but currently
6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the system may have killed its process and is only holding on to its
6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * last state in order to restart it when the user returns.
6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class RunningTaskInfo implements Parcelable {
6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * A unique identifier for this task.
6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int id;
6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The component launched as the first activity in the task.  This can
6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * be considered the "application" of this task.
6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public ComponentName baseActivity;
6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The activity component at the top of the history stack of the task.
6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * This is what the user is currently doing.
6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public ComponentName topActivity;
6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
662805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn         * Thumbnail representation of the task's current state.  Currently
663805fd7ee0e5dc2939e85c84f78d9890a51982bc0Dianne Hackborn         * always null.
6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public Bitmap thumbnail;
6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Description of the task's current state.
6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public CharSequence description;
6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Number of activities in this task.
6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int numActivities;
6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Number of activities that are currently running (not stopped
6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * and persisted) in this task.
6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int numRunning;
6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
683c0fd8052349976fe0e9422f702e30e5030a0addeCraig Mautner        /**
684c0fd8052349976fe0e9422f702e30e5030a0addeCraig Mautner         * Last time task was run. For sorting.
685c0fd8052349976fe0e9422f702e30e5030a0addeCraig Mautner         * @hide
686c0fd8052349976fe0e9422f702e30e5030a0addeCraig Mautner         */
687c0fd8052349976fe0e9422f702e30e5030a0addeCraig Mautner        public long lastActiveTime;
688c0fd8052349976fe0e9422f702e30e5030a0addeCraig Mautner
6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public RunningTaskInfo() {
6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int describeContents() {
6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 0;
6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void writeToParcel(Parcel dest, int flags) {
6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(id);
6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ComponentName.writeToParcel(baseActivity, dest);
6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ComponentName.writeToParcel(topActivity, dest);
7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (thumbnail != null) {
7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                dest.writeInt(1);
7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                thumbnail.writeToParcel(dest, 0);
7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else {
7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                dest.writeInt(0);
7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            TextUtils.writeToParcel(description, dest,
7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(numActivities);
7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(numRunning);
7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void readFromParcel(Parcel source) {
7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            id = source.readInt();
7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            baseActivity = ComponentName.readFromParcel(source);
7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            topActivity = ComponentName.readFromParcel(source);
7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (source.readInt() != 0) {
7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                thumbnail = Bitmap.CREATOR.createFromParcel(source);
7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } else {
7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                thumbnail = null;
7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            description = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            numActivities = source.readInt();
7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            numRunning = source.readInt();
7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final Creator<RunningTaskInfo> CREATOR = new Creator<RunningTaskInfo>() {
7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public RunningTaskInfo createFromParcel(Parcel source) {
7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new RunningTaskInfo(source);
7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public RunningTaskInfo[] newArray(int size) {
7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new RunningTaskInfo[size];
7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private RunningTaskInfo(Parcel source) {
7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            readFromParcel(source);
7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
739d2835935d2df8be70d1b37d3ef3b2fe0155b3422Dianne Hackborn
7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a list of the tasks that are currently running, with
7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the most recent being first and older ones after in order.  Note that
7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * "running" does not mean any of the task's code is currently loaded or
7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * activity -- the task may have been frozen by the system, so that it
7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * can be restarted in its previous state when next brought to the
7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * foreground.
7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param maxNum The maximum number of entries to return in the list.  The
7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * actual number returned may be smaller, depending on how many tasks the
7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * user has started.
7510b2a6d0773211449fbde9d2706388714beeffebbJim Miller     *
7520b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * @param flags Optional flags
7530b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * @param receiver Optional receiver for delayed thumbnails
7540b2a6d0773211449fbde9d2706388714beeffebbJim Miller     *
7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a list of RunningTaskInfo records describing each of
7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the running tasks.
7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
7580b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * Some thumbnails may not be available at the time of this call. The optional
7590b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * receiver may be used to receive those thumbnails.
7600b2a6d0773211449fbde9d2706388714beeffebbJim Miller     *
7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @throws SecurityException Throws SecurityException if the caller does
7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * not hold the {@link android.Manifest.permission#GET_TASKS} permission.
7630b2a6d0773211449fbde9d2706388714beeffebbJim Miller     *
7640b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * @hide
7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
7660b2a6d0773211449fbde9d2706388714beeffebbJim Miller    public List<RunningTaskInfo> getRunningTasks(int maxNum, int flags, IThumbnailReceiver receiver)
7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throws SecurityException {
7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
7690b2a6d0773211449fbde9d2706388714beeffebbJim Miller            return ActivityManagerNative.getDefault().getTasks(maxNum, flags, receiver);
7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // System dead, we will be dead too soon!
7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return null;
7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
7750b2a6d0773211449fbde9d2706388714beeffebbJim Miller
7760b2a6d0773211449fbde9d2706388714beeffebbJim Miller    /**
7770b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * Return a list of the tasks that are currently running, with
7780b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * the most recent being first and older ones after in order.  Note that
7790b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * "running" does not mean any of the task's code is currently loaded or
7800b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * activity -- the task may have been frozen by the system, so that it
7810b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * can be restarted in its previous state when next brought to the
7820b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * foreground.
7830b2a6d0773211449fbde9d2706388714beeffebbJim Miller     *
784c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * <p><b>Note: this method is only intended for debugging and presenting
785c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * task management user interfaces</b>.  This should never be used for
786c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * core logic in an application, such as deciding between different
787c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * behaviors based on the information found here.  Such uses are
788c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * <em>not</em> supported, and will likely break in the future.  For
789c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * example, if multiple applications can be actively running at the
790c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * same time, assumptions made about the meaning of the data here for
791c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * purposes of control flow will be incorrect.</p>
792c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     *
7930b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * @param maxNum The maximum number of entries to return in the list.  The
7940b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * actual number returned may be smaller, depending on how many tasks the
7950b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * user has started.
7960b2a6d0773211449fbde9d2706388714beeffebbJim Miller     *
7970b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * @return Returns a list of RunningTaskInfo records describing each of
7980b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * the running tasks.
7990b2a6d0773211449fbde9d2706388714beeffebbJim Miller     *
8000b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * @throws SecurityException Throws SecurityException if the caller does
8010b2a6d0773211449fbde9d2706388714beeffebbJim Miller     * not hold the {@link android.Manifest.permission#GET_TASKS} permission.
8020b2a6d0773211449fbde9d2706388714beeffebbJim Miller     */
8030b2a6d0773211449fbde9d2706388714beeffebbJim Miller    public List<RunningTaskInfo> getRunningTasks(int maxNum)
8040b2a6d0773211449fbde9d2706388714beeffebbJim Miller            throws SecurityException {
8050b2a6d0773211449fbde9d2706388714beeffebbJim Miller        return getRunningTasks(maxNum, 0, null);
8060b2a6d0773211449fbde9d2706388714beeffebbJim Miller    }
8070b2a6d0773211449fbde9d2706388714beeffebbJim Miller
8080c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn    /**
8090c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * Remove some end of a task's activity stack that is not part of
8100c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * the main application.  The selected activities will be finished, so
8110c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * they are no longer part of the main task.
8120c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     *
8130c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * @param taskId The identifier of the task.
8140c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * @param subTaskIndex The number of the sub-task; this corresponds
8150c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * to the index of the thumbnail returned by {@link #getTaskThumbnails(int)}.
8160c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * @return Returns true if the sub-task was found and was removed.
8170c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     *
8180c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * @hide
8190c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     */
8200c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn    public boolean removeSubTask(int taskId, int subTaskIndex)
8210c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn            throws SecurityException {
8220c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn        try {
8230c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn            return ActivityManagerNative.getDefault().removeSubTask(taskId, subTaskIndex);
8240c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn        } catch (RemoteException e) {
8250c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn            // System dead, we will be dead too soon!
8260c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn            return false;
8270c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn        }
8280c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn    }
8290c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn
8300c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn    /**
8310c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * If set, the process of the root activity of the task will be killed
8320c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * as part of removing the task.
8330c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * @hide
8340c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     */
8350c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn    public static final int REMOVE_TASK_KILL_PROCESS = 0x0001;
8360c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn
8370c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn    /**
8380c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * Completely remove the given task.
8390c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     *
8400c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * @param taskId Identifier of the task to be removed.
8410c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * @param flags Additional operational flags.  May be 0 or
8420c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * {@link #REMOVE_TASK_KILL_PROCESS}.
8430c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * @return Returns true if the given task was found and removed.
8440c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     *
8450c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     * @hide
8460c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn     */
8470c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn    public boolean removeTask(int taskId, int flags)
8480c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn            throws SecurityException {
8490c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn        try {
8500c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn            return ActivityManagerNative.getDefault().removeTask(taskId, flags);
8510c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn        } catch (RemoteException e) {
8520c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn            // System dead, we will be dead too soon!
8530c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn            return false;
8540c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn        }
8550c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn    }
8560c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn
857d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn    /** @hide */
858f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn    public static class TaskThumbnails implements Parcelable {
859f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        public Bitmap mainThumbnail;
860f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn
861f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        public int numSubThumbbails;
862f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn
863f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        /** @hide */
864f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        public IThumbnailRetriever retriever;
865f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn
866f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        public TaskThumbnails() {
867f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        }
868f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn
869f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        public Bitmap getSubThumbnail(int index) {
870f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            try {
871f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                return retriever.getThumbnail(index);
872f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            } catch (RemoteException e) {
873f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                return null;
874f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            }
875f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        }
876f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn
877f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        public int describeContents() {
878f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            return 0;
879f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        }
880f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn
881f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        public void writeToParcel(Parcel dest, int flags) {
882f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            if (mainThumbnail != null) {
883f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                dest.writeInt(1);
884f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                mainThumbnail.writeToParcel(dest, 0);
885f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            } else {
886f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                dest.writeInt(0);
887f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            }
888f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            dest.writeInt(numSubThumbbails);
889f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            dest.writeStrongInterface(retriever);
890f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        }
891f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn
892f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        public void readFromParcel(Parcel source) {
893f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            if (source.readInt() != 0) {
894f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                mainThumbnail = Bitmap.CREATOR.createFromParcel(source);
895f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            } else {
896f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                mainThumbnail = null;
897f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            }
898f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            numSubThumbbails = source.readInt();
899f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            retriever = IThumbnailRetriever.Stub.asInterface(source.readStrongBinder());
900f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        }
901f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn
902f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        public static final Creator<TaskThumbnails> CREATOR = new Creator<TaskThumbnails>() {
903f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            public TaskThumbnails createFromParcel(Parcel source) {
904f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                return new TaskThumbnails(source);
905f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            }
906f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            public TaskThumbnails[] newArray(int size) {
907f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn                return new TaskThumbnails[size];
908f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            }
909f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        };
910f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn
911f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        private TaskThumbnails(Parcel source) {
912f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            readFromParcel(source);
913f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn        }
914f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn    }
915f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn
916f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn    /** @hide */
917f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn    public TaskThumbnails getTaskThumbnails(int id) throws SecurityException {
918d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn        try {
919f26fd99a7c2f554b0297760bb66336473c7db61fDianne Hackborn            return ActivityManagerNative.getDefault().getTaskThumbnails(id);
920d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn        } catch (RemoteException e) {
921d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn            // System dead, we will be dead too soon!
922d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn            return null;
923d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn        }
924d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn    }
92515491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn
92615491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn    /** @hide */
92715491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn    public Bitmap getTaskTopThumbnail(int id) throws SecurityException {
92815491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn        try {
92915491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn            return ActivityManagerNative.getDefault().getTaskTopThumbnail(id);
93015491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn        } catch (RemoteException e) {
93115491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn            // System dead, we will be dead too soon!
93215491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn            return null;
93315491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn        }
93415491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn    }
93515491c6a728131e322c45bc440500a8a78e4a410Dianne Hackborn
9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
937621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * Flag for {@link #moveTaskToFront(int, int)}: also move the "home"
938621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * activity along with the task, so it is positioned immediately behind
939621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * the task.
940621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     */
941621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn    public static final int MOVE_TASK_WITH_HOME = 0x00000001;
942621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn
943621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn    /**
944d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn     * Flag for {@link #moveTaskToFront(int, int)}: don't count this as a
945d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn     * user-instigated action, so the current activity will not receive a
946d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn     * hint that the user is leaving.
947d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn     */
948d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn    public static final int MOVE_TASK_NO_USER_ACTION = 0x00000002;
949d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn
950d94df45b3d1ab4004ef517acfc56a9310330f8d8Dianne Hackborn    /**
9518078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * Equivalent to calling {@link #moveTaskToFront(int, int, Bundle)}
9528078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * with a null options argument.
9538078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     *
9548078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * @param taskId The identifier of the task to be moved, as found in
9558078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * {@link RunningTaskInfo} or {@link RecentTaskInfo}.
9568078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * @param flags Additional operational flags, 0 or more of
957ecbfe253fb6fb83aa533828cce6e9c11ff7115daCraig Mautner     * {@link #MOVE_TASK_WITH_HOME}, {@link #MOVE_TASK_NO_USER_ACTION}.
9588078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     */
9598078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public void moveTaskToFront(int taskId, int flags) {
9608078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn        moveTaskToFront(taskId, flags, null);
9618078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    }
9628078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn
9638078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    /**
964621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * Ask that the task associated with a given task ID be moved to the
965621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * front of the stack, so it is now visible to the user.  Requires that
966621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * the caller hold permission {@link android.Manifest.permission#REORDER_TASKS}
967621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * or a SecurityException will be thrown.
968621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     *
969621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * @param taskId The identifier of the task to be moved, as found in
970621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * {@link RunningTaskInfo} or {@link RecentTaskInfo}.
971621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     * @param flags Additional operational flags, 0 or more of
972ecbfe253fb6fb83aa533828cce6e9c11ff7115daCraig Mautner     * {@link #MOVE_TASK_WITH_HOME}, {@link #MOVE_TASK_NO_USER_ACTION}.
9738078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * @param options Additional options for the operation, either null or
9748078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * as per {@link Context#startActivity(Intent, android.os.Bundle)
9758078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn     * Context.startActivity(Intent, Bundle)}.
976621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn     */
9778078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn    public void moveTaskToFront(int taskId, int flags, Bundle options) {
978621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn        try {
9798078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn            ActivityManagerNative.getDefault().moveTaskToFront(taskId, flags, options);
980621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn        } catch (RemoteException e) {
981621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn            // System dead, we will be dead too soon!
982621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn        }
983621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn    }
984621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn
985621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn    /**
9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Information you can retrieve about a particular Service that is
9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * currently running in the system.
9889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
9899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class RunningServiceInfo implements Parcelable {
9909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
9919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The service component.
9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public ComponentName service;
9949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
9969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * If non-zero, this is the process the service is running in.
9979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
9989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int pid;
9999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
10013025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * The UID that owns this service.
10023025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         */
10033025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        public int uid;
10043025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn
10053025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        /**
10069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The name of the process this service runs in.
10079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
10089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public String process;
10099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
10119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Set to true if the service has asked to run as a foreground process.
10129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
10139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public boolean foreground;
10149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
10163025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * The time when the service was first made active, either by someone
10179adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn         * starting or binding to it.  This
10189adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn         * is in units of {@link android.os.SystemClock#elapsedRealtime()}.
10199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
10209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public long activeSince;
10219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
10239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Set to true if this service has been explicitly started.
10249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
10259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public boolean started;
10269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
10289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Number of clients connected to the service.
10299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
10309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int clientCount;
10319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
10339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Number of times the service's process has crashed while the service
10349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * is running.
10359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
10369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int crashCount;
10379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
10399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The time when there was last activity in the service (either
10409adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn         * explicit requests to start it or clients binding to it).  This
10419adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn         * is in units of {@link android.os.SystemClock#uptimeMillis()}.
10429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
10439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public long lastActivityTime;
10449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
10469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * If non-zero, this service is not currently running, but scheduled to
10479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * restart at the given time.
10489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
10499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public long restarting;
10509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10513025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        /**
10523025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * Bit for {@link #flags}: set if this service has been
10533025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * explicitly started.
10543025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         */
10553025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        public static final int FLAG_STARTED = 1<<0;
10563025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn
10573025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        /**
10583025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * Bit for {@link #flags}: set if the service has asked to
10593025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * run as a foreground process.
10603025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         */
10613025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        public static final int FLAG_FOREGROUND = 1<<1;
10623025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn
10633025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        /**
10643025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * Bit for {@link #flags): set if the service is running in a
10653025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * core system process.
10663025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         */
10673025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        public static final int FLAG_SYSTEM_PROCESS = 1<<2;
10683025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn
10693025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        /**
10703025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * Bit for {@link #flags): set if the service is running in a
10713025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * persistent process.
10723025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         */
10733025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        public static final int FLAG_PERSISTENT_PROCESS = 1<<3;
10743025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn
10753025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        /**
10763025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         * Running flags.
10773025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn         */
10783025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn        public int flags;
10793025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn
1080dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        /**
1081dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * For special services that are bound to by system code, this is
1082dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * the package that holds the binding.
1083dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         */
1084dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        public String clientPackage;
1085dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
1086dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        /**
1087dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * For special services that are bound to by system code, this is
1088dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * a string resource providing a user-visible label for who the
1089dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * client is.
1090dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         */
1091dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        public int clientLabel;
1092dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
10939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public RunningServiceInfo() {
10949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
10959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
10969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int describeContents() {
10979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 0;
10989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
10999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void writeToParcel(Parcel dest, int flags) {
11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ComponentName.writeToParcel(service, dest);
11029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(pid);
11033025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn            dest.writeInt(uid);
11049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeString(process);
11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(foreground ? 1 : 0);
11069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeLong(activeSince);
11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(started ? 1 : 0);
11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(clientCount);
11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(crashCount);
11109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeLong(lastActivityTime);
11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeLong(restarting);
11123025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn            dest.writeInt(this.flags);
1113dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            dest.writeString(clientPackage);
1114dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            dest.writeInt(clientLabel);
11159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
11169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void readFromParcel(Parcel source) {
11189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            service = ComponentName.readFromParcel(source);
11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            pid = source.readInt();
11203025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn            uid = source.readInt();
11219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            process = source.readString();
11229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            foreground = source.readInt() != 0;
11239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            activeSince = source.readLong();
11249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            started = source.readInt() != 0;
11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            clientCount = source.readInt();
11269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            crashCount = source.readInt();
11279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            lastActivityTime = source.readLong();
11289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            restarting = source.readLong();
11293025ef332c29e255388f74b2afefe05f64bce07cDianne Hackborn            flags = source.readInt();
1130dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            clientPackage = source.readString();
1131dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            clientLabel = source.readInt();
11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final Creator<RunningServiceInfo> CREATOR = new Creator<RunningServiceInfo>() {
11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public RunningServiceInfo createFromParcel(Parcel source) {
11369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new RunningServiceInfo(source);
11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public RunningServiceInfo[] newArray(int size) {
11399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new RunningServiceInfo[size];
11409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private RunningServiceInfo(Parcel source) {
11449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            readFromParcel(source);
11459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
11469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
11479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
11499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Return a list of the services that are currently running.
1150c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     *
1151c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * <p><b>Note: this method is only intended for debugging or implementing
1152c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * service management type user interfaces.</b></p>
1153c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     *
11549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param maxNum The maximum number of entries to return in the list.  The
11559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * actual number returned may be smaller, depending on how many services
11569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * are running.
11579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
11589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a list of RunningServiceInfo records describing each of
11599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the running tasks.
11609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
11619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public List<RunningServiceInfo> getRunningServices(int maxNum)
11629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throws SecurityException {
11639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
11644b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani            return ActivityManagerNative.getDefault()
11659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    .getServices(maxNum, 0);
11669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
11679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // System dead, we will be dead too soon!
11689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return null;
11699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
11709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
11719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
11729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1173dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn     * Returns a PendingIntent you can start to show a control panel for the
1174dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn     * given running service.  If the service does not have a control panel,
1175dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn     * null is returned.
1176dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn     */
1177dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn    public PendingIntent getRunningServiceControlPanel(ComponentName service)
1178dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            throws SecurityException {
1179dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        try {
1180dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            return ActivityManagerNative.getDefault()
1181dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn                    .getRunningServiceControlPanel(service);
1182dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        } catch (RemoteException e) {
1183dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            // System dead, we will be dead too soon!
1184dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            return null;
1185dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        }
1186dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn    }
1187dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
1188dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn    /**
11899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Information you can retrieve about the available memory through
11909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * {@link ActivityManager#getMemoryInfo}.
11919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
11929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class MemoryInfo implements Parcelable {
11939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
119459325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn         * The available memory on the system.  This number should not
11959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * be considered absolute: due to the nature of the kernel, a significant
11969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * portion of this memory is actually in use and needed for the overall
11979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * system to run well.
11989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
11999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public long availMem;
120059325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn
120159325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn        /**
120259325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn         * The total memory accessible by the kernel.  This is basically the
120359325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn         * RAM size of the device, not including below-kernel fixed allocations
120459325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn         * like DMA buffers, RAM for the baseband CPU, etc.
120559325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn         */
120659325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn        public long totalMem;
120759325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn
12089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
12099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The threshold of {@link #availMem} at which we consider memory to be
12109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * low and start killing background services and other non-extraneous
12119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * processes.
12129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
12139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public long threshold;
12149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
12169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Set to true if the system considers itself to currently be in a low
12179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * memory situation.
12189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
12199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public boolean lowMemory;
12209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12217d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn        /** @hide */
12227d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn        public long hiddenAppThreshold;
12237d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn        /** @hide */
12247d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn        public long secondaryServerThreshold;
12257d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn        /** @hide */
12267d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn        public long visibleAppThreshold;
12277d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn        /** @hide */
12287d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn        public long foregroundAppThreshold;
12297d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn
12309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public MemoryInfo() {
12319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
12329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int describeContents() {
12349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 0;
12359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
12369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void writeToParcel(Parcel dest, int flags) {
12389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeLong(availMem);
123959325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn            dest.writeLong(totalMem);
12409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeLong(threshold);
12419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(lowMemory ? 1 : 0);
12427d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn            dest.writeLong(hiddenAppThreshold);
12437d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn            dest.writeLong(secondaryServerThreshold);
12447d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn            dest.writeLong(visibleAppThreshold);
12457d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn            dest.writeLong(foregroundAppThreshold);
12469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
12479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void readFromParcel(Parcel source) {
12499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            availMem = source.readLong();
125059325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn            totalMem = source.readLong();
12519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            threshold = source.readLong();
12529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            lowMemory = source.readInt() != 0;
12537d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn            hiddenAppThreshold = source.readLong();
12547d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn            secondaryServerThreshold = source.readLong();
12557d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn            visibleAppThreshold = source.readLong();
12567d608423b721e0153f37bfd5eba78fcd2489562dDianne Hackborn            foregroundAppThreshold = source.readLong();
12579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
12589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final Creator<MemoryInfo> CREATOR
12609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                = new Creator<MemoryInfo>() {
12619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public MemoryInfo createFromParcel(Parcel source) {
12629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new MemoryInfo(source);
12639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
12649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public MemoryInfo[] newArray(int size) {
12659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new MemoryInfo[size];
12669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
12679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
12689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
12699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private MemoryInfo(Parcel source) {
12709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            readFromParcel(source);
12719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
12729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
12739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1274c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn    /**
1275c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * Return general information about the memory state of the system.  This
1276c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * can be used to help decide how to manage your own memory, though note
1277c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * that polling is not recommended and
1278c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * {@link android.content.ComponentCallbacks2#onTrimMemory(int)
1279c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * ComponentCallbacks2.onTrimMemory(int)} is the preferred way to do this.
1280c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * Also see {@link #getMyMemoryState} for how to retrieve the current trim
1281c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * level of your process as needed, which gives a better hint for how to
1282c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * manage its memory.
1283c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     */
12849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void getMemoryInfo(MemoryInfo outInfo) {
12859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
12869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ActivityManagerNative.getDefault().getMemoryInfo(outInfo);
12879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
12889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
12899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1290967212cb542e6eeb308678367b53381bff984c31Craig Mautner
12915ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner    /**
12925ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner     * Information you can retrieve about the WindowManager StackBox hierarchy.
12935ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner     * @hide
12945ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner     */
12955ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner    public static class StackBoxInfo implements Parcelable {
12965ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        public int stackBoxId;
12975ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        public float weight;
12985ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        public boolean vertical;
12995ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        public Rect bounds;
13005ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        public StackBoxInfo[] children;
13015ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        public int stackId;
13025ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        public StackInfo stack;
13035ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner
13045ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        @Override
13055ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        public int describeContents() {
13065ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            return 0;
13075ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        }
13085ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner
13095ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        @Override
13105ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        public void writeToParcel(Parcel dest, int flags) {
13115ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            dest.writeInt(stackBoxId);
13125ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            dest.writeFloat(weight);
13135ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            dest.writeInt(vertical ? 1 : 0);
13145ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            bounds.writeToParcel(dest, flags);
13155ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            dest.writeInt(stackId);
13165ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            if (children != null) {
13175ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner                children[0].writeToParcel(dest, flags);
13185ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner                children[1].writeToParcel(dest, flags);
13195ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            } else {
13205ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner                stack.writeToParcel(dest, flags);
13215ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            }
13225ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        }
13235ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner
13245ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        public void readFromParcel(Parcel source) {
13255ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            stackBoxId = source.readInt();
13265ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            weight = source.readFloat();
13275ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            vertical = source.readInt() == 1;
13285ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            bounds = Rect.CREATOR.createFromParcel(source);
13295ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            stackId = source.readInt();
13305ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            if (stackId == -1) {
13315ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner                children = new StackBoxInfo[2];
13325ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner                children[0] = StackBoxInfo.CREATOR.createFromParcel(source);
13335ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner                children[1] = StackBoxInfo.CREATOR.createFromParcel(source);
13345ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            } else {
13355ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner                stack = StackInfo.CREATOR.createFromParcel(source);
13365ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            }
13375ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        }
13385ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner
13395ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        public static final Creator<StackBoxInfo> CREATOR =
13405ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner                new Creator<ActivityManager.StackBoxInfo>() {
13415ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner
13425ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            @Override
13435ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            public StackBoxInfo createFromParcel(Parcel source) {
13445ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner                return new StackBoxInfo(source);
13455ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            }
13465ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner
13475ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            @Override
13485ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            public StackBoxInfo[] newArray(int size) {
13495ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner                return new StackBoxInfo[size];
13505ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            }
13515ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        };
13525ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner
13535ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        public StackBoxInfo() {
13545ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        }
13555ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner
13565ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        public StackBoxInfo(Parcel source) {
13575ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            readFromParcel(source);
13585ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        }
13595ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner
13605ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        public String toString(String prefix) {
13615ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            StringBuilder sb = new StringBuilder(256);
13625ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            sb.append(prefix); sb.append("Box id=" + stackBoxId); sb.append(" weight=" + weight);
13635ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            sb.append(" vertical=" + vertical); sb.append(" bounds=" + bounds.toShortString());
13645ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            sb.append("\n");
13655ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            if (children != null) {
13665ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner                sb.append(prefix); sb.append("First child=\n");
13675ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner                sb.append(children[0].toString(prefix + "  "));
13685ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner                sb.append(prefix); sb.append("Second child=\n");
13695ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner                sb.append(children[1].toString(prefix + "  "));
13705ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            } else {
13715ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner                sb.append(prefix); sb.append("Stack=\n");
13725ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner                sb.append(stack.toString(prefix + "  "));
13735ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            }
13745ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            return sb.toString();
13755ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        }
13765ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner
13775ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        @Override
13785ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        public String toString() {
13795ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            return toString("");
13805ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        }
13815ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner    }
1382967212cb542e6eeb308678367b53381bff984c31Craig Mautner
1383967212cb542e6eeb308678367b53381bff984c31Craig Mautner    /**
1384967212cb542e6eeb308678367b53381bff984c31Craig Mautner     * Information you can retrieve about an ActivityStack in the system.
1385967212cb542e6eeb308678367b53381bff984c31Craig Mautner     * @hide
1386967212cb542e6eeb308678367b53381bff984c31Craig Mautner     */
1387967212cb542e6eeb308678367b53381bff984c31Craig Mautner    public static class StackInfo implements Parcelable {
1388967212cb542e6eeb308678367b53381bff984c31Craig Mautner        public int stackId;
1389967212cb542e6eeb308678367b53381bff984c31Craig Mautner        public Rect bounds;
1390967212cb542e6eeb308678367b53381bff984c31Craig Mautner        public int[] taskIds;
1391967212cb542e6eeb308678367b53381bff984c31Craig Mautner        public String[] taskNames;
1392967212cb542e6eeb308678367b53381bff984c31Craig Mautner
1393967212cb542e6eeb308678367b53381bff984c31Craig Mautner        @Override
1394967212cb542e6eeb308678367b53381bff984c31Craig Mautner        public int describeContents() {
1395967212cb542e6eeb308678367b53381bff984c31Craig Mautner            return 0;
1396967212cb542e6eeb308678367b53381bff984c31Craig Mautner        }
1397967212cb542e6eeb308678367b53381bff984c31Craig Mautner
1398967212cb542e6eeb308678367b53381bff984c31Craig Mautner        @Override
1399967212cb542e6eeb308678367b53381bff984c31Craig Mautner        public void writeToParcel(Parcel dest, int flags) {
1400967212cb542e6eeb308678367b53381bff984c31Craig Mautner            dest.writeInt(stackId);
1401967212cb542e6eeb308678367b53381bff984c31Craig Mautner            dest.writeInt(bounds.left);
1402967212cb542e6eeb308678367b53381bff984c31Craig Mautner            dest.writeInt(bounds.top);
1403967212cb542e6eeb308678367b53381bff984c31Craig Mautner            dest.writeInt(bounds.right);
1404967212cb542e6eeb308678367b53381bff984c31Craig Mautner            dest.writeInt(bounds.bottom);
1405967212cb542e6eeb308678367b53381bff984c31Craig Mautner            dest.writeIntArray(taskIds);
1406967212cb542e6eeb308678367b53381bff984c31Craig Mautner            dest.writeStringArray(taskNames);
1407967212cb542e6eeb308678367b53381bff984c31Craig Mautner        }
1408967212cb542e6eeb308678367b53381bff984c31Craig Mautner
1409967212cb542e6eeb308678367b53381bff984c31Craig Mautner        public void readFromParcel(Parcel source) {
1410967212cb542e6eeb308678367b53381bff984c31Craig Mautner            stackId = source.readInt();
1411967212cb542e6eeb308678367b53381bff984c31Craig Mautner            bounds = new Rect(
1412967212cb542e6eeb308678367b53381bff984c31Craig Mautner                    source.readInt(), source.readInt(), source.readInt(), source.readInt());
1413967212cb542e6eeb308678367b53381bff984c31Craig Mautner            taskIds = source.createIntArray();
1414967212cb542e6eeb308678367b53381bff984c31Craig Mautner            taskNames = source.createStringArray();
1415967212cb542e6eeb308678367b53381bff984c31Craig Mautner        }
1416967212cb542e6eeb308678367b53381bff984c31Craig Mautner
1417967212cb542e6eeb308678367b53381bff984c31Craig Mautner        public static final Creator<StackInfo> CREATOR = new Creator<StackInfo>() {
1418967212cb542e6eeb308678367b53381bff984c31Craig Mautner            @Override
1419967212cb542e6eeb308678367b53381bff984c31Craig Mautner            public StackInfo createFromParcel(Parcel source) {
1420967212cb542e6eeb308678367b53381bff984c31Craig Mautner                return new StackInfo(source);
1421967212cb542e6eeb308678367b53381bff984c31Craig Mautner            }
1422967212cb542e6eeb308678367b53381bff984c31Craig Mautner            @Override
1423967212cb542e6eeb308678367b53381bff984c31Craig Mautner            public StackInfo[] newArray(int size) {
1424967212cb542e6eeb308678367b53381bff984c31Craig Mautner                return new StackInfo[size];
1425967212cb542e6eeb308678367b53381bff984c31Craig Mautner            }
1426967212cb542e6eeb308678367b53381bff984c31Craig Mautner        };
1427967212cb542e6eeb308678367b53381bff984c31Craig Mautner
14285ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        public StackInfo() {
14295ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        }
14305ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner
1431967212cb542e6eeb308678367b53381bff984c31Craig Mautner        private StackInfo(Parcel source) {
1432967212cb542e6eeb308678367b53381bff984c31Craig Mautner            readFromParcel(source);
1433967212cb542e6eeb308678367b53381bff984c31Craig Mautner        }
1434967212cb542e6eeb308678367b53381bff984c31Craig Mautner
14355ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        public String toString(String prefix) {
1436967212cb542e6eeb308678367b53381bff984c31Craig Mautner            StringBuilder sb = new StringBuilder(256);
14375ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            sb.append(prefix); sb.append("Stack id="); sb.append(stackId);
1438967212cb542e6eeb308678367b53381bff984c31Craig Mautner                    sb.append(" bounds="); sb.append(bounds.toShortString()); sb.append("\n");
14395ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            prefix = prefix + "  ";
1440967212cb542e6eeb308678367b53381bff984c31Craig Mautner            for (int i = 0; i < taskIds.length; ++i) {
1441967212cb542e6eeb308678367b53381bff984c31Craig Mautner                sb.append(prefix); sb.append("taskId="); sb.append(taskIds[i]);
1442967212cb542e6eeb308678367b53381bff984c31Craig Mautner                        sb.append(": "); sb.append(taskNames[i]); sb.append("\n");
1443967212cb542e6eeb308678367b53381bff984c31Craig Mautner            }
1444967212cb542e6eeb308678367b53381bff984c31Craig Mautner            return sb.toString();
1445967212cb542e6eeb308678367b53381bff984c31Craig Mautner        }
14465ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner
14475ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        @Override
14485ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        public String toString() {
14495ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner            return toString("");
14505ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        }
1451967212cb542e6eeb308678367b53381bff984c31Craig Mautner    }
1452967212cb542e6eeb308678367b53381bff984c31Craig Mautner
14539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
14549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @hide
14559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
14569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean clearApplicationUserData(String packageName, IPackageDataObserver observer) {
14579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
14589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return ActivityManagerNative.getDefault().clearApplicationUserData(packageName,
14594120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn                    observer, UserHandle.myUserId());
14609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
14619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
14629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
14639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1464a3664247c701d975ebda9da9f0412bc49d3b6faeChristopher Tate
1465a3664247c701d975ebda9da9f0412bc49d3b6faeChristopher Tate    /**
1466a3664247c701d975ebda9da9f0412bc49d3b6faeChristopher Tate     * Permits an application to erase its own data from disk.  This is equivalent to
1467ebc15ef80ff1b4354be99a45d348537f094d6b59Dianne Hackborn     * the user choosing to clear the app's data from within the device settings UI.  It
1468ebc15ef80ff1b4354be99a45d348537f094d6b59Dianne Hackborn     * erases all dynamic data associated with the app -- its private data and data in its
1469ebc15ef80ff1b4354be99a45d348537f094d6b59Dianne Hackborn     * private area on external storage -- but does not remove the installed application
1470ebc15ef80ff1b4354be99a45d348537f094d6b59Dianne Hackborn     * itself, nor any OBB files.
1471a3664247c701d975ebda9da9f0412bc49d3b6faeChristopher Tate     *
1472a3664247c701d975ebda9da9f0412bc49d3b6faeChristopher Tate     * @return {@code true} if the application successfully requested that the application's
1473a3664247c701d975ebda9da9f0412bc49d3b6faeChristopher Tate     *     data be erased; {@code false} otherwise.
1474a3664247c701d975ebda9da9f0412bc49d3b6faeChristopher Tate     */
1475a3664247c701d975ebda9da9f0412bc49d3b6faeChristopher Tate    public boolean clearApplicationUserData() {
1476a3664247c701d975ebda9da9f0412bc49d3b6faeChristopher Tate        return clearApplicationUserData(mContext.getPackageName(), null);
1477a3664247c701d975ebda9da9f0412bc49d3b6faeChristopher Tate    }
1478a3664247c701d975ebda9da9f0412bc49d3b6faeChristopher Tate
14799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
14809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Information you can retrieve about any processes that are in an error condition.
14819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
14829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class ProcessErrorStateInfo implements Parcelable {
14839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
14849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Condition codes
14859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
14869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int NO_ERROR = 0;
14879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int CRASHED = 1;
14889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int NOT_RESPONDING = 2;
14899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
14919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The condition that the process is in.
14929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
14939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int condition;
14949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
14959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
14969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The process name in which the crash or error occurred.
14979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
14989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public String processName;
14999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
15019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The pid of this process; 0 if none
15029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
15039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int pid;
15049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
15069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The kernel user-ID that has been assigned to this process;
15079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * currently this is not a unique ID (multiple applications can have
15089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * the same uid).
15099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
15109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int uid;
15119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
151360d8762413e8daba5f73559786312a9ec5e3b827Dan Egnor         * The activity name associated with the error, if known.  May be null.
15149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
15159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public String tag;
15169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
15189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * A short message describing the error condition.
15199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
15209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public String shortMsg;
15219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
15239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * A long message describing the error condition.
15249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
15259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public String longMsg;
15269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
1528b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor         * The stack trace where the error originated.  May be null.
15299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
1530b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor        public String stackTrace;
1531b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor
1532b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor        /**
1533b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor         * to be deprecated: This value will always be null.
1534b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor         */
1535b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor        public byte[] crashData = null;
15369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public ProcessErrorStateInfo() {
15389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
15399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15405ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        @Override
15419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int describeContents() {
15429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 0;
15439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
15449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15455ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner        @Override
15469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void writeToParcel(Parcel dest, int flags) {
15479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(condition);
15489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeString(processName);
15499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(pid);
15509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(uid);
15519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeString(tag);
15529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeString(shortMsg);
15539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeString(longMsg);
1554b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor            dest.writeString(stackTrace);
15559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
15565ff12101722874f5e7b0cadf06f4c53f4ec4b917Craig Mautner
15579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void readFromParcel(Parcel source) {
15589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            condition = source.readInt();
15599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            processName = source.readString();
15609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            pid = source.readInt();
15619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            uid = source.readInt();
15629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            tag = source.readString();
15639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            shortMsg = source.readString();
15649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            longMsg = source.readString();
1565b7f0367cec1c744aa66ef397b0244e25d507491cDan Egnor            stackTrace = source.readString();
15669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
15679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final Creator<ProcessErrorStateInfo> CREATOR =
15699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                new Creator<ProcessErrorStateInfo>() {
15709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public ProcessErrorStateInfo createFromParcel(Parcel source) {
15719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new ProcessErrorStateInfo(source);
15729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
15739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public ProcessErrorStateInfo[] newArray(int size) {
15749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new ProcessErrorStateInfo[size];
15759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
15769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
15779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private ProcessErrorStateInfo(Parcel source) {
15799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            readFromParcel(source);
15809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
15819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
15829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
15849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns a list of any processes that are currently in an error condition.  The result
15859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will be null if all processes are running properly at this time.
15869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
15879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a list of ProcessErrorStateInfo records, or null if there are no
15889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * current error conditions (it will not return an empty list).  This list ordering is not
15899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * specified.
15909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
15919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public List<ProcessErrorStateInfo> getProcessesInErrorState() {
15929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
15939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return ActivityManagerNative.getDefault().getProcessesInErrorState();
15949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
15959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return null;
15969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
15979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
15989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
15999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
16009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Information you can retrieve about a running process.
16019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
16029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static class RunningAppProcessInfo implements Parcelable {
16039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
16049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The name of the process that this object is associated with
16059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
16069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public String processName;
16079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
16099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The pid of this process; 0 if none
16109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
16119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int pid;
16129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1613eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn        /**
1614eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn         * The user id of this process.
1615eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn         */
1616eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn        public int uid;
1617eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn
1618baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn        /**
1619baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn         * All packages that have been loaded into the process.
1620baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn         */
16219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public String pkgList[];
16229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
1624482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn         * Constant for {@link #flags}: this is an app that is unable to
1625482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn         * correctly save its state when going to the background,
1626482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn         * so it can not be killed while in the background.
1627482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn         * @hide
1628baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn         */
1629482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn        public static final int FLAG_CANT_SAVE_STATE = 1<<0;
1630baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn
1631baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn        /**
1632424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn         * Constant for {@link #flags}: this process is associated with a
1633424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn         * persistent system app.
1634424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn         * @hide
1635424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn         */
1636424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn        public static final int FLAG_PERSISTENT = 1<<1;
1637424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn
1638424991704b5fb7a64f6cf0fcc3f4b1aabbf2a2e0Dianne Hackborn        /**
16390c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn         * Constant for {@link #flags}: this process is associated with a
16400c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn         * persistent system app.
16410c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn         * @hide
16420c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn         */
16430c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn        public static final int FLAG_HAS_ACTIVITIES = 1<<2;
16440c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn
16450c3804950236fe170ebf6cc7a5f1e3e305b8f315Dianne Hackborn        /**
1646baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn         * Flags of information.  May be any of
1647482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn         * {@link #FLAG_CANT_SAVE_STATE}.
1648482566ed5cc7307b0401361509fb06acc5476115Dianne Hackborn         * @hide
1649baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn         */
1650baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn        public int flags;
165127ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn
165227ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn        /**
165327ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn         * Last memory trim level reported to the process: corresponds to
165427ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn         * the values supplied to {@link android.content.ComponentCallbacks2#onTrimMemory(int)
165527ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn         * ComponentCallbacks2.onTrimMemory(int)}.
165627ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn         */
165727ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn        public int lastTrimLevel;
165827ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn
1659baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn        /**
1660a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn         * Constant for {@link #importance}: this is a persistent process.
1661a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn         * Only used when reporting to process observers.
1662a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn         * @hide
1663a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn         */
1664a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn        public static final int IMPORTANCE_PERSISTENT = 50;
1665a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn
1666a93c2c117d502ee57dd27705a0b5efca4bf65011Dianne Hackborn        /**
16679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Constant for {@link #importance}: this process is running the
16689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * foreground UI.
16699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
16709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int IMPORTANCE_FOREGROUND = 100;
16719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
167332907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn         * Constant for {@link #importance}: this process is running something
167432907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn         * that is actively visible to the user, though not in the immediate
167532907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn         * foreground.
1676860755faa6bdd3c2aeae49c05b87b5bc080ae60cDianne Hackborn         */
167732907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn        public static final int IMPORTANCE_VISIBLE = 200;
1678860755faa6bdd3c2aeae49c05b87b5bc080ae60cDianne Hackborn
1679860755faa6bdd3c2aeae49c05b87b5bc080ae60cDianne Hackborn        /**
16809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Constant for {@link #importance}: this process is running something
168132907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn         * that is considered to be actively perceptible to the user.  An
168232907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn         * example would be an application performing background music playback.
16839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
168432907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn        public static final int IMPORTANCE_PERCEPTIBLE = 130;
168532907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn
168632907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn        /**
16875383f502e4479d117c89666fb2ee1ca53f3d27cfDianne Hackborn         * Constant for {@link #importance}: this process is running an
16885383f502e4479d117c89666fb2ee1ca53f3d27cfDianne Hackborn         * application that can not save its state, and thus can't be killed
16895383f502e4479d117c89666fb2ee1ca53f3d27cfDianne Hackborn         * while in the background.
16905383f502e4479d117c89666fb2ee1ca53f3d27cfDianne Hackborn         * @hide
169132907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn         */
16925383f502e4479d117c89666fb2ee1ca53f3d27cfDianne Hackborn        public static final int IMPORTANCE_CANT_SAVE_STATE = 170;
16939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
16949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
16959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Constant for {@link #importance}: this process is contains services
16969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * that should remain running.
16979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
16989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int IMPORTANCE_SERVICE = 300;
16999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
17019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Constant for {@link #importance}: this process process contains
17029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * background code that is expendable.
17039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
17049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int IMPORTANCE_BACKGROUND = 400;
17059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
17079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * Constant for {@link #importance}: this process is empty of any
17089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * actively running code.
17099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
17109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final int IMPORTANCE_EMPTY = 500;
17119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
17139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * The relative importance level that the system places on this
17149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * process.  May be one of {@link #IMPORTANCE_FOREGROUND},
17159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * {@link #IMPORTANCE_VISIBLE}, {@link #IMPORTANCE_SERVICE},
17169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * {@link #IMPORTANCE_BACKGROUND}, or {@link #IMPORTANCE_EMPTY}.  These
17179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * constants are numbered so that "more important" values are always
17189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * smaller than "less important" values.
17199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
17209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int importance;
17219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        /**
17239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * An additional ordering within a particular {@link #importance}
17249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * category, providing finer-grained information about the relative
17259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * utility of processes within a category.  This number means nothing
17269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * except that a smaller values are more recently used (and thus
17279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * more important).  Currently an LRU value is only maintained for
17289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * the {@link #IMPORTANCE_BACKGROUND} category, though others may
17299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         * be maintained in the future.
17309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project         */
17319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int lru;
173227ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn
1733dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        /**
1734dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * Constant for {@link #importanceReasonCode}: nothing special has
1735dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * been specified for the reason for this level.
1736dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         */
1737dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        public static final int REASON_UNKNOWN = 0;
1738dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
1739dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        /**
1740dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * Constant for {@link #importanceReasonCode}: one of the application's
1741dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * content providers is being used by another process.  The pid of
1742dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * the client process is in {@link #importanceReasonPid} and the
1743dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * target provider in this process is in
1744dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * {@link #importanceReasonComponent}.
1745dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         */
1746dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        public static final int REASON_PROVIDER_IN_USE = 1;
1747dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
1748dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        /**
1749dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * Constant for {@link #importanceReasonCode}: one of the application's
1750dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * content providers is being used by another process.  The pid of
1751dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * the client process is in {@link #importanceReasonPid} and the
1752dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * target provider in this process is in
1753dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * {@link #importanceReasonComponent}.
1754dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         */
1755dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        public static final int REASON_SERVICE_IN_USE = 2;
1756dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
1757dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        /**
1758dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * The reason for {@link #importance}, if any.
1759dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         */
1760dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        public int importanceReasonCode;
1761dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
1762dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        /**
1763dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * For the specified values of {@link #importanceReasonCode}, this
1764dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * is the process ID of the other process that is a client of this
1765dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * process.  This will be 0 if no other process is using this one.
1766dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         */
1767dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        public int importanceReasonPid;
1768dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
1769dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        /**
1770dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * For the specified values of {@link #importanceReasonCode}, this
1771dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         * is the name of the component that is being used in this process.
1772dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn         */
1773dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn        public ComponentName importanceReasonComponent;
1774dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn
1775905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn        /**
1776cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn         * When {@link #importanceReasonPid} is non-0, this is the importance
1777905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn         * of the other pid. @hide
1778905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn         */
1779905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn        public int importanceReasonImportance;
1780905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn
17819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public RunningAppProcessInfo() {
17829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            importance = IMPORTANCE_FOREGROUND;
1783dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            importanceReasonCode = REASON_UNKNOWN;
17849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
17859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public RunningAppProcessInfo(String pProcessName, int pPid, String pArr[]) {
17879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            processName = pProcessName;
17889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            pid = pPid;
17899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            pkgList = pArr;
17909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
17919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public int describeContents() {
17939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return 0;
17949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
17959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
17969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void writeToParcel(Parcel dest, int flags) {
17979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeString(processName);
17989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(pid);
1799eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn            dest.writeInt(uid);
18009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeStringArray(pkgList);
1801baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn            dest.writeInt(this.flags);
180227ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn            dest.writeInt(lastTrimLevel);
18039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(importance);
18049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            dest.writeInt(lru);
1805dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            dest.writeInt(importanceReasonCode);
1806dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            dest.writeInt(importanceReasonPid);
1807dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            ComponentName.writeToParcel(importanceReasonComponent, dest);
1808905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn            dest.writeInt(importanceReasonImportance);
18099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
18109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public void readFromParcel(Parcel source) {
18129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            processName = source.readString();
18139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            pid = source.readInt();
1814eb034652c2037a47ebfd99779e8383bb8bb528afDianne Hackborn            uid = source.readInt();
18159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            pkgList = source.readStringArray();
1816baf42c625c3ef4cb7b732956a97953efd93b23bcDianne Hackborn            flags = source.readInt();
181727ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn            lastTrimLevel = source.readInt();
18189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            importance = source.readInt();
18199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            lru = source.readInt();
1820dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            importanceReasonCode = source.readInt();
1821dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            importanceReasonPid = source.readInt();
1822dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn            importanceReasonComponent = ComponentName.readFromParcel(source);
1823905577f6345c014fc2489a8068ea967ba8c18012Dianne Hackborn            importanceReasonImportance = source.readInt();
18249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
18259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public static final Creator<RunningAppProcessInfo> CREATOR =
18279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            new Creator<RunningAppProcessInfo>() {
18289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public RunningAppProcessInfo createFromParcel(Parcel source) {
18299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new RunningAppProcessInfo(source);
18309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
18319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public RunningAppProcessInfo[] newArray(int size) {
18329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new RunningAppProcessInfo[size];
18339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
18349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
18359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        private RunningAppProcessInfo(Parcel source) {
18379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            readFromParcel(source);
18389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
18399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
18409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
18419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1842f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu     * Returns a list of application processes installed on external media
1843f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu     * that are running on the device.
1844f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu     *
1845c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * <p><b>Note: this method is only intended for debugging or building
1846c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * a user-facing process management UI.</b></p>
1847c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     *
1848f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu     * @return Returns a list of ApplicationInfo records, or null if none
1849f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu     * This list ordering is not specified.
1850f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu     * @hide
1851f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu     */
1852f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu    public List<ApplicationInfo> getRunningExternalApplications() {
1853f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu        try {
1854f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu            return ActivityManagerNative.getDefault().getRunningExternalApplications();
1855f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu        } catch (RemoteException e) {
1856f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu            return null;
1857f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu        }
1858f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu    }
1859f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu
1860f7f5dda5e54da53b98f1504672a422a484496531Suchi Amalapurapu    /**
18619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns a list of application processes that are running on the device.
1862c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     *
1863c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * <p><b>Note: this method is only intended for debugging or building
1864c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * a user-facing process management UI.</b></p>
1865c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     *
18669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Returns a list of RunningAppProcessInfo records, or null if there are no
18679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * running processes (it will not return an empty list).  This list ordering is not
18689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * specified.
18699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
18709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public List<RunningAppProcessInfo> getRunningAppProcesses() {
18719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
18729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return ActivityManagerNative.getDefault().getRunningAppProcesses();
18739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
18749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return null;
18759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
18769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
187727ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn
187827ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn    /**
187927ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn     * Return global memory state information for the calling process.  This
188027ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn     * does not fill in all fields of the {@link RunningAppProcessInfo}.  The
188127ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn     * only fields that will be filled in are
188227ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn     * {@link RunningAppProcessInfo#pid},
188327ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn     * {@link RunningAppProcessInfo#uid},
188427ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn     * {@link RunningAppProcessInfo#lastTrimLevel},
188527ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn     * {@link RunningAppProcessInfo#importance},
188627ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn     * {@link RunningAppProcessInfo#lru}, and
188727ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn     * {@link RunningAppProcessInfo#importanceReasonCode}.
188827ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn     */
188927ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn    static public void getMyMemoryState(RunningAppProcessInfo outState) {
189027ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn        try {
189127ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn            ActivityManagerNative.getDefault().getMyMemoryState(outState);
189227ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn        } catch (RemoteException e) {
189327ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn        }
189427ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn    }
189527ff913d56de8400083a13fc572e2812b32c890cDianne Hackborn
18969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
18974f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn     * Return information about the memory usage of one or more processes.
1898c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     *
1899c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * <p><b>Note: this method is only intended for debugging or building
1900c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     * a user-facing process management UI.</b></p>
1901c5bf7584422adca286c1f27a073df925c06f068dDianne Hackborn     *
19024f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn     * @param pids The pids of the processes whose memory usage is to be
19034f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn     * retrieved.
19044f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn     * @return Returns an array of memory information, one for each
19054f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn     * requested pid.
19064f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn     */
19074f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn    public Debug.MemoryInfo[] getProcessMemoryInfo(int[] pids) {
19084f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn        try {
19094f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn            return ActivityManagerNative.getDefault().getProcessMemoryInfo(pids);
19104f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn        } catch (RemoteException e) {
19114f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn            return null;
19124f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn        }
19134f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn    }
19144f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn
19154f21c4cf077cfee5b35a56703618115614bc40f2Dianne Hackborn    /**
191603abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * @deprecated This is now just a wrapper for
191703abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * {@link #killBackgroundProcesses(String)}; the previous behavior here
191803abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * is no longer available to applications because it allows them to
191903abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * break other applications by removing their alarms, stopping their
192003abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * services, etc.
192103abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     */
192203abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn    @Deprecated
192303abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn    public void restartPackage(String packageName) {
192403abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn        killBackgroundProcesses(packageName);
192503abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn    }
192603abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn
192703abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn    /**
192803abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * Have the system immediately kill all background processes associated
192903abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * with the given package.  This is the same as the kernel killing those
193003abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * processes to reclaim memory; the system will take care of restarting
193103abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * these processes in the future as needed.
193203abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     *
193303abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * <p>You must hold the permission
193403abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * {@link android.Manifest.permission#KILL_BACKGROUND_PROCESSES} to be able to
193503abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * call this method.
193603abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     *
193703abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * @param packageName The name of the package whose processes are to
193803abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * be killed.
193903abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     */
194003abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn    public void killBackgroundProcesses(String packageName) {
194103abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn        try {
19421676c856d61b97c871dc2be0cb1f1fb1e12e24e9Dianne Hackborn            ActivityManagerNative.getDefault().killBackgroundProcesses(packageName,
19431676c856d61b97c871dc2be0cb1f1fb1e12e24e9Dianne Hackborn                    UserHandle.myUserId());
194403abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn        } catch (RemoteException e) {
194503abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn        }
194603abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn    }
194703abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn
194803abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn    /**
19499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Have the system perform a force stop of everything associated with
19509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the given application package.  All processes that share its uid
19519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * will be killed, all services it has running stopped, all activities
19529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * removed, etc.  In addition, a {@link Intent#ACTION_PACKAGE_RESTARTED}
19539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * broadcast will be sent, so that any of its registered alarms can
19549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * be stopped, notifications removed, etc.
19559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * <p>You must hold the permission
195703abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * {@link android.Manifest.permission#FORCE_STOP_PACKAGES} to be able to
19589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * call this method.
19599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
19609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param packageName The name of the package to be stopped.
196103abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     *
196203abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * @hide This is not available to third party applications due to
196303abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * it allowing them to break other applications by stopping their
196403abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn     * services, removing their alarms, etc.
19659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
196603abb8179f0d912e6dabfc0e2b0f129d85066d17Dianne Hackborn    public void forceStopPackage(String packageName) {
19679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
19681676c856d61b97c871dc2be0cb1f1fb1e12e24e9Dianne Hackborn            ActivityManagerNative.getDefault().forceStopPackage(packageName,
19691676c856d61b97c871dc2be0cb1f1fb1e12e24e9Dianne Hackborn                    UserHandle.myUserId());
19709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
19719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
19729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
19739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
19759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Get the device configuration attributes.
19769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
19779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ConfigurationInfo getDeviceConfigurationInfo() {
19789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
19799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return ActivityManagerNative.getDefault().getDeviceConfigurationInfo();
19809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (RemoteException e) {
19819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
19829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return null;
19839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
19845ef44b7566566db08b62245cbb9002b548071603Kenny Root
19855ef44b7566566db08b62245cbb9002b548071603Kenny Root    /**
19865ef44b7566566db08b62245cbb9002b548071603Kenny Root     * Get the preferred density of icons for the launcher. This is used when
19875ef44b7566566db08b62245cbb9002b548071603Kenny Root     * custom drawables are created (e.g., for shortcuts).
19885ef44b7566566db08b62245cbb9002b548071603Kenny Root     *
19895ef44b7566566db08b62245cbb9002b548071603Kenny Root     * @return density in terms of DPI
19905ef44b7566566db08b62245cbb9002b548071603Kenny Root     */
19915ef44b7566566db08b62245cbb9002b548071603Kenny Root    public int getLauncherLargeIconDensity() {
19925ef44b7566566db08b62245cbb9002b548071603Kenny Root        final Resources res = mContext.getResources();
19935ef44b7566566db08b62245cbb9002b548071603Kenny Root        final int density = res.getDisplayMetrics().densityDpi;
1994d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn        final int sw = res.getConfiguration().smallestScreenWidthDp;
19955ef44b7566566db08b62245cbb9002b548071603Kenny Root
1996d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn        if (sw < 600) {
1997d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn            // Smaller than approx 7" tablets, use the regular icon size.
19985ef44b7566566db08b62245cbb9002b548071603Kenny Root            return density;
19995ef44b7566566db08b62245cbb9002b548071603Kenny Root        }
20005ef44b7566566db08b62245cbb9002b548071603Kenny Root
20015ef44b7566566db08b62245cbb9002b548071603Kenny Root        switch (density) {
20025ef44b7566566db08b62245cbb9002b548071603Kenny Root            case DisplayMetrics.DENSITY_LOW:
20035ef44b7566566db08b62245cbb9002b548071603Kenny Root                return DisplayMetrics.DENSITY_MEDIUM;
20045ef44b7566566db08b62245cbb9002b548071603Kenny Root            case DisplayMetrics.DENSITY_MEDIUM:
20055ef44b7566566db08b62245cbb9002b548071603Kenny Root                return DisplayMetrics.DENSITY_HIGH;
2006d0356a19c1630e598a096477ce5cb5d2942a9405Dianne Hackborn            case DisplayMetrics.DENSITY_TV:
2007d0356a19c1630e598a096477ce5cb5d2942a9405Dianne Hackborn                return DisplayMetrics.DENSITY_XHIGH;
20085ef44b7566566db08b62245cbb9002b548071603Kenny Root            case DisplayMetrics.DENSITY_HIGH:
20095ef44b7566566db08b62245cbb9002b548071603Kenny Root                return DisplayMetrics.DENSITY_XHIGH;
20105ef44b7566566db08b62245cbb9002b548071603Kenny Root            case DisplayMetrics.DENSITY_XHIGH:
2011d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn                return DisplayMetrics.DENSITY_XXHIGH;
2012d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn            case DisplayMetrics.DENSITY_XXHIGH:
2013d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn                return DisplayMetrics.DENSITY_XHIGH * 2;
20145ef44b7566566db08b62245cbb9002b548071603Kenny Root            default:
2015d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn                // The density is some abnormal value.  Return some other
2016d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn                // abnormal value that is a reasonable scaling of it.
2017d0356a19c1630e598a096477ce5cb5d2942a9405Dianne Hackborn                return (int)((density*1.5f)+.5f);
20185ef44b7566566db08b62245cbb9002b548071603Kenny Root        }
20195ef44b7566566db08b62245cbb9002b548071603Kenny Root    }
20205ef44b7566566db08b62245cbb9002b548071603Kenny Root
20215ef44b7566566db08b62245cbb9002b548071603Kenny Root    /**
20225ef44b7566566db08b62245cbb9002b548071603Kenny Root     * Get the preferred launcher icon size. This is used when custom drawables
20235ef44b7566566db08b62245cbb9002b548071603Kenny Root     * are created (e.g., for shortcuts).
20245ef44b7566566db08b62245cbb9002b548071603Kenny Root     *
20255ef44b7566566db08b62245cbb9002b548071603Kenny Root     * @return dimensions of square icons in terms of pixels
20265ef44b7566566db08b62245cbb9002b548071603Kenny Root     */
20275ef44b7566566db08b62245cbb9002b548071603Kenny Root    public int getLauncherLargeIconSize() {
20285ef44b7566566db08b62245cbb9002b548071603Kenny Root        final Resources res = mContext.getResources();
20295ef44b7566566db08b62245cbb9002b548071603Kenny Root        final int size = res.getDimensionPixelSize(android.R.dimen.app_icon_size);
2030d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn        final int sw = res.getConfiguration().smallestScreenWidthDp;
20315ef44b7566566db08b62245cbb9002b548071603Kenny Root
2032d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn        if (sw < 600) {
2033d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn            // Smaller than approx 7" tablets, use the regular icon size.
20345ef44b7566566db08b62245cbb9002b548071603Kenny Root            return size;
20355ef44b7566566db08b62245cbb9002b548071603Kenny Root        }
20365ef44b7566566db08b62245cbb9002b548071603Kenny Root
20375ef44b7566566db08b62245cbb9002b548071603Kenny Root        final int density = res.getDisplayMetrics().densityDpi;
20385ef44b7566566db08b62245cbb9002b548071603Kenny Root
20395ef44b7566566db08b62245cbb9002b548071603Kenny Root        switch (density) {
20405ef44b7566566db08b62245cbb9002b548071603Kenny Root            case DisplayMetrics.DENSITY_LOW:
20415ef44b7566566db08b62245cbb9002b548071603Kenny Root                return (size * DisplayMetrics.DENSITY_MEDIUM) / DisplayMetrics.DENSITY_LOW;
20425ef44b7566566db08b62245cbb9002b548071603Kenny Root            case DisplayMetrics.DENSITY_MEDIUM:
20435ef44b7566566db08b62245cbb9002b548071603Kenny Root                return (size * DisplayMetrics.DENSITY_HIGH) / DisplayMetrics.DENSITY_MEDIUM;
2044d0356a19c1630e598a096477ce5cb5d2942a9405Dianne Hackborn            case DisplayMetrics.DENSITY_TV:
2045d0356a19c1630e598a096477ce5cb5d2942a9405Dianne Hackborn                return (size * DisplayMetrics.DENSITY_XHIGH) / DisplayMetrics.DENSITY_HIGH;
20465ef44b7566566db08b62245cbb9002b548071603Kenny Root            case DisplayMetrics.DENSITY_HIGH:
20475ef44b7566566db08b62245cbb9002b548071603Kenny Root                return (size * DisplayMetrics.DENSITY_XHIGH) / DisplayMetrics.DENSITY_HIGH;
20485ef44b7566566db08b62245cbb9002b548071603Kenny Root            case DisplayMetrics.DENSITY_XHIGH:
2049d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn                return (size * DisplayMetrics.DENSITY_XXHIGH) / DisplayMetrics.DENSITY_XHIGH;
2050d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn            case DisplayMetrics.DENSITY_XXHIGH:
2051d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn                return (size * DisplayMetrics.DENSITY_XHIGH*2) / DisplayMetrics.DENSITY_XXHIGH;
20525ef44b7566566db08b62245cbb9002b548071603Kenny Root            default:
2053d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn                // The density is some abnormal value.  Return some other
2054d96e3dfa02b203b1fc826e80d6f9aa074ba9c250Dianne Hackborn                // abnormal value that is a reasonable scaling of it.
2055d0356a19c1630e598a096477ce5cb5d2942a9405Dianne Hackborn                return (int)((size*1.5f) + .5f);
20565ef44b7566566db08b62245cbb9002b548071603Kenny Root        }
20575ef44b7566566db08b62245cbb9002b548071603Kenny Root    }
20585ef44b7566566db08b62245cbb9002b548071603Kenny Root
20599327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn    /**
20609327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn     * Returns "true" if the user interface is currently being messed with
20619327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn     * by a monkey.
20629327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn     */
20639327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn    public static boolean isUserAMonkey() {
20649327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn        try {
20659327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn            return ActivityManagerNative.getDefault().isUserAMonkey();
20669327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn        } catch (RemoteException e) {
20679327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn        }
20689327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn        return false;
20699327f4f671de3cbb795612bf4f314ceff88de865Dianne Hackborn    }
20703b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot
20713b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot    /**
20723b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot     * Returns "true" if device is running in a test harness.
20733b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot     */
20743b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot    public static boolean isRunningInTestHarness() {
20753b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot        return SystemProperties.getBoolean("ro.test_harness", false);
20763b4fcbc9f13bab6a2e9e5c37cc5e18fec7341c04Brett Chabot    }
20778d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay
20788d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay    /**
20798d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay     * Returns the launch count of each installed package.
20808d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay     *
20818d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay     * @hide
20828d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay     */
20838d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay    public Map<String, Integer> getAllPackageLaunchCounts() {
20848d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay        try {
20858d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay            IUsageStats usageStatsService = IUsageStats.Stub.asInterface(
20868d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay                    ServiceManager.getService("usagestats"));
20878d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay            if (usageStatsService == null) {
20888d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay                return new HashMap<String, Integer>();
20898d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay            }
20908d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay
2091bfcda39cadd897cc89f77b40909a84fa8f56aacePeter Visontay            PkgUsageStats[] allPkgUsageStats = usageStatsService.getAllPkgUsageStats();
2092bfcda39cadd897cc89f77b40909a84fa8f56aacePeter Visontay            if (allPkgUsageStats == null) {
2093bfcda39cadd897cc89f77b40909a84fa8f56aacePeter Visontay                return new HashMap<String, Integer>();
2094bfcda39cadd897cc89f77b40909a84fa8f56aacePeter Visontay            }
2095bfcda39cadd897cc89f77b40909a84fa8f56aacePeter Visontay
20968d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay            Map<String, Integer> launchCounts = new HashMap<String, Integer>();
2097bfcda39cadd897cc89f77b40909a84fa8f56aacePeter Visontay            for (PkgUsageStats pkgUsageStats : allPkgUsageStats) {
20988d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay                launchCounts.put(pkgUsageStats.packageName, pkgUsageStats.launchCount);
20998d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay            }
21008d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay
21018d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay            return launchCounts;
21028d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay        } catch (RemoteException e) {
21038d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay            Log.w(TAG, "Could not query launch counts", e);
21048d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay            return new HashMap<String, Integer>();
21058d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay        }
21068d224caf989b212f8e633cc1a8b0db453300a742Peter Visontay    }
21074b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani
21085320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn    /** @hide */
21095320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn    public static int checkComponentPermission(String permission, int uid,
21105320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn            int owningUid, boolean exported) {
21115320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        // Root, system server get to do everything.
21125320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        if (uid == 0 || uid == Process.SYSTEM_UID) {
21135320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn            return PackageManager.PERMISSION_GRANTED;
21145320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        }
21155320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        // Isolated processes don't get any permissions.
2116f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn        if (UserHandle.isIsolated(uid)) {
21175320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn            return PackageManager.PERMISSION_DENIED;
21185320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        }
21195320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        // If there is a uid that owns whatever is being accessed, it has
21205320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        // blanket access to it regardless of the permissions it requires.
2121f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn        if (owningUid >= 0 && UserHandle.isSameApp(uid, owningUid)) {
21225320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn            return PackageManager.PERMISSION_GRANTED;
21235320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        }
21245320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        // If the target is not exported, then nobody else can get to it.
21255320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        if (!exported) {
2126be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn            /*
2127be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn            RuntimeException here = new RuntimeException("here");
2128be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn            here.fillInStackTrace();
2129be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn            Slog.w(TAG, "Permission denied: checkComponentPermission() owningUid=" + owningUid,
2130be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn                    here);
2131be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn            */
21325320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn            return PackageManager.PERMISSION_DENIED;
21335320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        }
21345320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        if (permission == null) {
21355320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn            return PackageManager.PERMISSION_GRANTED;
21365320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        }
21375320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        try {
21385320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn            return AppGlobals.getPackageManager()
21395320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn                    .checkUidPermission(permission, uid);
21405320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        } catch (RemoteException e) {
21415320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn            // Should never happen, but if it does... deny!
21427d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn            Slog.e(TAG, "PackageManager is dead?!?", e);
21437d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn        }
21447d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn        return PackageManager.PERMISSION_DENIED;
21457d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn    }
21467d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn
21477d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn    /** @hide */
21487d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn    public static int checkUidPermission(String permission, int uid) {
21497d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn        try {
21507d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn            return AppGlobals.getPackageManager()
21517d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn                    .checkUidPermission(permission, uid);
21527d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn        } catch (RemoteException e) {
21537d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn            // Should never happen, but if it does... deny!
21545320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn            Slog.e(TAG, "PackageManager is dead?!?", e);
21555320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        }
21565320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn        return PackageManager.PERMISSION_DENIED;
21575320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn    }
21585320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn
2159d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn    /**
2160d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn     * @hide
2161d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn     * Helper for dealing with incoming user arguments to system service calls.
2162d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn     * Takes care of checking permissions and converting USER_CURRENT to the
2163d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn     * actual current user.
2164d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn     *
2165d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn     * @param callingPid The pid of the incoming call, as per Binder.getCallingPid().
2166d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn     * @param callingUid The uid of the incoming call, as per Binder.getCallingUid().
2167d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn     * @param userId The user id argument supplied by the caller -- this is the user
2168d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn     * they want to run as.
2169d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn     * @param allowAll If true, we will allow USER_ALL.  This means you must be prepared
2170d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn     * to get a USER_ALL returned and deal with it correctly.  If false,
2171d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn     * an exception will be thrown if USER_ALL is supplied.
2172d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn     * @param requireFull If true, the caller must hold
2173d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn     * {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} to be able to run as a
2174d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn     * different user than their current process; otherwise they must hold
2175d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn     * {@link android.Manifest.permission#INTERACT_ACROSS_USERS}.
2176d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn     * @param name Optional textual name of the incoming call; only for generating error messages.
2177d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn     * @param callerPackage Optional package name of caller; only for error messages.
2178d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn     *
2179d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn     * @return Returns the user ID that the call should run as.  Will always be a concrete
2180d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn     * user number, unless <var>allowAll</var> is true in which case it could also be
2181d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn     * USER_ALL.
2182d7d28e675ea7aac151c0c302d233b476537af946Dianne Hackborn     */
21834120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn    public static int handleIncomingUser(int callingPid, int callingUid, int userId,
21844120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn            boolean allowAll, boolean requireFull, String name, String callerPackage) {
21854120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn        if (UserHandle.getUserId(callingUid) == userId) {
21864120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn            return userId;
21874120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn        }
21884120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn        try {
21894120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn            return ActivityManagerNative.getDefault().handleIncomingUser(callingPid,
21904120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn                    callingUid, userId, allowAll, requireFull, name, callerPackage);
21914120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn        } catch (RemoteException e) {
21924120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn            throw new SecurityException("Failed calling activity manager", e);
21934120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn        }
21944120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn    }
21954120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn
21964120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn    /** @hide */
21974120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn    public static int getCurrentUser() {
21984120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn        UserInfo ui;
21994120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn        try {
22004120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn            ui = ActivityManagerNative.getDefault().getCurrentUser();
22014120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn            return ui != null ? ui.id : 0;
22024120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn        } catch (RemoteException e) {
22034120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn            return 0;
22044120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn        }
22054120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn    }
22064120375d46091df8527bb701882e056fbb0e6b06Dianne Hackborn
22074b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    /**
22089fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy     * Returns the usage statistics of each installed package.
22099fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy     *
22109fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy     * @hide
22119fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy     */
22129fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy    public PkgUsageStats[] getAllPackageUsageStats() {
22139fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy        try {
22149fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy            IUsageStats usageStatsService = IUsageStats.Stub.asInterface(
22159fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy                    ServiceManager.getService("usagestats"));
22169fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy            if (usageStatsService != null) {
22179fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy                return usageStatsService.getAllPkgUsageStats();
22189fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy            }
22199fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy        } catch (RemoteException e) {
22209fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy            Log.w(TAG, "Could not query usage stats", e);
22219fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy        }
22229fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy        return new PkgUsageStats[0];
22239fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy    }
22249fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy
22259fc033083267d0c7f01e083400721b6cddb3a398Mark Brophy    /**
22264b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani     * @param userid the user's id. Zero indicates the default user
22274b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani     * @hide
22284b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani     */
22294b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    public boolean switchUser(int userid) {
22304b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani        try {
22314b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani            return ActivityManagerNative.getDefault().switchUser(userid);
22324b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani        } catch (RemoteException e) {
22334b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani            return false;
22344b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani        }
22354b2e934928a2eb65927bd39197198c28c49efb94Amith Yamasani    }
22365e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn
22375e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn    /**
22385e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn     * Return whether the given user is actively running.  This means that
22395e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn     * the user is in the "started" state, not "stopped" -- it is currently
22405e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn     * allowed to run code through scheduled alarms, receiving broadcasts,
22415e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn     * etc.  A started user may be either the current foreground user or a
22425e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn     * background user; the result here does not distinguish between the two.
22435e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn     * @param userid the user's id. Zero indicates the default user.
22445e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn     * @hide
22455e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn     */
22465e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn    public boolean isUserRunning(int userid) {
22475e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn        try {
2248a8a9bd65bf5865d83ef44f54552ca39522bfbcf0Dianne Hackborn            return ActivityManagerNative.getDefault().isUserRunning(userid, false);
22495e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn        } catch (RemoteException e) {
22505e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn            return false;
22515e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn        }
22525e03e2ca7d25b899b129baad2dd5eca6bf99d88aDianne Hackborn    }
2253cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn
2254cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn    /**
2255cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn     * Perform a system dump of various state associated with the given application
2256cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn     * package name.  This call blocks while the dump is being performed, so should
2257cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn     * not be done on a UI thread.  The data will be written to the given file
2258cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn     * descriptor as text.  An application must hold the
2259cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn     * {@link android.Manifest.permission#DUMP} permission to make this call.
2260ebc15ef80ff1b4354be99a45d348537f094d6b59Dianne Hackborn     * @param fd The file descriptor that the dump should be written to.  The file
2261ebc15ef80ff1b4354be99a45d348537f094d6b59Dianne Hackborn     * descriptor is <em>not</em> closed by this function; the caller continues to
2262ebc15ef80ff1b4354be99a45d348537f094d6b59Dianne Hackborn     * own it.
2263cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn     * @param packageName The name of the package that is to be dumped.
2264cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn     */
2265cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn    public void dumpPackageState(FileDescriptor fd, String packageName) {
2266cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn        dumpPackageStateStatic(fd, packageName);
2267cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn    }
2268cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn
2269cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn    /**
2270cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn     * @hide
2271cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn     */
2272cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn    public static void dumpPackageStateStatic(FileDescriptor fd, String packageName) {
2273cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn        FileOutputStream fout = new FileOutputStream(fd);
22748c84109b9fbbf473b225707a38261ff5f99d95fbDianne Hackborn        PrintWriter pw = new FastPrintWriter(fout);
2275daa0d5c9296515fe05cae65926a66dee609f382aDianne Hackborn        dumpService(pw, fd, Context.ACTIVITY_SERVICE, new String[] {
2276daa0d5c9296515fe05cae65926a66dee609f382aDianne Hackborn                "-a", "package", packageName });
2277cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn        pw.println();
2278daa0d5c9296515fe05cae65926a66dee609f382aDianne Hackborn        dumpService(pw, fd, "meminfo", new String[] { "--local", packageName });
2279daa0d5c9296515fe05cae65926a66dee609f382aDianne Hackborn        pw.println();
2280daa0d5c9296515fe05cae65926a66dee609f382aDianne Hackborn        dumpService(pw, fd, ProcessStats.SERVICE_NAME, new String[] { "-a", packageName });
2281904a857d5a319e32d1df065b38e3191324b35b0fDianne Hackborn        pw.println();
2282904a857d5a319e32d1df065b38e3191324b35b0fDianne Hackborn        dumpService(pw, fd, "usagestats", new String[] { "--packages", packageName });
2283cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn        pw.println();
22848c84109b9fbbf473b225707a38261ff5f99d95fbDianne Hackborn        dumpService(pw, fd, "package", new String[] { packageName });
22858c84109b9fbbf473b225707a38261ff5f99d95fbDianne Hackborn        pw.println();
22868c84109b9fbbf473b225707a38261ff5f99d95fbDianne Hackborn        dumpService(pw, fd, BatteryStats.SERVICE_NAME, new String[] { packageName });
2287cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn        pw.flush();
2288cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn    }
2289cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn
2290cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn    private static void dumpService(PrintWriter pw, FileDescriptor fd, String name, String[] args) {
2291cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn        pw.print("DUMP OF SERVICE "); pw.print(name); pw.println(":");
2292cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn        IBinder service = ServiceManager.checkService(name);
2293cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn        if (service == null) {
2294cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn            pw.println("  (Service not found)");
2295cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn            return;
2296cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn        }
2297cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn        TransferPipe tp = null;
2298cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn        try {
2299cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn            pw.flush();
2300cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn            tp = new TransferPipe();
2301cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn            tp.setBufferPrefix("  ");
2302daa0d5c9296515fe05cae65926a66dee609f382aDianne Hackborn            service.dumpAsync(tp.getWriteFd().getFileDescriptor(), args);
2303cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn            tp.go(fd);
2304cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn        } catch (Throwable e) {
2305cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn            if (tp != null) {
2306cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn                tp.kill();
2307cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn            }
2308cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn            pw.println("Failure dumping service:");
2309cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn            e.printStackTrace(pw);
2310cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn        }
2311cbfd23ee6f14445c3e17c5169abbc80c216fa137Dianne Hackborn    }
23129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2313