• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2007 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.content.pm;
18 
19 import android.content.res.Configuration;
20 import android.os.Parcel;
21 import android.os.Parcelable;
22 import android.util.Printer;
23 
24 /**
25  * Information you can retrieve about a particular application
26  * activity or receiver. This corresponds to information collected
27  * from the AndroidManifest.xml's <activity> and
28  * <receiver> tags.
29  */
30 public class ActivityInfo extends ComponentInfo
31         implements Parcelable {
32     /**
33      * A style resource identifier (in the package's resources) of this
34      * activity's theme.  From the "theme" attribute or, if not set, 0.
35      */
36     public int theme;
37 
38     /**
39      * Constant corresponding to <code>standard</code> in
40      * the {@link android.R.attr#launchMode} attribute.
41      */
42     public static final int LAUNCH_MULTIPLE = 0;
43     /**
44      * Constant corresponding to <code>singleTop</code> in
45      * the {@link android.R.attr#launchMode} attribute.
46      */
47     public static final int LAUNCH_SINGLE_TOP = 1;
48     /**
49      * Constant corresponding to <code>singleTask</code> in
50      * the {@link android.R.attr#launchMode} attribute.
51      */
52     public static final int LAUNCH_SINGLE_TASK = 2;
53     /**
54      * Constant corresponding to <code>singleInstance</code> in
55      * the {@link android.R.attr#launchMode} attribute.
56      */
57     public static final int LAUNCH_SINGLE_INSTANCE = 3;
58     /**
59      * The launch mode style requested by the activity.  From the
60      * {@link android.R.attr#launchMode} attribute, one of
61      * {@link #LAUNCH_MULTIPLE},
62      * {@link #LAUNCH_SINGLE_TOP}, {@link #LAUNCH_SINGLE_TASK}, or
63      * {@link #LAUNCH_SINGLE_INSTANCE}.
64      */
65     public int launchMode;
66 
67     /**
68      * Optional name of a permission required to be able to access this
69      * Activity.  From the "permission" attribute.
70      */
71     public String permission;
72 
73     /**
74      * The affinity this activity has for another task in the system.  The
75      * string here is the name of the task, often the package name of the
76      * overall package.  If null, the activity has no affinity.  Set from the
77      * {@link android.R.attr#taskAffinity} attribute.
78      */
79     public String taskAffinity;
80 
81     /**
82      * If this is an activity alias, this is the real activity class to run
83      * for it.  Otherwise, this is null.
84      */
85     public String targetActivity;
86 
87     /**
88      * Bit in {@link #flags} indicating whether this activity is able to
89      * run in multiple processes.  If
90      * true, the system may instantiate it in the some process as the
91      * process starting it in order to conserve resources.  If false, the
92      * default, it always runs in {@link #processName}.  Set from the
93      * {@link android.R.attr#multiprocess} attribute.
94      */
95     public static final int FLAG_MULTIPROCESS = 0x0001;
96     /**
97      * Bit in {@link #flags} indicating that, when the activity's task is
98      * relaunched from home, this activity should be finished.
99      * Set from the
100      * {@link android.R.attr#finishOnTaskLaunch} attribute.
101      */
102     public static final int FLAG_FINISH_ON_TASK_LAUNCH = 0x0002;
103     /**
104      * Bit in {@link #flags} indicating that, when the activity is the root
105      * of a task, that task's stack should be cleared each time the user
106      * re-launches it from home.  As a result, the user will always
107      * return to the original activity at the top of the task.
108      * This flag only applies to activities that
109      * are used to start the root of a new task.  Set from the
110      * {@link android.R.attr#clearTaskOnLaunch} attribute.
111      */
112     public static final int FLAG_CLEAR_TASK_ON_LAUNCH = 0x0004;
113     /**
114      * Bit in {@link #flags} indicating that, when the activity is the root
115      * of a task, that task's stack should never be cleared when it is
116      * relaunched from home.  Set from the
117      * {@link android.R.attr#alwaysRetainTaskState} attribute.
118      */
119     public static final int FLAG_ALWAYS_RETAIN_TASK_STATE = 0x0008;
120     /**
121      * Bit in {@link #flags} indicating that the activity's state
122      * is not required to be saved, so that if there is a failure the
123      * activity will not be removed from the activity stack.  Set from the
124      * {@link android.R.attr#stateNotNeeded} attribute.
125      */
126     public static final int FLAG_STATE_NOT_NEEDED = 0x0010;
127     /**
128      * Bit in {@link #flags} that indicates that the activity should not
129      * appear in the list of recently launched activities.  Set from the
130      * {@link android.R.attr#excludeFromRecents} attribute.
131      */
132     public static final int FLAG_EXCLUDE_FROM_RECENTS = 0x0020;
133     /**
134      * Bit in {@link #flags} that indicates that the activity can be moved
135      * between tasks based on its task affinity.  Set from the
136      * {@link android.R.attr#allowTaskReparenting} attribute.
137      */
138     public static final int FLAG_ALLOW_TASK_REPARENTING = 0x0040;
139     /**
140      * Bit in {@link #flags} indicating that, when the user navigates away
141      * from an activity, it should be finished.
142      * Set from the
143      * {@link android.R.attr#noHistory} attribute.
144      */
145     public static final int FLAG_NO_HISTORY = 0x0080;
146     /**
147      * Bit in {@link #flags} indicating that, when a request to close system
148      * windows happens, this activity is finished.
149      * Set from the
150      * {@link android.R.attr#finishOnCloseSystemDialogs} attribute.
151      */
152     public static final int FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS = 0x0100;
153     /**
154      * Value for {@link #flags}: true when the application's rendering should
155      * be hardware accelerated.
156      */
157     public static final int FLAG_HARDWARE_ACCELERATED = 0x0200;
158     /**
159      * Value for {@link #flags}: true when the application can be displayed over the lockscreen
160      * and consequently over all users' windows.
161      * @hide
162      */
163     public static final int FLAG_SHOW_ON_LOCK_SCREEN = 0x0400;
164     /**
165      * Bit in {@link #flags} corresponding to an immersive activity
166      * that wishes not to be interrupted by notifications.
167      * Applications that hide the system notification bar with
168      * {@link android.view.WindowManager.LayoutParams#FLAG_FULLSCREEN}
169      * may still be interrupted by high-priority notifications; for example, an
170      * incoming phone call may use
171      * {@link android.app.Notification#fullScreenIntent fullScreenIntent}
172      * to present a full-screen in-call activity to the user, pausing the
173      * current activity as a side-effect. An activity with
174      * {@link #FLAG_IMMERSIVE} set, however, will not be interrupted; the
175      * notification may be shown in some other way (such as a small floating
176      * "toast" window).
177      *
178      * Note that this flag will always reflect the Activity's
179      * <code>android:immersive</code> manifest definition, even if the Activity's
180      * immersive state is changed at runtime via
181      * {@link android.app.Activity#setImmersive(boolean)}.
182      *
183      * @see android.app.Notification#FLAG_HIGH_PRIORITY
184      * @see android.app.Activity#setImmersive(boolean)
185      */
186     public static final int FLAG_IMMERSIVE = 0x0800;
187     /**
188      * @hide Bit in {@link #flags}: If set, this component will only be seen
189      * by the primary user.  Only works with broadcast receivers.  Set from the
190      * {@link android.R.attr#primaryUserOnly} attribute.
191      */
192     public static final int FLAG_PRIMARY_USER_ONLY = 0x20000000;
193     /**
194      * Bit in {@link #flags}: If set, a single instance of the receiver will
195      * run for all users on the device.  Set from the
196      * {@link android.R.attr#singleUser} attribute.  Note that this flag is
197      * only relevant for ActivityInfo structures that are describing receiver
198      * components; it is not applied to activities.
199      */
200     public static final int FLAG_SINGLE_USER = 0x40000000;
201     /**
202      * Options that have been set in the activity declaration in the
203      * manifest.
204      * These include:
205      * {@link #FLAG_MULTIPROCESS},
206      * {@link #FLAG_FINISH_ON_TASK_LAUNCH}, {@link #FLAG_CLEAR_TASK_ON_LAUNCH},
207      * {@link #FLAG_ALWAYS_RETAIN_TASK_STATE},
208      * {@link #FLAG_STATE_NOT_NEEDED}, {@link #FLAG_EXCLUDE_FROM_RECENTS},
209      * {@link #FLAG_ALLOW_TASK_REPARENTING}, {@link #FLAG_NO_HISTORY},
210      * {@link #FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS},
211      * {@link #FLAG_HARDWARE_ACCELERATED}, {@link #FLAG_SINGLE_USER}.
212      */
213     public int flags;
214 
215     /**
216      * Constant corresponding to <code>unspecified</code> in
217      * the {@link android.R.attr#screenOrientation} attribute.
218      */
219     public static final int SCREEN_ORIENTATION_UNSPECIFIED = -1;
220     /**
221      * Constant corresponding to <code>landscape</code> in
222      * the {@link android.R.attr#screenOrientation} attribute.
223      */
224     public static final int SCREEN_ORIENTATION_LANDSCAPE = 0;
225     /**
226      * Constant corresponding to <code>portrait</code> in
227      * the {@link android.R.attr#screenOrientation} attribute.
228      */
229     public static final int SCREEN_ORIENTATION_PORTRAIT = 1;
230     /**
231      * Constant corresponding to <code>user</code> in
232      * the {@link android.R.attr#screenOrientation} attribute.
233      */
234     public static final int SCREEN_ORIENTATION_USER = 2;
235     /**
236      * Constant corresponding to <code>behind</code> in
237      * the {@link android.R.attr#screenOrientation} attribute.
238      */
239     public static final int SCREEN_ORIENTATION_BEHIND = 3;
240     /**
241      * Constant corresponding to <code>sensor</code> in
242      * the {@link android.R.attr#screenOrientation} attribute.
243      */
244     public static final int SCREEN_ORIENTATION_SENSOR = 4;
245 
246     /**
247      * Constant corresponding to <code>nosensor</code> in
248      * the {@link android.R.attr#screenOrientation} attribute.
249      */
250     public static final int SCREEN_ORIENTATION_NOSENSOR = 5;
251 
252     /**
253      * Constant corresponding to <code>sensorLandscape</code> in
254      * the {@link android.R.attr#screenOrientation} attribute.
255      */
256     public static final int SCREEN_ORIENTATION_SENSOR_LANDSCAPE = 6;
257 
258     /**
259      * Constant corresponding to <code>sensorPortrait</code> in
260      * the {@link android.R.attr#screenOrientation} attribute.
261      */
262     public static final int SCREEN_ORIENTATION_SENSOR_PORTRAIT = 7;
263 
264     /**
265      * Constant corresponding to <code>reverseLandscape</code> in
266      * the {@link android.R.attr#screenOrientation} attribute.
267      */
268     public static final int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8;
269 
270     /**
271      * Constant corresponding to <code>reversePortrait</code> in
272      * the {@link android.R.attr#screenOrientation} attribute.
273      */
274     public static final int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9;
275 
276     /**
277      * Constant corresponding to <code>fullSensor</code> in
278      * the {@link android.R.attr#screenOrientation} attribute.
279      */
280     public static final int SCREEN_ORIENTATION_FULL_SENSOR = 10;
281 
282     /**
283      * Constant corresponding to <code>userLandscape</code> in
284      * the {@link android.R.attr#screenOrientation} attribute.
285      */
286     public static final int SCREEN_ORIENTATION_USER_LANDSCAPE = 11;
287 
288     /**
289      * Constant corresponding to <code>userPortrait</code> in
290      * the {@link android.R.attr#screenOrientation} attribute.
291      */
292     public static final int SCREEN_ORIENTATION_USER_PORTRAIT = 12;
293 
294     /**
295      * Constant corresponding to <code>fullUser</code> in
296      * the {@link android.R.attr#screenOrientation} attribute.
297      */
298     public static final int SCREEN_ORIENTATION_FULL_USER = 13;
299 
300     /**
301      * Constant corresponding to <code>locked</code> in
302      * the {@link android.R.attr#screenOrientation} attribute.
303      */
304     public static final int SCREEN_ORIENTATION_LOCKED = 14;
305 
306     /**
307      * The preferred screen orientation this activity would like to run in.
308      * From the {@link android.R.attr#screenOrientation} attribute, one of
309      * {@link #SCREEN_ORIENTATION_UNSPECIFIED},
310      * {@link #SCREEN_ORIENTATION_LANDSCAPE},
311      * {@link #SCREEN_ORIENTATION_PORTRAIT},
312      * {@link #SCREEN_ORIENTATION_USER},
313      * {@link #SCREEN_ORIENTATION_BEHIND},
314      * {@link #SCREEN_ORIENTATION_SENSOR},
315      * {@link #SCREEN_ORIENTATION_NOSENSOR},
316      * {@link #SCREEN_ORIENTATION_SENSOR_LANDSCAPE},
317      * {@link #SCREEN_ORIENTATION_SENSOR_PORTRAIT},
318      * {@link #SCREEN_ORIENTATION_REVERSE_LANDSCAPE},
319      * {@link #SCREEN_ORIENTATION_REVERSE_PORTRAIT},
320      * {@link #SCREEN_ORIENTATION_FULL_SENSOR},
321      * {@link #SCREEN_ORIENTATION_USER_LANDSCAPE},
322      * {@link #SCREEN_ORIENTATION_USER_PORTRAIT},
323      * {@link #SCREEN_ORIENTATION_FULL_USER},
324      * {@link #SCREEN_ORIENTATION_LOCKED},
325      */
326     public int screenOrientation = SCREEN_ORIENTATION_UNSPECIFIED;
327 
328     /**
329      * Bit in {@link #configChanges} that indicates that the activity
330      * can itself handle changes to the IMSI MCC.  Set from the
331      * {@link android.R.attr#configChanges} attribute.
332      */
333     public static final int CONFIG_MCC = 0x0001;
334     /**
335      * Bit in {@link #configChanges} that indicates that the activity
336      * can itself handle changes to the IMSI MNC.  Set from the
337      * {@link android.R.attr#configChanges} attribute.
338      */
339     public static final int CONFIG_MNC = 0x0002;
340     /**
341      * Bit in {@link #configChanges} that indicates that the activity
342      * can itself handle changes to the locale.  Set from the
343      * {@link android.R.attr#configChanges} attribute.
344      */
345     public static final int CONFIG_LOCALE = 0x0004;
346     /**
347      * Bit in {@link #configChanges} that indicates that the activity
348      * can itself handle changes to the touchscreen type.  Set from the
349      * {@link android.R.attr#configChanges} attribute.
350      */
351     public static final int CONFIG_TOUCHSCREEN = 0x0008;
352     /**
353      * Bit in {@link #configChanges} that indicates that the activity
354      * can itself handle changes to the keyboard type.  Set from the
355      * {@link android.R.attr#configChanges} attribute.
356      */
357     public static final int CONFIG_KEYBOARD = 0x0010;
358     /**
359      * Bit in {@link #configChanges} that indicates that the activity
360      * can itself handle changes to the keyboard or navigation being hidden/exposed.
361      * Note that inspite of the name, this applies to the changes to any
362      * hidden states: keyboard or navigation.
363      * Set from the {@link android.R.attr#configChanges} attribute.
364      */
365     public static final int CONFIG_KEYBOARD_HIDDEN = 0x0020;
366     /**
367      * Bit in {@link #configChanges} that indicates that the activity
368      * can itself handle changes to the navigation type.  Set from the
369      * {@link android.R.attr#configChanges} attribute.
370      */
371     public static final int CONFIG_NAVIGATION = 0x0040;
372     /**
373      * Bit in {@link #configChanges} that indicates that the activity
374      * can itself handle changes to the screen orientation.  Set from the
375      * {@link android.R.attr#configChanges} attribute.
376      */
377     public static final int CONFIG_ORIENTATION = 0x0080;
378     /**
379      * Bit in {@link #configChanges} that indicates that the activity
380      * can itself handle changes to the screen layout.  Set from the
381      * {@link android.R.attr#configChanges} attribute.
382      */
383     public static final int CONFIG_SCREEN_LAYOUT = 0x0100;
384     /**
385      * Bit in {@link #configChanges} that indicates that the activity
386      * can itself handle the ui mode. Set from the
387      * {@link android.R.attr#configChanges} attribute.
388      */
389     public static final int CONFIG_UI_MODE = 0x0200;
390     /**
391      * Bit in {@link #configChanges} that indicates that the activity
392      * can itself handle the screen size. Set from the
393      * {@link android.R.attr#configChanges} attribute.  This will be
394      * set by default for applications that target an earlier version
395      * than {@link android.os.Build.VERSION_CODES#HONEYCOMB_MR2}...
396      * <b>however</b>, you will not see the bit set here becomes some
397      * applications incorrectly compare {@link #configChanges} against
398      * an absolute value rather than correctly masking out the bits
399      * they are interested in.  Please don't do that, thanks.
400      */
401     public static final int CONFIG_SCREEN_SIZE = 0x0400;
402     /**
403      * Bit in {@link #configChanges} that indicates that the activity
404      * can itself handle the smallest screen size. Set from the
405      * {@link android.R.attr#configChanges} attribute.  This will be
406      * set by default for applications that target an earlier version
407      * than {@link android.os.Build.VERSION_CODES#HONEYCOMB_MR2}...
408      * <b>however</b>, you will not see the bit set here becomes some
409      * applications incorrectly compare {@link #configChanges} against
410      * an absolute value rather than correctly masking out the bits
411      * they are interested in.  Please don't do that, thanks.
412      */
413     public static final int CONFIG_SMALLEST_SCREEN_SIZE = 0x0800;
414     /**
415      * Bit in {@link #configChanges} that indicates that the activity
416      * can itself handle density changes. Set from the
417      * {@link android.R.attr#configChanges} attribute.
418      */
419     public static final int CONFIG_DENSITY = 0x1000;
420     /**
421      * Bit in {@link #configChanges} that indicates that the activity
422      * can itself handle the change to layout direction. Set from the
423      * {@link android.R.attr#configChanges} attribute.
424      */
425     public static final int CONFIG_LAYOUT_DIRECTION = 0x2000;
426     /**
427      * Bit in {@link #configChanges} that indicates that the activity
428      * can itself handle changes to the font scaling factor.  Set from the
429      * {@link android.R.attr#configChanges} attribute.  This is
430      * not a core resource configuration, but a higher-level value, so its
431      * constant starts at the high bits.
432      */
433     public static final int CONFIG_FONT_SCALE = 0x40000000;
434 
435     /** @hide
436      * Unfortunately the constants for config changes in native code are
437      * different from ActivityInfo. :(  Here are the values we should use for the
438      * native side given the bit we have assigned in ActivityInfo.
439      */
440     public static int[] CONFIG_NATIVE_BITS = new int[] {
441         Configuration.NATIVE_CONFIG_MNC,                    // MNC
442         Configuration.NATIVE_CONFIG_MCC,                    // MCC
443         Configuration.NATIVE_CONFIG_LOCALE,                 // LOCALE
444         Configuration.NATIVE_CONFIG_TOUCHSCREEN,            // TOUCH SCREEN
445         Configuration.NATIVE_CONFIG_KEYBOARD,               // KEYBOARD
446         Configuration.NATIVE_CONFIG_KEYBOARD_HIDDEN,        // KEYBOARD HIDDEN
447         Configuration.NATIVE_CONFIG_NAVIGATION,             // NAVIGATION
448         Configuration.NATIVE_CONFIG_ORIENTATION,            // ORIENTATION
449         Configuration.NATIVE_CONFIG_SCREEN_LAYOUT,          // SCREEN LAYOUT
450         Configuration.NATIVE_CONFIG_UI_MODE,                // UI MODE
451         Configuration.NATIVE_CONFIG_SCREEN_SIZE,            // SCREEN SIZE
452         Configuration.NATIVE_CONFIG_SMALLEST_SCREEN_SIZE,   // SMALLEST SCREEN SIZE
453         Configuration.NATIVE_CONFIG_DENSITY,                // DENSITY
454         Configuration.NATIVE_CONFIG_LAYOUTDIR,              // LAYOUT DIRECTION
455     };
456     /** @hide
457      * Convert Java change bits to native.
458      */
activityInfoConfigToNative(int input)459     public static int activityInfoConfigToNative(int input) {
460         int output = 0;
461         for (int i=0; i<CONFIG_NATIVE_BITS.length; i++) {
462             if ((input&(1<<i)) != 0) {
463                 output |= CONFIG_NATIVE_BITS[i];
464             }
465         }
466         return output;
467     }
468 
469     /**
470      * @hide
471      * Unfortunately some developers (OpenFeint I am looking at you) have
472      * compared the configChanges bit field against absolute values, so if we
473      * introduce a new bit they break.  To deal with that, we will make sure
474      * the public field will not have a value that breaks them, and let the
475      * framework call here to get the real value.
476      */
getRealConfigChanged()477     public int getRealConfigChanged() {
478         return applicationInfo.targetSdkVersion < android.os.Build.VERSION_CODES.HONEYCOMB_MR2
479                 ? (configChanges | ActivityInfo.CONFIG_SCREEN_SIZE
480                         | ActivityInfo.CONFIG_SMALLEST_SCREEN_SIZE)
481                 : configChanges;
482     }
483 
484     /**
485      * Bit mask of kinds of configuration changes that this activity
486      * can handle itself (without being restarted by the system).
487      * Contains any combination of {@link #CONFIG_FONT_SCALE},
488      * {@link #CONFIG_MCC}, {@link #CONFIG_MNC},
489      * {@link #CONFIG_LOCALE}, {@link #CONFIG_TOUCHSCREEN},
490      * {@link #CONFIG_KEYBOARD}, {@link #CONFIG_NAVIGATION},
491      * {@link #CONFIG_ORIENTATION}, {@link #CONFIG_SCREEN_LAYOUT} and
492      * {@link #CONFIG_LAYOUT_DIRECTION}.  Set from the {@link android.R.attr#configChanges}
493      * attribute.
494      */
495     public int configChanges;
496 
497     /**
498      * The desired soft input mode for this activity's main window.
499      * Set from the {@link android.R.attr#windowSoftInputMode} attribute
500      * in the activity's manifest.  May be any of the same values allowed
501      * for {@link android.view.WindowManager.LayoutParams#softInputMode
502      * WindowManager.LayoutParams.softInputMode}.  If 0 (unspecified),
503      * the mode from the theme will be used.
504      */
505     public int softInputMode;
506 
507     /**
508      * The desired extra UI options for this activity and its main window.
509      * Set from the {@link android.R.attr#uiOptions} attribute in the
510      * activity's manifest.
511      */
512     public int uiOptions = 0;
513 
514     /**
515      * Flag for use with {@link #uiOptions}.
516      * Indicates that the action bar should put all action items in a separate bar when
517      * the screen is narrow.
518      * <p>This value corresponds to "splitActionBarWhenNarrow" for the {@link #uiOptions} XML
519      * attribute.
520      */
521     public static final int UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW = 1;
522 
523     /**
524      * If defined, the activity named here is the logical parent of this activity.
525      */
526     public String parentActivityName;
527 
ActivityInfo()528     public ActivityInfo() {
529     }
530 
ActivityInfo(ActivityInfo orig)531     public ActivityInfo(ActivityInfo orig) {
532         super(orig);
533         theme = orig.theme;
534         launchMode = orig.launchMode;
535         permission = orig.permission;
536         taskAffinity = orig.taskAffinity;
537         targetActivity = orig.targetActivity;
538         flags = orig.flags;
539         screenOrientation = orig.screenOrientation;
540         configChanges = orig.configChanges;
541         softInputMode = orig.softInputMode;
542         uiOptions = orig.uiOptions;
543         parentActivityName = orig.parentActivityName;
544     }
545 
546     /**
547      * Return the theme resource identifier to use for this activity.  If
548      * the activity defines a theme, that is used; else, the application
549      * theme is used.
550      *
551      * @return The theme associated with this activity.
552      */
getThemeResource()553     public final int getThemeResource() {
554         return theme != 0 ? theme : applicationInfo.theme;
555     }
556 
dump(Printer pw, String prefix)557     public void dump(Printer pw, String prefix) {
558         super.dumpFront(pw, prefix);
559         if (permission != null) {
560             pw.println(prefix + "permission=" + permission);
561         }
562         pw.println(prefix + "taskAffinity=" + taskAffinity
563                 + " targetActivity=" + targetActivity);
564         if (launchMode != 0 || flags != 0 || theme != 0) {
565             pw.println(prefix + "launchMode=" + launchMode
566                     + " flags=0x" + Integer.toHexString(flags)
567                     + " theme=0x" + Integer.toHexString(theme));
568         }
569         if (screenOrientation != SCREEN_ORIENTATION_UNSPECIFIED
570                 || configChanges != 0 || softInputMode != 0) {
571             pw.println(prefix + "screenOrientation=" + screenOrientation
572                     + " configChanges=0x" + Integer.toHexString(configChanges)
573                     + " softInputMode=0x" + Integer.toHexString(softInputMode));
574         }
575         if (uiOptions != 0) {
576             pw.println(prefix + " uiOptions=0x" + Integer.toHexString(uiOptions));
577         }
578         super.dumpBack(pw, prefix);
579     }
580 
toString()581     public String toString() {
582         return "ActivityInfo{"
583             + Integer.toHexString(System.identityHashCode(this))
584             + " " + name + "}";
585     }
586 
describeContents()587     public int describeContents() {
588         return 0;
589     }
590 
writeToParcel(Parcel dest, int parcelableFlags)591     public void writeToParcel(Parcel dest, int parcelableFlags) {
592         super.writeToParcel(dest, parcelableFlags);
593         dest.writeInt(theme);
594         dest.writeInt(launchMode);
595         dest.writeString(permission);
596         dest.writeString(taskAffinity);
597         dest.writeString(targetActivity);
598         dest.writeInt(flags);
599         dest.writeInt(screenOrientation);
600         dest.writeInt(configChanges);
601         dest.writeInt(softInputMode);
602         dest.writeInt(uiOptions);
603         dest.writeString(parentActivityName);
604     }
605 
606     public static final Parcelable.Creator<ActivityInfo> CREATOR
607             = new Parcelable.Creator<ActivityInfo>() {
608         public ActivityInfo createFromParcel(Parcel source) {
609             return new ActivityInfo(source);
610         }
611         public ActivityInfo[] newArray(int size) {
612             return new ActivityInfo[size];
613         }
614     };
615 
ActivityInfo(Parcel source)616     private ActivityInfo(Parcel source) {
617         super(source);
618         theme = source.readInt();
619         launchMode = source.readInt();
620         permission = source.readString();
621         taskAffinity = source.readString();
622         targetActivity = source.readString();
623         flags = source.readInt();
624         screenOrientation = source.readInt();
625         configChanges = source.readInt();
626         softInputMode = source.readInt();
627         uiOptions = source.readInt();
628         parentActivityName = source.readString();
629     }
630 }
631