Activity.java revision 4702a856973a553deb82f71b1d3b6c3db5dbf4ba
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 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 196e34636749217654f43221885afb7a29bb5ca96aAdam Powellimport com.android.internal.app.ActionBarImpl; 206e34636749217654f43221885afb7a29bb5ca96aAdam Powellimport com.android.internal.policy.PolicyManager; 2175986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov 22c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackbornimport android.content.ComponentCallbacks2; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ComponentName; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentResolver; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 266ed50de6d1e5e27d11304cce226fefeee3105bd7Jason parksimport android.content.CursorLoader; 271ccac75e1f1b97eccb916a8de04fc1012b30f6e5Suchi Amalapurapuimport android.content.IIntentSender; 2833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powellimport android.content.Intent; 29fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackbornimport android.content.IntentSender; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.SharedPreferences; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.pm.ActivityInfo; 32dd8fab2629131b09367df747afd9a61e42dd1992Adam Powellimport android.content.pm.PackageManager; 33dd8fab2629131b09367df747afd9a61e42dd1992Adam Powellimport android.content.pm.PackageManager.NameNotFoundException; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.Configuration; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.Resources; 36ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackbornimport android.content.res.TypedArray; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.Cursor; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Bitmap; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Canvas; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.drawable.Drawable; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.media.AudioManager; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri; 438d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackbornimport android.os.Build; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Bundle; 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Handler; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.IBinder; 4730c9bd89556137157b2f686637ece961454ccabeDianne Hackbornimport android.os.Looper; 48b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackbornimport android.os.Parcelable; 4975986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganovimport android.os.RemoteException; 50758035757f11a085a12b54daa9467f1d6bb251efBrad Fitzpatrickimport android.os.StrictMode; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.Selection; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.SpannableStringBuilder; 5375986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganovimport android.text.TextUtils; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.method.TextKeyListener; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.EventLog; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 58162bc0ea0d7862b92f18d0ce47310a85304205f7Dianne Hackbornimport android.util.Slog; 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.SparseArray; 606e34636749217654f43221885afb7a29bb5ca96aAdam Powellimport android.view.ActionMode; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.ContextMenu; 626e34636749217654f43221885afb7a29bb5ca96aAdam Powellimport android.view.ContextMenu.ContextMenuInfo; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.ContextThemeWrapper; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.KeyEvent; 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.LayoutInflater; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.Menu; 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.MenuInflater; 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.MenuItem; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.MotionEvent; 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View; 716e34636749217654f43221885afb7a29bb5ca96aAdam Powellimport android.view.View.OnCreateContextMenuListener; 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.ViewGroup; 736e34636749217654f43221885afb7a29bb5ca96aAdam Powellimport android.view.ViewGroup.LayoutParams; 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.ViewManager; 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.Window; 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.WindowManager; 77dd8fab2629131b09367df747afd9a61e42dd1992Adam Powellimport android.view.WindowManagerImpl; 7875986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganovimport android.view.accessibility.AccessibilityEvent; 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.AdapterView; 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 81625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackbornimport java.io.FileDescriptor; 82625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackbornimport java.io.PrintWriter; 836e34636749217654f43221885afb7a29bb5ca96aAdam Powellimport java.util.ArrayList; 846e34636749217654f43221885afb7a29bb5ca96aAdam Powellimport java.util.HashMap; 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * An activity is a single, focused thing that the user can do. Almost all 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activities interact with the user, so the Activity class takes care of 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * creating a window for you in which you can place your UI with 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setContentView}. While activities are often presented to the user 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as full-screen windows, they can also be used in other ways: as floating 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * windows (via a theme with {@link android.R.attr#windowIsFloating} set) 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or embedded inside of another activity (using {@link ActivityGroup}). 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * There are two methods almost all subclasses of Activity will implement: 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul> 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> {@link #onCreate} is where you initialize your activity. Most 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * importantly, here you will usually call {@link #setContentView(int)} 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with a layout resource defining your UI, and using {@link #findViewById} 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to retrieve the widgets in that UI that you need to interact with 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * programmatically. 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> {@link #onPause} is where you deal with the user leaving your 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity. Most importantly, any changes made by the user should at this 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * point be committed (usually to the 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.content.ContentProvider} holding the data). 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul> 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>To be of use with {@link android.content.Context#startActivity Context.startActivity()}, all 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity classes must have a corresponding 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.styleable#AndroidManifestActivity <activity>} 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * declaration in their package's <code>AndroidManifest.xml</code>.</p> 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Topics covered here: 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ol> 117291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <li><a href="#Fragments">Fragments</a> 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><a href="#ActivityLifecycle">Activity Lifecycle</a> 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><a href="#ConfigurationChanges">Configuration Changes</a> 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><a href="#StartingActivities">Starting Activities and Getting Results</a> 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><a href="#SavingPersistentState">Saving Persistent State</a> 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><a href="#Permissions">Permissions</a> 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><a href="#ProcessLifecycle">Process Lifecycle</a> 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ol> 125b54e7a3d9f60ac605f404f9eb3c5e92ca51bbd23Joe Fernandez * 126b54e7a3d9f60ac605f404f9eb3c5e92ca51bbd23Joe Fernandez * <div class="special reference"> 127b54e7a3d9f60ac605f404f9eb3c5e92ca51bbd23Joe Fernandez * <h3>Developer Guides</h3> 128b54e7a3d9f60ac605f404f9eb3c5e92ca51bbd23Joe Fernandez * <p>The Activity class is an important part of an application's overall lifecycle, 129b54e7a3d9f60ac605f404f9eb3c5e92ca51bbd23Joe Fernandez * and the way activities are launched and put together is a fundamental 130b54e7a3d9f60ac605f404f9eb3c5e92ca51bbd23Joe Fernandez * part of the platform's application model. For a detailed perspective on the structure of an 131b54e7a3d9f60ac605f404f9eb3c5e92ca51bbd23Joe Fernandez * Android application and how activities behave, please read the 132b54e7a3d9f60ac605f404f9eb3c5e92ca51bbd23Joe Fernandez * <a href="{@docRoot}guide/topics/fundamentals.html">Application Fundamentals</a> and 133b54e7a3d9f60ac605f404f9eb3c5e92ca51bbd23Joe Fernandez * <a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back Stack</a> 134b54e7a3d9f60ac605f404f9eb3c5e92ca51bbd23Joe Fernandez * developer guides.</p> 135b54e7a3d9f60ac605f404f9eb3c5e92ca51bbd23Joe Fernandez * 136b54e7a3d9f60ac605f404f9eb3c5e92ca51bbd23Joe Fernandez * <p>You can also find a detailed discussion about how to create activities in the 137b54e7a3d9f60ac605f404f9eb3c5e92ca51bbd23Joe Fernandez * <a href="{@docRoot}guide/topics/fundamentals/activities.html">Activities</a> 138b54e7a3d9f60ac605f404f9eb3c5e92ca51bbd23Joe Fernandez * developer guide.</p> 139b54e7a3d9f60ac605f404f9eb3c5e92ca51bbd23Joe Fernandez * </div> 140b54e7a3d9f60ac605f404f9eb3c5e92ca51bbd23Joe Fernandez * 141291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <a name="Fragments"></a> 142291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <h3>Fragments</h3> 143291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 144291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <p>Starting with {@link android.os.Build.VERSION_CODES#HONEYCOMB}, Activity 145291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * implementations can make use of the {@link Fragment} class to better 146291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * modularize their code, build more sophisticated user interfaces for larger 147291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * screens, and help scale their application between small and large screens. 148291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <a name="ActivityLifecycle"></a> 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <h3>Activity Lifecycle</h3> 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Activities in the system are managed as an <em>activity stack</em>. 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When a new activity is started, it is placed on the top of the stack 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and becomes the running activity -- the previous activity always remains 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * below it in the stack, and will not come to the foreground again until 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the new activity exits.</p> 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>An activity has essentially four states:</p> 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul> 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> If an activity in the foreground of the screen (at the top of 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the stack), 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it is <em>active</em> or <em>running</em>. </li> 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>If an activity has lost focus but is still visible (that is, a new non-full-sized 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or transparent activity has focus on top of your activity), it 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is <em>paused</em>. A paused activity is completely alive (it 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * maintains all state and member information and remains attached to 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the window manager), but can be killed by the system in extreme 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * low memory situations. 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>If an activity is completely obscured by another activity, 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it is <em>stopped</em>. It still retains all state and member information, 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * however, it is no longer visible to the user so its window is hidden 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and it will often be killed by the system when memory is needed 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * elsewhere.</li> 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>If an activity is paused or stopped, the system can drop the activity 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from memory by either asking it to finish, or simply killing its 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * process. When it is displayed again to the user, it must be 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * completely restarted and restored to its previous state.</li> 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul> 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The following diagram shows the important state paths of an Activity. 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The square rectangles represent callback methods you can implement to 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * perform operations when the Activity moves between states. The colored 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ovals are major states the Activity can be in.</p> 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><img src="../../../images/activity_lifecycle.png" 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * alt="State diagram for an Android Activity Lifecycle." border="0" /></p> 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>There are three key loops you may be interested in monitoring within your 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity: 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul> 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>The <b>entire lifetime</b> of an activity happens between the first call 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to {@link android.app.Activity#onCreate} through to a single final call 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to {@link android.app.Activity#onDestroy}. An activity will do all setup 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of "global" state in onCreate(), and release all remaining resources in 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onDestroy(). For example, if it has a thread running in the background 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to download data from the network, it may create that thread in onCreate() 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and then stop the thread in onDestroy(). 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>The <b>visible lifetime</b> of an activity happens between a call to 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.app.Activity#onStart} until a corresponding call to 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.app.Activity#onStop}. During this time the user can see the 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity on-screen, though it may not be in the foreground and interacting 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with the user. Between these two methods you can maintain resources that 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are needed to show the activity to the user. For example, you can register 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a {@link android.content.BroadcastReceiver} in onStart() to monitor for changes 207f76a50ce8fdc6aea22cabc77b2977a1a15a79630Ken Wakasa * that impact your UI, and unregister it in onStop() when the user no 208f76a50ce8fdc6aea22cabc77b2977a1a15a79630Ken Wakasa * longer sees what you are displaying. The onStart() and onStop() methods 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can be called multiple times, as the activity becomes visible and hidden 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the user. 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>The <b>foreground lifetime</b> of an activity happens between a call to 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.app.Activity#onResume} until a corresponding call to 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.app.Activity#onPause}. During this time the activity is 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in front of all other activities and interacting with the user. An activity 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can frequently go between the resumed and paused states -- for example when 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the device goes to sleep, when an activity result is delivered, when a new 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * intent is delivered -- so the code in these methods should be fairly 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * lightweight. 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul> 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The entire lifecycle of an activity is defined by the following 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Activity methods. All of these are hooks that you can override 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to do appropriate work when the activity changes state. All 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activities will implement {@link android.app.Activity#onCreate} 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to do their initial setup; many will also implement 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.app.Activity#onPause} to commit changes to data and 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * otherwise prepare to stop interacting with the user. You should always 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * call up to your superclass when implementing these methods.</p> 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p> 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <pre class="prettyprint"> 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * public class Activity extends ApplicationContext { 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onCreate(Bundle savedInstanceState); 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onStart(); 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onRestart(); 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onResume(); 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onPause(); 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onStop(); 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onDestroy(); 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </pre> 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>In general the movement through an activity's lifecycle looks like 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this:</p> 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <table border="2" width="85%" align="center" frame="hsides" rules="rows"> 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <colgroup align="left" span="3" /> 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <colgroup align="left" /> 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <colgroup align="center" /> 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <colgroup align="center" /> 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <thead> 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><th colspan="3">Method</th> <th>Description</th> <th>Killable?</th> <th>Next</th></tr> 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </thead> 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tbody> 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><th colspan="3" align="left" border="0">{@link android.app.Activity#onCreate onCreate()}</th> 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>Called when the activity is first created. 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is where you should do all of your normal static set up: 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * create views, bind data to lists, etc. This method also 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * provides you with a Bundle containing the activity's previously 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * frozen state, if there was one. 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Always followed by <code>onStart()</code>.</td> 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center">No</td> 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><code>onStart()</code></td> 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td rowspan="5" style="border-left: none; border-right: none;"> </td> 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <th colspan="2" align="left" border="0">{@link android.app.Activity#onRestart onRestart()}</th> 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>Called after your activity has been stopped, prior to it being 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * started again. 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Always followed by <code>onStart()</code></td> 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center">No</td> 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><code>onStart()</code></td> 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><th colspan="2" align="left" border="0">{@link android.app.Activity#onStart onStart()}</th> 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>Called when the activity is becoming visible to the user. 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Followed by <code>onResume()</code> if the activity comes 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the foreground, or <code>onStop()</code> if it becomes hidden.</td> 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center">No</td> 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><code>onResume()</code> or <code>onStop()</code></td> 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td rowspan="2" style="border-left: none;"> </td> 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <th align="left" border="0">{@link android.app.Activity#onResume onResume()}</th> 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>Called when the activity will start 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * interacting with the user. At this point your activity is at 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the top of the activity stack, with user input going to it. 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Always followed by <code>onPause()</code>.</td> 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center">No</td> 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><code>onPause()</code></td> 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><th align="left" border="0">{@link android.app.Activity#onPause onPause()}</th> 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>Called when the system is about to start resuming a previous 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity. This is typically used to commit unsaved changes to 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * persistent data, stop animations and other things that may be consuming 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * CPU, etc. Implementations of this method must be very quick because 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the next activity will not be resumed until this method returns. 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Followed by either <code>onResume()</code> if the activity 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returns back to the front, or <code>onStop()</code> if it becomes 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * invisible to the user.</td> 3110aae2d4e0075fd699cf40b26dca0eb2c3b3e37d2Dianne Hackborn * <td align="center"><font color="#800000"><strong>Pre-{@link android.os.Build.VERSION_CODES#HONEYCOMB}</strong></font></td> 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><code>onResume()</code> or<br> 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>onStop()</code></td> 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><th colspan="2" align="left" border="0">{@link android.app.Activity#onStop onStop()}</th> 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>Called when the activity is no longer visible to the user, because 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * another activity has been resumed and is covering this one. This 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * may happen either because a new activity is being started, an existing 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * one is being brought in front of this one, or this one is being 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * destroyed. 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Followed by either <code>onRestart()</code> if 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this activity is coming back to interact with the user, or 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>onDestroy()</code> if this activity is going away.</td> 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><font color="#800000"><strong>Yes</strong></font></td> 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><code>onRestart()</code> or<br> 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>onDestroy()</code></td> 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><th colspan="3" align="left" border="0">{@link android.app.Activity#onDestroy onDestroy()}</th> 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>The final call you receive before your 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity is destroyed. This can happen either because the 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity is finishing (someone called {@link Activity#finish} on 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it, or because the system is temporarily destroying this 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * instance of the activity to save space. You can distinguish 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * between these two scenarios with the {@link 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Activity#isFinishing} method.</td> 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><font color="#800000"><strong>Yes</strong></font></td> 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><em>nothing</em></td> 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tbody> 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </table> 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note the "Killable" column in the above table -- for those methods that 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are marked as being killable, after that method returns the process hosting the 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity may killed by the system <em>at any time</em> without another line 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of its code being executed. Because of this, you should use the 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onPause} method to write any persistent data (such as user edits) 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to storage. In addition, the method 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onSaveInstanceState(Bundle)} is called before placing the activity 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in such a background state, allowing you to save away any dynamic instance 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * state in your activity into the given Bundle, to be later received in 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onCreate} if the activity needs to be re-created. 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the <a href="#ProcessLifecycle">Process Lifecycle</a> 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * section for more information on how the lifecycle of a process is tied 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the activities it is hosting. Note that it is important to save 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * persistent data in {@link #onPause} instead of {@link #onSaveInstanceState} 3585c40f3fcc966ecde3347cd7ddbe965440318c35aDaisuke Miyakawa * because the latter is not part of the lifecycle callbacks, so will not 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be called in every situation as described in its documentation.</p> 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3610aae2d4e0075fd699cf40b26dca0eb2c3b3e37d2Dianne Hackborn * <p class="note">Be aware that these semantics will change slightly between 3620aae2d4e0075fd699cf40b26dca0eb2c3b3e37d2Dianne Hackborn * applications targeting platforms starting with {@link android.os.Build.VERSION_CODES#HONEYCOMB} 3630aae2d4e0075fd699cf40b26dca0eb2c3b3e37d2Dianne Hackborn * vs. those targeting prior platforms. Starting with Honeycomb, an application 3640aae2d4e0075fd699cf40b26dca0eb2c3b3e37d2Dianne Hackborn * is not in the killable state until its {@link #onStop} has returned. This 3650aae2d4e0075fd699cf40b26dca0eb2c3b3e37d2Dianne Hackborn * impacts when {@link #onSaveInstanceState(Bundle)} may be called (it may be 3660aae2d4e0075fd699cf40b26dca0eb2c3b3e37d2Dianne Hackborn * safely called after {@link #onPause()} and allows and application to safely 3670aae2d4e0075fd699cf40b26dca0eb2c3b3e37d2Dianne Hackborn * wait until {@link #onStop()} to save persistent state.</p> 3680aae2d4e0075fd699cf40b26dca0eb2c3b3e37d2Dianne Hackborn * 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>For those methods that are not marked as being killable, the activity's 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * process will not be killed by the system starting from the time the method 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is called and continuing after it returns. Thus an activity is in the killable 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * state, for example, between after <code>onPause()</code> to the start of 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>onResume()</code>.</p> 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <a name="ConfigurationChanges"></a> 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <h3>Configuration Changes</h3> 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>If the configuration of the device (as defined by the 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Configuration Resources.Configuration} class) changes, 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * then anything displaying a user interface will need to update to match that 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * configuration. Because Activity is the primary mechanism for interacting 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with the user, it includes special support for handling configuration 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * changes.</p> 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Unless you specify otherwise, a configuration change (such as a change 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in screen orientation, language, input devices, etc) will cause your 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current activity to be <em>destroyed</em>, going through the normal activity 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * lifecycle process of {@link #onPause}, 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onStop}, and {@link #onDestroy} as appropriate. If the activity 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * had been in the foreground or visible to the user, once {@link #onDestroy} is 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * called in that instance then a new instance of the activity will be 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * created, with whatever savedInstanceState the previous instance had generated 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from {@link #onSaveInstanceState}.</p> 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This is done because any application resource, 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * including layout files, can change based on any configuration value. Thus 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the only safe way to handle a configuration change is to re-retrieve all 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resources, including layouts, drawables, and strings. Because activities 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * must already know how to save their state and re-create themselves from 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that state, this is a convenient way to have an activity restart itself 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with a new configuration.</p> 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>In some special cases, you may want to bypass restarting of your 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity based on one or more types of configuration changes. This is 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * done with the {@link android.R.attr#configChanges android:configChanges} 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * attribute in its manifest. For any types of configuration changes you say 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that you handle there, you will receive a call to your current activity's 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onConfigurationChanged} method instead of being restarted. If 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a configuration change involves any that you do not handle, however, the 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity will still be restarted and {@link #onConfigurationChanged} 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will not be called.</p> 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <a name="StartingActivities"></a> 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <h3>Starting Activities and Getting Results</h3> 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The {@link android.app.Activity#startActivity} 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * method is used to start a 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * new activity, which will be placed at the top of the activity stack. It 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * takes a single argument, an {@link android.content.Intent Intent}, 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * which describes the activity 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to be executed.</p> 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Sometimes you want to get a result back from an activity when it 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ends. For example, you may start an activity that lets the user pick 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a person in a list of contacts; when it ends, it returns the person 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that was selected. To do this, you call the 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.app.Activity#startActivityForResult(Intent, int)} 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * version with a second integer parameter identifying the call. The result 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will come back through your {@link android.app.Activity#onActivityResult} 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * method.</p> 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>When an activity exits, it can call 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.app.Activity#setResult(int)} 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to return data back to its parent. It must always supply a result code, 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * which can be the standard results RESULT_CANCELED, RESULT_OK, or any 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * custom values starting at RESULT_FIRST_USER. In addition, it can optionally 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * return back an Intent containing any additional data it wants. All of this 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * information appears back on the 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * parent's <code>Activity.onActivityResult()</code>, along with the integer 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * identifier it originally supplied.</p> 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>If a child activity fails for any reason (such as crashing), the parent 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity will receive a result with the code RESULT_CANCELED.</p> 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <pre class="prettyprint"> 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * public class MyActivity extends Activity { 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ... 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * static final int PICK_CONTACT_REQUEST = 0; 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected boolean onKeyDown(int keyCode, KeyEvent event) { 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // When the user center presses, let them pick a contact. 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * startActivityForResult( 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * new Intent(Intent.ACTION_PICK, 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * new Uri("content://contacts")), 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * PICK_CONTACT_REQUEST); 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * return true; 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * return false; 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onActivityResult(int requestCode, int resultCode, 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Intent data) { 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if (requestCode == PICK_CONTACT_REQUEST) { 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if (resultCode == RESULT_OK) { 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // A contact was picked. Here we will just display it 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // to the user. 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * startActivity(new Intent(Intent.ACTION_VIEW, data)); 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </pre> 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <a name="SavingPersistentState"></a> 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <h3>Saving Persistent State</h3> 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>There are generally two kinds of persistent state than an activity 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will deal with: shared document-like data (typically stored in a SQLite 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * database using a {@linkplain android.content.ContentProvider content provider}) 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and internal state such as user preferences.</p> 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>For content provider data, we suggest that activities use a 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * "edit in place" user model. That is, any edits a user makes are effectively 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * made immediately without requiring an additional confirmation step. 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Supporting this model is generally a simple matter of following two rules:</p> 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul> 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> <p>When creating a new document, the backing database entry or file for 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it is created immediately. For example, if the user chooses to write 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a new e-mail, a new entry for that e-mail is created as soon as they 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * start entering data, so that if they go to any other activity after 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that point this e-mail will now appear in the list of drafts.</p> 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> <p>When an activity's <code>onPause()</code> method is called, it should 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * commit to the backing content provider or file any changes the user 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * has made. This ensures that those changes will be seen by any other 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity that is about to run. You will probably want to commit 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * your data even more aggressively at key times during your 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity's lifecycle: for example before starting a new 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity, before finishing your own activity, when the user 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * switches between input fields, etc.</p> 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul> 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This model is designed to prevent data loss when a user is navigating 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * between activities, and allows the system to safely kill an activity (because 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * system resources are needed somewhere else) at any time after it has been 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * paused. Note this implies 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that the user pressing BACK from your activity does <em>not</em> 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * mean "cancel" -- it means to leave the activity with its current contents 5110aae2d4e0075fd699cf40b26dca0eb2c3b3e37d2Dianne Hackborn * saved away. Canceling edits in an activity must be provided through 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * some other mechanism, such as an explicit "revert" or "undo" option.</p> 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>See the {@linkplain android.content.ContentProvider content package} for 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * more information about content providers. These are a key aspect of how 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * different activities invoke and propagate data between themselves.</p> 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The Activity class also provides an API for managing internal persistent state 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associated with an activity. This can be used, for example, to remember 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the user's preferred initial display in a calendar (day view or week view) 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or the user's default home page in a web browser.</p> 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Activity persistent state is managed 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with the method {@link #getPreferences}, 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * allowing you to retrieve and 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * modify a set of name/value pairs associated with the activity. To use 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * preferences that are shared across multiple application components 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (activities, receivers, services, providers), you can use the underlying 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Context#getSharedPreferences Context.getSharedPreferences()} method 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to retrieve a preferences 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * object stored under a specific name. 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (Note that it is not possible to share settings data across application 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * packages -- for that you will need a content provider.)</p> 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Here is an excerpt from a calendar activity that stores the user's 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * preferred view mode in its persistent settings:</p> 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <pre class="prettyprint"> 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * public class CalendarActivity extends Activity { 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ... 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * static final int DAY_VIEW_MODE = 0; 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * static final int WEEK_VIEW_MODE = 1; 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * private SharedPreferences mPrefs; 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * private int mCurViewMode; 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onCreate(Bundle savedInstanceState) { 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * super.onCreate(savedInstanceState); 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * SharedPreferences mPrefs = getSharedPreferences(); 5523fa98cb02c8f748b82869cd784db82094e950e4bQuddus Chong * mCurViewMode = mPrefs.getInt("view_mode", DAY_VIEW_MODE); 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onPause() { 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * super.onPause(); 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * SharedPreferences.Editor ed = mPrefs.edit(); 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ed.putInt("view_mode", mCurViewMode); 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ed.commit(); 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </pre> 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <a name="Permissions"></a> 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <h3>Permissions</h3> 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The ability to start a particular Activity can be enforced when it is 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * declared in its 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * manifest's {@link android.R.styleable#AndroidManifestActivity <activity>} 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * tag. By doing so, other applications will need to declare a corresponding 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.styleable#AndroidManifestUsesPermission <uses-permission>} 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * element in their own manifest to be able to start that activity. 57421c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn * 57521c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn * <p>When starting an Activity you can set {@link Intent#FLAG_GRANT_READ_URI_PERMISSION 57621c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn * Intent.FLAG_GRANT_READ_URI_PERMISSION} and/or {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION 57721c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn * Intent.FLAG_GRANT_WRITE_URI_PERMISSION} on the Intent. This will grant the 57821c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn * Activity access to the specific URIs in the Intent. Access will remain 57921c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn * until the Activity has finished (it will remain across the hosting 58021c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn * process being killed and other temporary destruction). As of 58121c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn * {@link android.os.Build.VERSION_CODES#GINGERBREAD}, if the Activity 58221c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn * was already created and a new Intent is being delivered to 58321c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn * {@link #onNewIntent(Intent)}, any newly granted URI permissions will be added 58421c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn * to the existing ones it holds. 58521c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn * 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>See the <a href="{@docRoot}guide/topics/security/security.html">Security and Permissions</a> 5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * document for more information on permissions and security in general. 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <a name="ProcessLifecycle"></a> 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <h3>Process Lifecycle</h3> 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The Android system attempts to keep application process around for as 5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * long as possible, but eventually will need to remove old processes when 5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * memory runs low. As described in <a href="#ActivityLifecycle">Activity 5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Lifecycle</a>, the decision about which process to remove is intimately 5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * tied to the state of the user's interaction with it. In general, there 5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are four states a process can be in based on the activities running in it, 5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * listed here in order of importance. The system will kill less important 5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * processes (the last ones) before it resorts to killing more important 6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * processes (the first ones). 6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ol> 6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> <p>The <b>foreground activity</b> (the activity at the top of the screen 6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that the user is currently interacting with) is considered the most important. 6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Its process will only be killed as a last resort, if it uses more memory 6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * than is available on the device. Generally at this point the device has 6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * reached a memory paging state, so this is required in order to keep the user 6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * interface responsive. 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> <p>A <b>visible activity</b> (an activity that is visible to the user 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * but not in the foreground, such as one sitting behind a foreground dialog) 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is considered extremely important and will not be killed unless that is 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * required to keep the foreground activity running. 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> <p>A <b>background activity</b> (an activity that is not visible to 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the user and has been paused) is no longer critical, so the system may 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * safely kill its process to reclaim memory for other foreground or 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * visible processes. If its process needs to be killed, when the user navigates 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * back to the activity (making it visible on the screen again), its 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onCreate} method will be called with the savedInstanceState it had previously 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * supplied in {@link #onSaveInstanceState} so that it can restart itself in the same 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * state as the user last left it. 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> <p>An <b>empty process</b> is one hosting no activities or other 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * application components (such as {@link Service} or 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.content.BroadcastReceiver} classes). These are killed very 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * quickly by the system as memory becomes low. For this reason, any 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * background operation you do outside of an activity must be executed in the 6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * context of an activity BroadcastReceiver or Service to ensure that the system 6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * knows it needs to keep your process around. 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ol> 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Sometimes an Activity may need to do a long-running operation that exists 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * independently of the activity lifecycle itself. An example may be a camera 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * application that allows you to upload a picture to a web site. The upload 6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * may take a long time, and the application should allow the user to leave 6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the application will it is executing. To accomplish this, your Activity 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * should start a {@link Service} in which the upload takes place. This allows 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the system to properly prioritize your process (considering it to be more 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * important than other non-visible applications) for the duration of the 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * upload, independent of whether the original activity is paused, stopped, 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or finished. 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class Activity extends ContextThemeWrapper 642625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn implements LayoutInflater.Factory2, 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Window.Callback, KeyEvent.Callback, 644c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn OnCreateContextMenuListener, ComponentCallbacks2 { 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String TAG = "Activity"; 646162bc0ea0d7862b92f18d0ce47310a85304205f7Dianne Hackborn private static final boolean DEBUG_LIFECYCLE = false; 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Standard activity result: operation canceled. */ 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RESULT_CANCELED = 0; 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Standard activity result: operation succeeded. */ 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RESULT_OK = -1; 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Start of user-defined activity results. */ 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RESULT_FIRST_USER = 1; 6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String WINDOW_HIERARCHY_TAG = "android:viewHierarchyState"; 656b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn private static final String FRAGMENTS_TAG = "android:fragments"; 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String SAVED_DIALOG_IDS_KEY = "android:savedDialogIds"; 6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String SAVED_DIALOGS_TAG = "android:savedDialogs"; 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String SAVED_DIALOG_KEY_PREFIX = "android:dialog_"; 6608ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn private static final String SAVED_DIALOG_ARGS_KEY_PREFIX = "android:dialog_args_"; 6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6628ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn private static class ManagedDialog { 6638ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn Dialog mDialog; 6648ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn Bundle mArgs; 6658ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn } 6668ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn private SparseArray<ManagedDialog> mManagedDialogs; 6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // set by the thread after the constructor and before onCreate(Bundle savedInstanceState) is called. 6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Instrumentation mInstrumentation; 6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IBinder mToken; 671b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn private int mIdent; 6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ String mEmbeddedID; 6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Application mApplication; 674b70f3dff01e7e1e85f77cf0b0b2eaba8200eb82cChristopher Tate /*package*/ Intent mIntent; 6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ComponentName mComponent; 6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ ActivityInfo mActivityInfo; 6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ ActivityThread mMainThread; 6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Activity mParent; 6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean mCalled; 6805e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn boolean mCheckedForLoaderManager; 681fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn boolean mLoadersStarted; 68252d3203ef69d4babbc4dd030a15c08c0b8d1d226Jeff Hamilton /*package*/ boolean mResumed; 6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mStopped; 6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean mFinished; 6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean mStartedActivity; 686fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn /** true if the activity is going through a transient pause */ 687fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn /*package*/ boolean mTemporaryPause = false; 6883d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton /** true if the activity is being destroyed in order to recreate it with a new configuration */ 6893d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton /*package*/ boolean mChangingConfigurations = false; 6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ int mConfigChangeFlags; 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ Configuration mCurrentConfig; 6928d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert private SearchManager mSearchManager; 69388ab69780f58e4b32d497266b2ad646a4d74827bAdam Powell private MenuInflater mMenuInflater; 6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 695b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn static final class NonConfigurationInstances { 696b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Object activity; 697b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn HashMap<String, Object> children; 698b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ArrayList<Fragment> fragments; 6994911b783aa9f4af5ac919db861751d350471f5efDianne Hackborn SparseArray<LoaderManagerImpl> loaders; 700b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 701b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn /* package */ NonConfigurationInstances mLastNonConfigurationInstances; 702b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Window mWindow; 7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private WindowManager mWindowManager; 7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ View mDecor = null; 7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ boolean mWindowAdded = false; 7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ boolean mVisibleFromServer = false; 7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ boolean mVisibleFromClient = true; 710ac695c608ba620e2362f57126d7be453cf5b7e1bAdam Powell /*package*/ ActionBarImpl mActionBar = null; 711dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell private boolean mEnableDefaultActionBarUp; 7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private CharSequence mTitle; 7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mTitleColor = 0; 7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 716b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn final FragmentManagerImpl mFragments = new FragmentManagerImpl(); 7172dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 7184911b783aa9f4af5ac919db861751d350471f5efDianne Hackborn SparseArray<LoaderManagerImpl> mAllLoaderManagers; 7194911b783aa9f4af5ac919db861751d350471f5efDianne Hackborn LoaderManagerImpl mLoaderManager; 720c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn 7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final class ManagedCursor { 7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ManagedCursor(Cursor cursor) { 7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCursor = cursor; 7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mReleased = false; 7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mUpdated = false; 7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final Cursor mCursor; 7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mReleased; 7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mUpdated; 7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final ArrayList<ManagedCursor> mManagedCursors = 7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new ArrayList<ManagedCursor>(); 7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // protected by synchronized (this) 7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mResultCode = RESULT_CANCELED; 7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Intent mResultData = null; 7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mTitleReady = false; 7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mDefaultKeyMode = DEFAULT_KEYS_DISABLE; 7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private SpannableStringBuilder mDefaultKeySsb = null; 7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected static final int[] FOCUSED_STATE_SET = {com.android.internal.R.attr.state_focused}; 7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7467e442837702a6e026c73a01fedb62c222b63cfc9Jeff Brown private final Object mInstanceTracker = StrictMode.trackActivity(this); 7477e442837702a6e026c73a01fedb62c222b63cfc9Jeff Brown 7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Thread mUiThread; 749b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final Handler mHandler = new Handler(); 7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Return the intent that started this activity. */ 7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Intent getIntent() { 7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mIntent; 7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Change the intent returned by {@link #getIntent}. This holds a 7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * reference to the given intent; it does not copy it. Often used in 7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * conjunction with {@link #onNewIntent}. 7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param newIntent The new Intent object to return from getIntent 7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getIntent 7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onNewIntent 7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setIntent(Intent newIntent) { 7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIntent = newIntent; 7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Return the application that owns this activity. */ 7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final Application getApplication() { 7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mApplication; 7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Is this activity embedded inside of another activity? */ 7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean isChild() { 7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParent != null; 7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Return the parent activity if this view is an embedded child. */ 7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final Activity getParent() { 7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParent; 7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Retrieve the window manager for showing custom windows. */ 7869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public WindowManager getWindowManager() { 7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mWindowManager; 7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the current {@link android.view.Window} for the activity. 7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This can be used to directly access parts of the Window API that 7939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are not available through Activity/Screen. 7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Window The current window, or null if the activity is not 7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * visual. 7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Window getWindow() { 7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mWindow; 8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 803c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * Return the LoaderManager for this fragment, creating it if needed. 804c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn */ 805c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn public LoaderManager getLoaderManager() { 806c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn if (mLoaderManager != null) { 807c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn return mLoaderManager; 808c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn } 8095e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn mCheckedForLoaderManager = true; 810fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn mLoaderManager = getLoaderManager(-1, mLoadersStarted, true); 811c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn return mLoaderManager; 812c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn } 813c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn 8145e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn LoaderManagerImpl getLoaderManager(int index, boolean started, boolean create) { 815c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn if (mAllLoaderManagers == null) { 8164911b783aa9f4af5ac919db861751d350471f5efDianne Hackborn mAllLoaderManagers = new SparseArray<LoaderManagerImpl>(); 817c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn } 8184911b783aa9f4af5ac919db861751d350471f5efDianne Hackborn LoaderManagerImpl lm = mAllLoaderManagers.get(index); 819fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn if (lm == null) { 820fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn if (create) { 821fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn lm = new LoaderManagerImpl(this, started); 822fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn mAllLoaderManagers.put(index, lm); 823fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn } 824fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn } else { 825fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn lm.updateActivity(this); 826c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn } 827c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn return lm; 828c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn } 829c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn 830c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn /** 8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Calls {@link android.view.Window#getCurrentFocus} on the 8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Window of this Activity to return the currently focused view. 8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return View The current View with focus or null. 8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getWindow 8379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.Window#getCurrentFocus 8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public View getCurrentFocus() { 8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mWindow != null ? mWindow.getCurrentFocus() : null; 8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when the activity is starting. This is where most initialization 8459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * should go: calling {@link #setContentView(int)} to inflate the 8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity's UI, using {@link #findViewById} to programmatically interact 8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with widgets in the UI, calling 8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #managedQuery(android.net.Uri , String[], String, String[], String)} to retrieve 8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * cursors for data being displayed, etc. 8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>You can call {@link #finish} from within this function, in 8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * which case onDestroy() will be immediately called without any of the rest 8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of the activity lifecycle ({@link #onStart}, {@link #onResume}, 8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onPause}, etc) executing. 8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param savedInstanceState If the activity is being re-initialized after 8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * previously being shut down then this Bundle contains the data it most 8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * recently supplied in {@link #onSaveInstanceState}. <b><i>Note: Otherwise it is null.</i></b> 8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onStart 8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onSaveInstanceState 8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onRestoreInstanceState 8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPostCreate 8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onCreate(Bundle savedInstanceState) { 870162bc0ea0d7862b92f18d0ce47310a85304205f7Dianne Hackborn if (DEBUG_LIFECYCLE) Slog.v(TAG, "onCreate " + this + ": " + savedInstanceState); 8712707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn if (mLastNonConfigurationInstances != null) { 8722707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn mAllLoaderManagers = mLastNonConfigurationInstances.loaders; 8732707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } 874dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell if (mActivityInfo.parentActivityName != null) { 875dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell if (mActionBar == null) { 876dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell mEnableDefaultActionBarUp = true; 877dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } else { 878dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell mActionBar.setDefaultDisplayHomeAsUpEnabled(true); 879dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } 880dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } 881b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (savedInstanceState != null) { 882b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Parcelable p = savedInstanceState.getParcelable(FRAGMENTS_TAG); 883b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mFragments.restoreAllState(p, mLastNonConfigurationInstances != null 884b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ? mLastNonConfigurationInstances.fragments : null); 885b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 886b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mFragments.dispatchCreate(); 887c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn getApplication().dispatchActivityCreated(this, savedInstanceState); 8889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 8899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The hook for {@link ActivityThread} to restore the state of this activity. 8939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Calls {@link #onSaveInstanceState(android.os.Bundle)} and 8959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #restoreManagedDialogs(android.os.Bundle)}. 8969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param savedInstanceState contains the saved state 8989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void performRestoreInstanceState(Bundle savedInstanceState) { 9009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onRestoreInstanceState(savedInstanceState); 9019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project restoreManagedDialogs(savedInstanceState); 9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This method is called after {@link #onStart} when the activity is 9069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * being re-initialized from a previously saved state, given here in 907305de9dbda4e40d60ca99dda307ccd5e3c23e0a0Mike LeBeau * <var>savedInstanceState</var>. Most implementations will simply use {@link #onCreate} 9089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to restore their state, but it is sometimes convenient to do it here 9099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * after all of the initialization has been done or to allow subclasses to 9109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * decide whether to use your default implementation. The default 9119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method performs a restore of any view state that 9129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * had previously been frozen by {@link #onSaveInstanceState}. 9139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This method is called between {@link #onStart} and 9159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onPostCreate}. 9169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param savedInstanceState the data most recently supplied in {@link #onSaveInstanceState}. 9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onCreate 9209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPostCreate 9219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onResume 9229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onSaveInstanceState 9239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onRestoreInstanceState(Bundle savedInstanceState) { 9259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mWindow != null) { 9269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bundle windowState = savedInstanceState.getBundle(WINDOW_HIERARCHY_TAG); 9279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (windowState != null) { 9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.restoreHierarchyState(windowState); 9299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Restore the state of any saved managed dialogs. 9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param savedInstanceState The bundle to restore from. 9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void restoreManagedDialogs(Bundle savedInstanceState) { 9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Bundle b = savedInstanceState.getBundle(SAVED_DIALOGS_TAG); 9409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (b == null) { 9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 9429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int[] ids = b.getIntArray(SAVED_DIALOG_IDS_KEY); 9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int numDialogs = ids.length; 9468ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn mManagedDialogs = new SparseArray<ManagedDialog>(numDialogs); 9479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < numDialogs; i++) { 9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Integer dialogId = ids[i]; 9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bundle dialogState = b.getBundle(savedDialogKeyFor(dialogId)); 9509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (dialogState != null) { 951e35c23514592efe07d54fdbed7e7ec0b717e8bbeRomain Guy // Calling onRestoreInstanceState() below will invoke dispatchOnCreate 952e35c23514592efe07d54fdbed7e7ec0b717e8bbeRomain Guy // so tell createDialog() not to do it, otherwise we get an exception 9538ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn final ManagedDialog md = new ManagedDialog(); 9548ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md.mArgs = b.getBundle(savedDialogArgsKeyFor(dialogId)); 9558ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md.mDialog = createDialog(dialogId, dialogState, md.mArgs); 9568ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn if (md.mDialog != null) { 9578ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn mManagedDialogs.put(dialogId, md); 9588ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn onPrepareDialog(dialogId, md.mDialog, md.mArgs); 9598ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md.mDialog.onRestoreInstanceState(dialogState); 9608ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn } 9619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9658ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn private Dialog createDialog(Integer dialogId, Bundle state, Bundle args) { 9668ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn final Dialog dialog = onCreateDialog(dialogId, args); 967764d5331d15c19162c938e617777b4bf15a6314dRomain Guy if (dialog == null) { 9688ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn return null; 969764d5331d15c19162c938e617777b4bf15a6314dRomain Guy } 9706de4aed1c67263269f83f579ec5b06263d173ef3Romain Guy dialog.dispatchOnCreate(state); 971764d5331d15c19162c938e617777b4bf15a6314dRomain Guy return dialog; 972764d5331d15c19162c938e617777b4bf15a6314dRomain Guy } 973764d5331d15c19162c938e617777b4bf15a6314dRomain Guy 9748ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn private static String savedDialogKeyFor(int key) { 9759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return SAVED_DIALOG_KEY_PREFIX + key; 9769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9788ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn private static String savedDialogArgsKeyFor(int key) { 9798ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn return SAVED_DIALOG_ARGS_KEY_PREFIX + key; 9808ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn } 9819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when activity start-up is complete (after {@link #onStart} 9849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and {@link #onRestoreInstanceState} have been called). Applications will 9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * generally not implement this method; it is intended for system 9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * classes to do final initialization after application code has run. 9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 9899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 9909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 9919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param savedInstanceState If the activity is being re-initialized after 9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * previously being shut down then this Bundle contains the data it most 9949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * recently supplied in {@link #onSaveInstanceState}. <b><i>Note: Otherwise it is null.</i></b> 9959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onCreate 9969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onPostCreate(Bundle savedInstanceState) { 9989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!isChild()) { 9999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTitleReady = true; 10009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onTitleChanged(getTitle(), getTitleColor()); 10019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 10039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called after {@link #onCreate} — or after {@link #onRestart} when 10079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the activity had been stopped, but is now again being displayed to the 10089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * user. It will be followed by {@link #onResume}. 10099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 10119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 10129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 10139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onCreate 10159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onStop 10169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onResume 10179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onStart() { 1019162bc0ea0d7862b92f18d0ce47310a85304205f7Dianne Hackborn if (DEBUG_LIFECYCLE) Slog.v(TAG, "onStart " + this); 10209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 1021fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn 1022fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn if (!mLoadersStarted) { 1023fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn mLoadersStarted = true; 1024fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn if (mLoaderManager != null) { 1025fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn mLoaderManager.doStart(); 1026fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn } else if (!mCheckedForLoaderManager) { 1027fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn mLoaderManager = getLoaderManager(-1, mLoadersStarted, false); 1028fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn } 1029fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn mCheckedForLoaderManager = true; 10302707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } 1031c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 1032c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn getApplication().dispatchActivityStarted(this); 10339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called after {@link #onStop} when the current activity is being 10379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * re-displayed to the user (the user has navigated back to it). It will 10389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be followed by {@link #onStart} and then {@link #onResume}. 10399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>For activities that are using raw {@link Cursor} objects (instead of 10419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * creating them through 10429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #managedQuery(android.net.Uri , String[], String, String[], String)}, 10439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this is usually the place 10449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * where the cursor should be requeried (because you had deactivated it in 10459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onStop}. 10469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 10489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 10499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 10509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onStop 10529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onStart 10539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onResume 10549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onRestart() { 10569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 10579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called after {@link #onRestoreInstanceState}, {@link #onRestart}, or 10619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onPause}, for your activity to start interacting with the user. 10629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is a good place to begin animations, open exclusive-access devices 10639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (such as the camera), etc. 10649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Keep in mind that onResume is not the best indicator that your activity 10669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is visible to the user; a system window such as the keyguard may be in 10679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * front. Use {@link #onWindowFocusChanged} to know for certain that your 10689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity is visible to the user (for example, to resume a game). 10699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 10719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 10729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 10739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onRestoreInstanceState 10759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onRestart 10769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPostResume 10779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPause 10789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onResume() { 1080162bc0ea0d7862b92f18d0ce47310a85304205f7Dianne Hackborn if (DEBUG_LIFECYCLE) Slog.v(TAG, "onResume " + this); 1081c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn getApplication().dispatchActivityResumed(this); 10829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 10839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when activity resume is complete (after {@link #onResume} has 10879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * been called). Applications will generally not implement this method; 10889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it is intended for system classes to do final setup after application 10899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resume code has run. 10909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 10929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 10939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 10949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onResume 10969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onPostResume() { 10989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Window win = getWindow(); 10999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (win != null) win.makeActive(); 110050efbed668a9410cdec51f7c8604fa44ed267fedAdam Powell if (mActionBar != null) mActionBar.setShowHideAnimationEnabled(true); 11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 11029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is called for activities that set launchMode to "singleTop" in 11069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * their package, or if a client used the {@link Intent#FLAG_ACTIVITY_SINGLE_TOP} 11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * flag when calling {@link #startActivity}. In either case, when the 11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity is re-launched while at the top of the activity stack instead 11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of a new instance of the activity being started, onNewIntent() will be 11109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * called on the existing instance with the Intent that was used to 11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * re-launch it. 11129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>An activity will always be paused before receiving a new intent, so 11149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you can count on {@link #onResume} being called after this method. 11159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note that {@link #getIntent} still returns the original Intent. You 11179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can use {@link #setIntent} to update it to this new Intent. 11189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param intent The new intent that was started for the activity. 11209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getIntent 11229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setIntent 11239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onResume 11249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onNewIntent(Intent intent) { 11269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The hook for {@link ActivityThread} to save the state of this activity. 11309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Calls {@link #onSaveInstanceState(android.os.Bundle)} 11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and {@link #saveManagedDialogs(android.os.Bundle)}. 11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param outState The bundle to save the state to. 11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void performSaveInstanceState(Bundle outState) { 11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onSaveInstanceState(outState); 11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project saveManagedDialogs(outState); 1139162bc0ea0d7862b92f18d0ce47310a85304205f7Dianne Hackborn if (DEBUG_LIFECYCLE) Slog.v(TAG, "onSaveInstanceState " + this + ": " + outState); 11409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called to retrieve per-instance state from an activity before being killed 11449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * so that the state can be restored in {@link #onCreate} or 11459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onRestoreInstanceState} (the {@link Bundle} populated by this method 11469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will be passed to both). 11479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This method is called before an activity may be killed so that when it 11499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * comes back some time in the future it can restore its state. For example, 11509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if activity B is launched in front of activity A, and at some point activity 11519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A is killed to reclaim resources, activity A will have a chance to save the 11529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current state of its user interface via this method so that when the user 11539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returns to activity A, the state of the user interface can be restored 11549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * via {@link #onCreate} or {@link #onRestoreInstanceState}. 11559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Do not confuse this method with activity lifecycle callbacks such as 11579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onPause}, which is always called when an activity is being placed 11589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in the background or on its way to destruction, or {@link #onStop} which 11599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is called before destruction. One example of when {@link #onPause} and 11609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onStop} is called and not this method is when a user navigates back 11619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from activity B to activity A: there is no need to call {@link #onSaveInstanceState} 11629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * on B because that particular instance will never be restored, so the 11639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * system avoids calling it. An example when {@link #onPause} is called and 11649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not {@link #onSaveInstanceState} is when activity B is launched in front of activity A: 11659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the system may avoid calling {@link #onSaveInstanceState} on activity A if it isn't 11669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * killed during the lifetime of B since the state of the user interface of 11679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A will stay intact. 11689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The default implementation takes care of most of the UI per-instance 11709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * state for you by calling {@link android.view.View#onSaveInstanceState()} on each 11719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * view in the hierarchy that has an id, and by saving the id of the currently 11729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * focused view (all of which is restored by the default implementation of 11739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onRestoreInstanceState}). If you override this method to save additional 11749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * information not captured by each individual view, you will likely want to 11759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * call through to the default implementation, otherwise be prepared to save 11769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * all of the state of each view yourself. 11779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>If called, this method will occur before {@link #onStop}. There are 11799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * no guarantees about whether it will occur before or after {@link #onPause}. 11809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param outState Bundle in which to place your saved state. 11829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onCreate 11849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onRestoreInstanceState 11859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPause 11869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onSaveInstanceState(Bundle outState) { 11889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project outState.putBundle(WINDOW_HIERARCHY_TAG, mWindow.saveHierarchyState()); 1189b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Parcelable p = mFragments.saveAllState(); 1190b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (p != null) { 1191b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn outState.putParcelable(FRAGMENTS_TAG, p); 1192b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 1193c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn getApplication().dispatchActivitySaveInstanceState(this, outState); 11949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Save the state of any managed dialogs. 11989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param outState place to store the saved state. 12009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void saveManagedDialogs(Bundle outState) { 12029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mManagedDialogs == null) { 12039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 12049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int numDialogs = mManagedDialogs.size(); 12079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (numDialogs == 0) { 12089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 12099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bundle dialogState = new Bundle(); 12129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] ids = new int[mManagedDialogs.size()]; 12149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // save each dialog's bundle, gather the ids 12169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < numDialogs; i++) { 12179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int key = mManagedDialogs.keyAt(i); 12189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ids[i] = key; 12198ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn final ManagedDialog md = mManagedDialogs.valueAt(i); 12208ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn dialogState.putBundle(savedDialogKeyFor(key), md.mDialog.onSaveInstanceState()); 12218ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn if (md.mArgs != null) { 12228ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn dialogState.putBundle(savedDialogArgsKeyFor(key), md.mArgs); 12238ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn } 12249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dialogState.putIntArray(SAVED_DIALOG_IDS_KEY, ids); 12279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project outState.putBundle(SAVED_DIALOGS_TAG, dialogState); 12289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called as part of the activity lifecycle when an activity is going into 12339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the background, but has not (yet) been killed. The counterpart to 12349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onResume}. 12359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>When activity B is launched in front of activity A, this callback will 12379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be invoked on A. B will not be created until A's {@link #onPause} returns, 12389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * so be sure to not do anything lengthy here. 12399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This callback is mostly used for saving any persistent state the 12419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity is editing, to present a "edit in place" model to the user and 12429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * making sure nothing is lost if there are not enough resources to start 12439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the new activity without first killing this one. This is also a good 12449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * place to do things like stop animations and other things that consume a 124514a9310efd936149c82ecfcc37c7c8308968f67cPin Ting * noticeable amount of CPU in order to make the switch to the next activity 12469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as fast as possible, or to close resources that are exclusive access 12479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * such as the camera. 12489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>In situations where the system needs more memory it may kill paused 12509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * processes to reclaim resources. Because of this, you should be sure 12519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that all of your state is saved by the time you return from 12529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this function. In general {@link #onSaveInstanceState} is used to save 12539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * per-instance state in the activity and this method is used to store 12549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * global persistent data (in content providers, files, etc.) 12559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>After receiving this call you will usually receive a following call 12579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to {@link #onStop} (after the next activity has been resumed and 12589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * displayed), however in some cases there will be a direct call back to 12599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onResume} without going through the stopped state. 12609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 12629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 12639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 12649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onResume 12669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onSaveInstanceState 12679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onStop 12689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onPause() { 1270162bc0ea0d7862b92f18d0ce47310a85304205f7Dianne Hackborn if (DEBUG_LIFECYCLE) Slog.v(TAG, "onPause " + this); 1271c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn getApplication().dispatchActivityPaused(this); 12729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 12739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called as part of the activity lifecycle when an activity is about to go 12779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * into the background as the result of user choice. For example, when the 12789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * user presses the Home key, {@link #onUserLeaveHint} will be called, but 12799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * when an incoming phone call causes the in-call Activity to be automatically 12809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * brought to the foreground, {@link #onUserLeaveHint} will not be called on 12819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the activity being interrupted. In cases when it is invoked, this method 12829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is called right before the activity's {@link #onPause} callback. 12839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This callback and {@link #onUserInteraction} are intended to help 12859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activities manage status bar notifications intelligently; specifically, 12869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for helping activities determine the proper time to cancel a notfication. 12879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onUserInteraction() 12899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onUserLeaveHint() { 12919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Generate a new thumbnail for this activity. This method is called before 12959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * pausing the activity, and should draw into <var>outBitmap</var> the 12969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * imagery for the desired thumbnail in the dimensions of that bitmap. It 12979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can use the given <var>canvas</var>, which is configured to draw into the 12989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * bitmap, for rendering if desired. 12999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13000aae2d4e0075fd699cf40b26dca0eb2c3b3e37d2Dianne Hackborn * <p>The default implementation returns fails and does not draw a thumbnail; 13010aae2d4e0075fd699cf40b26dca0eb2c3b3e37d2Dianne Hackborn * this will result in the platform creating its own thumbnail if needed. 13029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param outBitmap The bitmap to contain the thumbnail. 13049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param canvas Can be used to render into the bitmap. 13059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Return true if you have drawn into the bitmap; otherwise after 13079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you return it will be filled with a default thumbnail. 13089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onCreateDescription 13109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onSaveInstanceState 13119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPause 13129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onCreateThumbnail(Bitmap outBitmap, Canvas canvas) { 13140aae2d4e0075fd699cf40b26dca0eb2c3b3e37d2Dianne Hackborn return false; 13159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Generate a new description for this activity. This method is called 13199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * before pausing the activity and can, if desired, return some textual 13209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * description of its current state to be displayed to the user. 13219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The default implementation returns null, which will cause you to 13239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * inherit the description from the previous activity. If all activities 13249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * return null, generally the label of the top activity will be used as the 13259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * description. 13269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A description of what the user is doing. It should be short and 13289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * sweet (only a few words). 13299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onCreateThumbnail 13319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onSaveInstanceState 13329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPause 13339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence onCreateDescription() { 13359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 13369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when you are no longer visible to the user. You will next 13409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * receive either {@link #onRestart}, {@link #onDestroy}, or nothing, 13419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * depending on later user activity. 13429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note that this method may never be called, in low memory situations 13449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * where the system does not have enough memory to keep your activity's 13459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * process running after its {@link #onPause} method is called. 13469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 13489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 13509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onRestart 13529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onResume 13539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onSaveInstanceState 13549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onDestroy 13559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onStop() { 1357162bc0ea0d7862b92f18d0ce47310a85304205f7Dianne Hackborn if (DEBUG_LIFECYCLE) Slog.v(TAG, "onStop " + this); 135850efbed668a9410cdec51f7c8604fa44ed267fedAdam Powell if (mActionBar != null) mActionBar.setShowHideAnimationEnabled(false); 1359c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn getApplication().dispatchActivityStopped(this); 13609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 13619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Perform any final cleanup before an activity is destroyed. This can 13659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * happen either because the activity is finishing (someone called 13669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #finish} on it, or because the system is temporarily destroying 13679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this instance of the activity to save space. You can distinguish 13689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * between these two scenarios with the {@link #isFinishing} method. 13699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Note: do not count on this method being called as a place for 13719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * saving data! For example, if an activity is editing data in a content 13729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * provider, those edits should be committed in either {@link #onPause} or 13739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onSaveInstanceState}, not here.</em> This method is usually implemented to 13749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * free resources like threads that are associated with an activity, so 13759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that a destroyed activity does not leave such things around while the 13769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rest of its application is still running. There are situations where 13779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the system will simply kill the activity's hosting process without 13789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * calling this method (or any others) in it, so it should not be used to 13799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * do things that are intended to remain around after the process goes 13809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * away. 13819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 13839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 13849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 13859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPause 13879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onStop 13889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #finish 13899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #isFinishing 13909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onDestroy() { 1392162bc0ea0d7862b92f18d0ce47310a85304205f7Dianne Hackborn if (DEBUG_LIFECYCLE) Slog.v(TAG, "onDestroy " + this); 13939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 13949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // dismiss any dialogs we are managing. 13969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mManagedDialogs != null) { 13979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int numDialogs = mManagedDialogs.size(); 13989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < numDialogs; i++) { 13998ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn final ManagedDialog md = mManagedDialogs.valueAt(i); 14008ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn if (md.mDialog.isShowing()) { 14018ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md.mDialog.dismiss(); 14029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14048ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn mManagedDialogs = null; 14059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // close any cursors we are managing. 14082f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki synchronized (mManagedCursors) { 14092f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki int numCursors = mManagedCursors.size(); 14102f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki for (int i = 0; i < numCursors; i++) { 14112f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki ManagedCursor c = mManagedCursors.get(i); 14122f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki if (c != null) { 14132f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki c.mCursor.close(); 14142f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki } 14159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14162f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki mManagedCursors.clear(); 14179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14184986044fd3bce877247e425374b47967775081a8Amith Yamasani 14194986044fd3bce877247e425374b47967775081a8Amith Yamasani // Close any open search dialog 14204986044fd3bce877247e425374b47967775081a8Amith Yamasani if (mSearchManager != null) { 14214986044fd3bce877247e425374b47967775081a8Amith Yamasani mSearchManager.stopSearch(); 14224986044fd3bce877247e425374b47967775081a8Amith Yamasani } 1423c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 1424c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn getApplication().dispatchActivityDestroyed(this); 14259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called by the system when the device configuration changes while your 14299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity is running. Note that this will <em>only</em> be called if 14309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you have selected configurations you would like to handle with the 14319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.attr#configChanges} attribute in your manifest. If 14329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * any configuration change occurs that is not selected to be reported 14339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * by that attribute, then instead of reporting it the system will stop 14349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and restart the activity (to have it launched with the new 14359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * configuration). 14369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>At the time that this function has been called, your Resources 14389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * object will have been updated to return resource values matching the 14399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * new configuration. 14409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param newConfig The new device configuration. 14429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onConfigurationChanged(Configuration newConfig) { 1444162bc0ea0d7862b92f18d0ce47310a85304205f7Dianne Hackborn if (DEBUG_LIFECYCLE) Slog.v(TAG, "onConfigurationChanged " + this + ": " + newConfig); 14459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 1446444c727e0eecf83e9d0b9c4e7af5cbf5fc4135f8Bjorn Bringert 14479d0718042f7c0a50d825c621f82ce9a92071f07aDianne Hackborn mFragments.dispatchConfigurationChanged(newConfig); 14489d0718042f7c0a50d825c621f82ce9a92071f07aDianne Hackborn 14499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mWindow != null) { 14509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Pass the configuration changed event to the window 14519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.onConfigurationChanged(newConfig); 14529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 145345c0b1954d7dfa6e2590ed76b915a98ae971414cAdam Powell 145445c0b1954d7dfa6e2590ed76b915a98ae971414cAdam Powell if (mActionBar != null) { 145545c0b1954d7dfa6e2590ed76b915a98ae971414cAdam Powell // Do this last; the action bar will need to access 145645c0b1954d7dfa6e2590ed76b915a98ae971414cAdam Powell // view changes from above. 145745c0b1954d7dfa6e2590ed76b915a98ae971414cAdam Powell mActionBar.onConfigurationChanged(newConfig); 145845c0b1954d7dfa6e2590ed76b915a98ae971414cAdam Powell } 14599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If this activity is being destroyed because it can not handle a 14639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * configuration parameter being changed (and thus its 14649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onConfigurationChanged(Configuration)} method is 14659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <em>not</em> being called), then you can use this method to discover 14669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the set of changes that have occurred while in the process of being 14679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * destroyed. Note that there is no guarantee that these will be 14689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * accurate (other changes could have happened at any time), so you should 14699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * only use this as an optimization hint. 14709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a bit field of the configuration parameters that are 14729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * changing, as defined by the {@link android.content.res.Configuration} 14739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * class. 14749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getChangingConfigurations() { 14769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mConfigChangeFlags; 14779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the non-configuration instance data that was previously 14819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returned by {@link #onRetainNonConfigurationInstance()}. This will 14829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be available from the initial {@link #onCreate} and 14839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onStart} calls to the new instance, allowing you to extract 14849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * any useful dynamic state from the previous instance. 14859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note that the data you retrieve here should <em>only</em> be used 14879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as an optimization for handling configuration changes. You should always 14889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be able to handle getting a null pointer back, and an activity must 14899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * still be able to restore itself to its previous state (through the 14909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * normal {@link #onSaveInstanceState(Bundle)} mechanism) even if this 14919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * function returns null. 14929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the object previously returned by 14949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onRetainNonConfigurationInstance()}. 1495271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * 1496271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * @deprecated Use the new {@link Fragment} API 1497271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * {@link Fragment#setRetainInstance(boolean)} instead; this is also 1498271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * available on older platforms through the Android compatibility package. 14999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15009567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn @Deprecated 15019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Object getLastNonConfigurationInstance() { 1502b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return mLastNonConfigurationInstances != null 1503b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ? mLastNonConfigurationInstances.activity : null; 15049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called by the system, as part of destroying an 15089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity due to a configuration change, when it is known that a new 15099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * instance will immediately be created for the new configuration. You 15109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can return any object you like here, including the activity instance 15119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * itself, which can later be retrieved by calling 15129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getLastNonConfigurationInstance()} in the new activity 15139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * instance. 15149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1515291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <em>If you are targeting {@link android.os.Build.VERSION_CODES#HONEYCOMB} 1516291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * or later, consider instead using a {@link Fragment} with 1517291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * {@link Fragment#setRetainInstance(boolean) 1518291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * Fragment.setRetainInstance(boolean}.</em> 1519291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 15209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This function is called purely as an optimization, and you must 15219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not rely on it being called. When it is called, a number of guarantees 15229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will be made to help optimize configuration switching: 15239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul> 15249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> The function will be called between {@link #onStop} and 15259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onDestroy}. 15269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> A new instance of the activity will <em>always</em> be immediately 1527ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn * created after this one's {@link #onDestroy()} is called. In particular, 1528ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn * <em>no</em> messages will be dispatched during this time (when the returned 1529ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn * object does not have an activity to be associated with). 15309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> The object you return here will <em>always</em> be available from 15319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the {@link #getLastNonConfigurationInstance()} method of the following 15329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity instance as described there. 15339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul> 15349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 15359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>These guarantees are designed so that an activity can use this API 15369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to propagate extensive state from the old to new activity instance, from 15379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * loaded bitmaps, to network connections, to evenly actively running 15389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * threads. Note that you should <em>not</em> propagate any data that 15399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * may change based on the configuration, including any data loaded from 15409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resources such as strings, layouts, or drawables. 15419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1542ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn * <p>The guarantee of no message handling during the switch to the next 1543ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn * activity simplifies use with active objects. For example if your retained 1544ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn * state is an {@link android.os.AsyncTask} you are guaranteed that its 1545ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn * call back functions (like {@link android.os.AsyncTask#onPostExecute}) will 1546ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn * not be called from the call here until you execute the next instance's 1547ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn * {@link #onCreate(Bundle)}. (Note however that there is of course no such 1548ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn * guarantee for {@link android.os.AsyncTask#doInBackground} since that is 1549ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn * running in a separate thread.) 1550ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn * 15519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Return any Object holding the desired state to propagate to the 15529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * next activity instance. 1553271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * 1554271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * @deprecated Use the new {@link Fragment} API 1555271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * {@link Fragment#setRetainInstance(boolean)} instead; this is also 1556271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * available on older platforms through the Android compatibility package. 15579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Object onRetainNonConfigurationInstance() { 15599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 15609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the non-configuration instance data that was previously 15649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returned by {@link #onRetainNonConfigurationChildInstances()}. This will 15659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be available from the initial {@link #onCreate} and 15669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onStart} calls to the new instance, allowing you to extract 15679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * any useful dynamic state from the previous instance. 15689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 15699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note that the data you retrieve here should <em>only</em> be used 15709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as an optimization for handling configuration changes. You should always 15719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be able to handle getting a null pointer back, and an activity must 15729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * still be able to restore itself to its previous state (through the 15739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * normal {@link #onSaveInstanceState(Bundle)} mechanism) even if this 15749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * function returns null. 15759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 15769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the object previously returned by 15779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onRetainNonConfigurationChildInstances()} 15789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1579b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn HashMap<String, Object> getLastNonConfigurationChildInstances() { 1580b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return mLastNonConfigurationInstances != null 1581b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ? mLastNonConfigurationInstances.children : null; 15829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This method is similar to {@link #onRetainNonConfigurationInstance()} except that 15869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it should return either a mapping from child activity id strings to arbitrary objects, 15879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or null. This method is intended to be used by Activity framework subclasses that control a 15889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * set of child activities, such as ActivityGroup. The same guarantees and restrictions apply 15899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as for {@link #onRetainNonConfigurationInstance()}. The default implementation returns null. 15909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project HashMap<String,Object> onRetainNonConfigurationChildInstances() { 15929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 15939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1595b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn NonConfigurationInstances retainNonConfigurationInstances() { 1596b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Object activity = onRetainNonConfigurationInstance(); 1597b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn HashMap<String, Object> children = onRetainNonConfigurationChildInstances(); 1598b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ArrayList<Fragment> fragments = mFragments.retainNonConfig(); 15992707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn boolean retainLoaders = false; 16002707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn if (mAllLoaderManagers != null) { 16015e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn // prune out any loader managers that were already stopped and so 16022707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn // have nothing useful to retain. 16032707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn for (int i=mAllLoaderManagers.size()-1; i>=0; i--) { 16044911b783aa9f4af5ac919db861751d350471f5efDianne Hackborn LoaderManagerImpl lm = mAllLoaderManagers.valueAt(i); 16052707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn if (lm.mRetaining) { 16062707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn retainLoaders = true; 16072707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } else { 16085e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn lm.doDestroy(); 16092707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn mAllLoaderManagers.removeAt(i); 16102707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } 16112707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } 16122707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } 16132707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn if (activity == null && children == null && fragments == null && !retainLoaders) { 1614b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return null; 1615b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 1616b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 1617b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn NonConfigurationInstances nci = new NonConfigurationInstances(); 1618b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn nci.activity = activity; 1619b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn nci.children = children; 1620b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn nci.fragments = fragments; 16212707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn nci.loaders = mAllLoaderManagers; 1622b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return nci; 1623b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 1624c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 16259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onLowMemory() { 1626162bc0ea0d7862b92f18d0ce47310a85304205f7Dianne Hackborn if (DEBUG_LIFECYCLE) Slog.v(TAG, "onLowMemory " + this); 16279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 16289d0718042f7c0a50d825c621f82ce9a92071f07aDianne Hackborn mFragments.dispatchLowMemory(); 16299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1630c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 1631c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn public void onTrimMemory(int level) { 1632162bc0ea0d7862b92f18d0ce47310a85304205f7Dianne Hackborn if (DEBUG_LIFECYCLE) Slog.v(TAG, "onTrimMemory " + this + ": " + level); 1633c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn mCalled = true; 1634c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn mFragments.dispatchTrimMemory(level); 1635c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 1636c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 16379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1638b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn * Return the FragmentManager for interacting with fragments associated 1639b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn * with this activity. 1640b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn */ 1641b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn public FragmentManager getFragmentManager() { 1642b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn return mFragments; 1643b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn } 1644b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn 16459e14e9f33a66b864b98c6ff9517988bafbca3301Dianne Hackborn void invalidateFragmentIndex(int index) { 16465e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn //Log.v(TAG, "invalidateFragmentIndex: index=" + index); 16479e14e9f33a66b864b98c6ff9517988bafbca3301Dianne Hackborn if (mAllLoaderManagers != null) { 16485e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn LoaderManagerImpl lm = mAllLoaderManagers.get(index); 1649d04ad541def2bca8fc2d810514ee15ab97893d35Dianne Hackborn if (lm != null && !lm.mRetaining) { 16505e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn lm.doDestroy(); 1651d04ad541def2bca8fc2d810514ee15ab97893d35Dianne Hackborn mAllLoaderManagers.remove(index); 16525e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn } 16539e14e9f33a66b864b98c6ff9517988bafbca3301Dianne Hackborn } 16549e14e9f33a66b864b98c6ff9517988bafbca3301Dianne Hackborn } 16559e14e9f33a66b864b98c6ff9517988bafbca3301Dianne Hackborn 16562dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn /** 1657c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * Called when a Fragment is being attached to this activity, immediately 1658c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * after the call to its {@link Fragment#onAttach Fragment.onAttach()} 1659c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * method and before {@link Fragment#onCreate Fragment.onCreate()}. 1660c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn */ 1661c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn public void onAttachFragment(Fragment fragment) { 1662c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn } 1663c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn 1664c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn /** 16659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Wrapper around 16669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link ContentResolver#query(android.net.Uri , String[], String, String[], String)} 16679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that gives the resulting {@link Cursor} to call 16689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #startManagingCursor} so that the activity will manage its 16699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * lifecycle for you. 16709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1671291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <em>If you are targeting {@link android.os.Build.VERSION_CODES#HONEYCOMB} 1672291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * or later, consider instead using {@link LoaderManager} instead, available 1673291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * via {@link #getLoaderManager()}.</em> 1674291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 16758ef6970cf5b779a5a69502cb07fd94d9190bccfdJoe Fernandez * <p><strong>Warning:</strong> Do not call {@link Cursor#close()} on a cursor obtained using 16768ef6970cf5b779a5a69502cb07fd94d9190bccfdJoe Fernandez * this method, because the activity will do that for you at the appropriate time. However, if 16778ef6970cf5b779a5a69502cb07fd94d9190bccfdJoe Fernandez * you call {@link #stopManagingCursor} on a cursor from a managed query, the system <em>will 16788ef6970cf5b779a5a69502cb07fd94d9190bccfdJoe Fernandez * not</em> automatically close the cursor and, in that case, you must call 16798ef6970cf5b779a5a69502cb07fd94d9190bccfdJoe Fernandez * {@link Cursor#close()}.</p> 16808ef6970cf5b779a5a69502cb07fd94d9190bccfdJoe Fernandez * 16819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param uri The URI of the content provider to query. 16829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param projection List of columns to return. 16839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param selection SQL WHERE clause. 16849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param sortOrder SQL ORDER BY clause. 16859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 16869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The Cursor that was returned by query(). 16879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 16889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see ContentResolver#query(android.net.Uri , String[], String, String[], String) 16899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startManagingCursor 16909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 16916ed50de6d1e5e27d11304cce226fefeee3105bd7Jason parks * 16926ed50de6d1e5e27d11304cce226fefeee3105bd7Jason parks * @deprecated Use {@link CursorLoader} instead. 16939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16946ed50de6d1e5e27d11304cce226fefeee3105bd7Jason parks @Deprecated 1695291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn public final Cursor managedQuery(Uri uri, String[] projection, String selection, 1696291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn String sortOrder) { 16979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Cursor c = getContentResolver().query(uri, projection, selection, null, sortOrder); 16989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (c != null) { 16999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startManagingCursor(c); 17009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return c; 17029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Wrapper around 17069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link ContentResolver#query(android.net.Uri , String[], String, String[], String)} 17079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that gives the resulting {@link Cursor} to call 17089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #startManagingCursor} so that the activity will manage its 17099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * lifecycle for you. 17109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1711291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <em>If you are targeting {@link android.os.Build.VERSION_CODES#HONEYCOMB} 1712291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * or later, consider instead using {@link LoaderManager} instead, available 1713291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * via {@link #getLoaderManager()}.</em> 1714291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 17158ef6970cf5b779a5a69502cb07fd94d9190bccfdJoe Fernandez * <p><strong>Warning:</strong> Do not call {@link Cursor#close()} on a cursor obtained using 17168ef6970cf5b779a5a69502cb07fd94d9190bccfdJoe Fernandez * this method, because the activity will do that for you at the appropriate time. However, if 17178ef6970cf5b779a5a69502cb07fd94d9190bccfdJoe Fernandez * you call {@link #stopManagingCursor} on a cursor from a managed query, the system <em>will 17188ef6970cf5b779a5a69502cb07fd94d9190bccfdJoe Fernandez * not</em> automatically close the cursor and, in that case, you must call 17198ef6970cf5b779a5a69502cb07fd94d9190bccfdJoe Fernandez * {@link Cursor#close()}.</p> 17208ef6970cf5b779a5a69502cb07fd94d9190bccfdJoe Fernandez * 17219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param uri The URI of the content provider to query. 17229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param projection List of columns to return. 17239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param selection SQL WHERE clause. 17249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param selectionArgs The arguments to selection, if any ?s are pesent 17259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param sortOrder SQL ORDER BY clause. 17269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The Cursor that was returned by query(). 17289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see ContentResolver#query(android.net.Uri , String[], String, String[], String) 17309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startManagingCursor 17316ed50de6d1e5e27d11304cce226fefeee3105bd7Jason parks * 17326ed50de6d1e5e27d11304cce226fefeee3105bd7Jason parks * @deprecated Use {@link CursorLoader} instead. 17339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17346ed50de6d1e5e27d11304cce226fefeee3105bd7Jason parks @Deprecated 1735291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn public final Cursor managedQuery(Uri uri, String[] projection, String selection, 1736291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn String[] selectionArgs, String sortOrder) { 17379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Cursor c = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder); 17389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (c != null) { 17399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startManagingCursor(c); 17409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return c; 17429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This method allows the activity to take care of managing the given 17469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Cursor}'s lifecycle for you based on the activity's lifecycle. 17479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * That is, when the activity is stopped it will automatically call 17489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Cursor#deactivate} on the given Cursor, and when it is later restarted 17499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it will call {@link Cursor#requery} for you. When the activity is 17509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * destroyed, all managed Cursors will be closed automatically. 17519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1752291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <em>If you are targeting {@link android.os.Build.VERSION_CODES#HONEYCOMB} 1753291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * or later, consider instead using {@link LoaderManager} instead, available 1754291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * via {@link #getLoaderManager()}.</em> 1755291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 17568ef6970cf5b779a5a69502cb07fd94d9190bccfdJoe Fernandez * <p><strong>Warning:</strong> Do not call {@link Cursor#close()} on cursor obtained from 17578ef6970cf5b779a5a69502cb07fd94d9190bccfdJoe Fernandez * {@link #managedQuery}, because the activity will do that for you at the appropriate time. 17588ef6970cf5b779a5a69502cb07fd94d9190bccfdJoe Fernandez * However, if you call {@link #stopManagingCursor} on a cursor from a managed query, the system 17598ef6970cf5b779a5a69502cb07fd94d9190bccfdJoe Fernandez * <em>will not</em> automatically close the cursor and, in that case, you must call 17608ef6970cf5b779a5a69502cb07fd94d9190bccfdJoe Fernandez * {@link Cursor#close()}.</p> 17618ef6970cf5b779a5a69502cb07fd94d9190bccfdJoe Fernandez * 17629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param c The Cursor to be managed. 17639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #managedQuery(android.net.Uri , String[], String, String[], String) 17659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #stopManagingCursor 1766271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * 1767271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * @deprecated Use the new {@link android.content.CursorLoader} class with 1768271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * {@link LoaderManager} instead; this is also 1769271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * available on older platforms through the Android compatibility package. 17709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17716ed50de6d1e5e27d11304cce226fefeee3105bd7Jason parks @Deprecated 17729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void startManagingCursor(Cursor c) { 17739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mManagedCursors) { 17749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mManagedCursors.add(new ManagedCursor(c)); 17759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Given a Cursor that was previously given to 17809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #startManagingCursor}, stop the activity's management of that 17819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * cursor. 17829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17838ef6970cf5b779a5a69502cb07fd94d9190bccfdJoe Fernandez * <p><strong>Warning:</strong> After calling this method on a cursor from a managed query, 17848ef6970cf5b779a5a69502cb07fd94d9190bccfdJoe Fernandez * the system <em>will not</em> automatically close the cursor and you must call 17858ef6970cf5b779a5a69502cb07fd94d9190bccfdJoe Fernandez * {@link Cursor#close()}.</p> 17868ef6970cf5b779a5a69502cb07fd94d9190bccfdJoe Fernandez * 17879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param c The Cursor that was being managed. 17889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startManagingCursor 1790271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * 1791271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * @deprecated Use the new {@link android.content.CursorLoader} class with 1792271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * {@link LoaderManager} instead; this is also 1793271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * available on older platforms through the Android compatibility package. 17949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17956ed50de6d1e5e27d11304cce226fefeee3105bd7Jason parks @Deprecated 17969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void stopManagingCursor(Cursor c) { 17979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mManagedCursors) { 17989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int N = mManagedCursors.size(); 17999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i=0; i<N; i++) { 18009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ManagedCursor mc = mManagedCursors.get(i); 18019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mc.mCursor == c) { 18029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mManagedCursors.remove(i); 18039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 18049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18103c4c2b7e6f0674068d13b42d4dcf0fd009df0c49Dianne Hackborn * @deprecated As of {@link android.os.Build.VERSION_CODES#GINGERBREAD} 18113c4c2b7e6f0674068d13b42d4dcf0fd009df0c49Dianne Hackborn * this is a no-op. 18124f3867e3ce92101224ad79b8f2ff446bb4f99108Dianne Hackborn * @hide 18139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1814d3efa3924407da6d38aa5931ac29aa088d9eb986Dianne Hackborn @Deprecated 18159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setPersistent(boolean isPersistent) { 18169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Finds a view that was identified by the id attribute from the XML that 18209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * was processed in {@link #onCreate}. 18219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 18229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The view if found or null otherwise. 18239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public View findViewById(int id) { 18259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getWindow().findViewById(id); 18269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 182733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell 182833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell /** 182933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * Retrieve a reference to this activity's ActionBar. 183042c0fe86521af507f597af6159f63879cb5be73eAdam Powell * 183133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * @return The Activity's ActionBar, or null if it does not have one. 183233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell */ 183333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell public ActionBar getActionBar() { 183442c0fe86521af507f597af6159f63879cb5be73eAdam Powell initActionBar(); 183533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell return mActionBar; 183633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell } 183733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell 18389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 183933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * Creates a new ActionBar, locates the inflated ActionBarView, 184033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * initializes the ActionBar with the view, and sets mActionBar. 184133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell */ 184233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell private void initActionBar() { 184389e0645b4157961e8c465eb9c819f965fdb453d8Adam Powell Window window = getWindow(); 1844a593d9852f3807305763c3f1fe1ac5c59f1fef92Adam Powell 1845a593d9852f3807305763c3f1fe1ac5c59f1fef92Adam Powell // Initializing the window decor can change window feature flags. 1846a593d9852f3807305763c3f1fe1ac5c59f1fef92Adam Powell // Make sure that we have the correct set before performing the test below. 1847a593d9852f3807305763c3f1fe1ac5c59f1fef92Adam Powell window.getDecorView(); 1848a593d9852f3807305763c3f1fe1ac5c59f1fef92Adam Powell 18499b4c804b9856d732e461bc7505d40aa4ea1f7bf7Adam Powell if (isChild() || !window.hasFeature(Window.FEATURE_ACTION_BAR) || mActionBar != null) { 185033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell return; 185133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell } 185233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell 1853661c908e4e26c99adc2cab7558a02129eaee059dAdam Powell mActionBar = new ActionBarImpl(this); 1854dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell mActionBar.setDefaultDisplayHomeAsUpEnabled(mEnableDefaultActionBarUp); 185533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell } 185633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell 185733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell /** 18589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the activity content from a layout resource. The resource will be 18599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * inflated, adding all top-level views to the activity. 1860482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * 18619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param layoutResID Resource ID to be inflated. 1862482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * 1863482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * @see #setContentView(android.view.View) 1864482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * @see #setContentView(android.view.View, android.view.ViewGroup.LayoutParams) 18659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setContentView(int layoutResID) { 18679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setContentView(layoutResID); 186833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell initActionBar(); 18699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the activity content to an explicit view. This view is placed 18739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * directly into the activity's view hierarchy. It can itself be a complex 1874482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * view hierarchy. When calling this method, the layout parameters of the 1875482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * specified view are ignored. Both the width and the height of the view are 1876482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * set by default to {@link ViewGroup.LayoutParams#MATCH_PARENT}. To use 1877482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * your own layout parameters, invoke 1878482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * {@link #setContentView(android.view.View, android.view.ViewGroup.LayoutParams)} 1879482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * instead. 18809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 18819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The desired content to display. 1882482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * 1883482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * @see #setContentView(int) 1884482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * @see #setContentView(android.view.View, android.view.ViewGroup.LayoutParams) 18859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setContentView(View view) { 18879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setContentView(view); 188833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell initActionBar(); 18899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the activity content to an explicit view. This view is placed 18939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * directly into the activity's view hierarchy. It can itself be a complex 1894482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * view hierarchy. 18959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 18969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The desired content to display. 18979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param params Layout parameters for the view. 1898482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * 1899482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * @see #setContentView(android.view.View) 1900482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * @see #setContentView(int) 19019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setContentView(View view, ViewGroup.LayoutParams params) { 19039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setContentView(view, params); 190433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell initActionBar(); 19059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 19089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Add an additional content view to the activity. Added after any existing 19099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ones in the activity -- existing views are NOT removed. 19109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The desired content to display. 19129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param params Layout parameters for the view. 19139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void addContentView(View view, ViewGroup.LayoutParams params) { 19159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().addContentView(view, params); 191633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell initActionBar(); 19179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1920cfaf8878de83b6bb7a24aee3c240259f428e6e4aDianne Hackborn * Sets whether this activity is finished when touched outside its window's 1921cfaf8878de83b6bb7a24aee3c240259f428e6e4aDianne Hackborn * bounds. 1922cfaf8878de83b6bb7a24aee3c240259f428e6e4aDianne Hackborn */ 1923cfaf8878de83b6bb7a24aee3c240259f428e6e4aDianne Hackborn public void setFinishOnTouchOutside(boolean finish) { 1924cfaf8878de83b6bb7a24aee3c240259f428e6e4aDianne Hackborn mWindow.setCloseOnTouchOutside(finish); 1925cfaf8878de83b6bb7a24aee3c240259f428e6e4aDianne Hackborn } 1926cfaf8878de83b6bb7a24aee3c240259f428e6e4aDianne Hackborn 1927cfaf8878de83b6bb7a24aee3c240259f428e6e4aDianne Hackborn /** 19289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setDefaultKeyMode} to turn off default handling of 19299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * keys. 19309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setDefaultKeyMode 19329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public final int DEFAULT_KEYS_DISABLE = 0; 19349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 19359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setDefaultKeyMode} to launch the dialer during default 19369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * key handling. 19379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setDefaultKeyMode 19399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public final int DEFAULT_KEYS_DIALER = 1; 19419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 19429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setDefaultKeyMode} to execute a menu shortcut in 19439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * default key handling. 19449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>That is, the user does not need to hold down the menu key to execute menu shortcuts. 19469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setDefaultKeyMode 19489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public final int DEFAULT_KEYS_SHORTCUT = 2; 19509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 19519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setDefaultKeyMode} to specify that unhandled keystrokes 19529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will start an application-defined search. (If the application or activity does not 19539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * actually define a search, the the keys will be ignored.) 19549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>See {@link android.app.SearchManager android.app.SearchManager} for more details. 19569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setDefaultKeyMode 19589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public final int DEFAULT_KEYS_SEARCH_LOCAL = 3; 19609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 19629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setDefaultKeyMode} to specify that unhandled keystrokes 19639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will start a global search (typically web search, but some platforms may define alternate 19649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * methods for global search) 19659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>See {@link android.app.SearchManager android.app.SearchManager} for more details. 19679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setDefaultKeyMode 19699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public final int DEFAULT_KEYS_SEARCH_GLOBAL = 4; 19719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 19739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Select the default key handling for this activity. This controls what 19749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will happen to key events that are not otherwise handled. The default 19759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * mode ({@link #DEFAULT_KEYS_DISABLE}) will simply drop them on the 19769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * floor. Other modes allow you to launch the dialer 19779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ({@link #DEFAULT_KEYS_DIALER}), execute a shortcut in your options 19789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * menu without requiring the menu key be held down 19799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ({@link #DEFAULT_KEYS_SHORTCUT}), or launch a search ({@link #DEFAULT_KEYS_SEARCH_LOCAL} 19809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and {@link #DEFAULT_KEYS_SEARCH_GLOBAL}). 19819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note that the mode selected here does not impact the default 19839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * handling of system keys, such as the "back" and "menu" keys, and your 19849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity and its views always get a first chance to receive and handle 19859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * all application keys. 19869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param mode The desired default key mode constant. 19889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #DEFAULT_KEYS_DISABLE 19909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #DEFAULT_KEYS_DIALER 19919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #DEFAULT_KEYS_SHORTCUT 19929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #DEFAULT_KEYS_SEARCH_LOCAL 19939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #DEFAULT_KEYS_SEARCH_GLOBAL 19949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onKeyDown 19959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setDefaultKeyMode(int mode) { 19979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDefaultKeyMode = mode; 19989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Some modes use a SpannableStringBuilder to track & dispatch input events 20009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // This list must remain in sync with the switch in onKeyDown() 20019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (mode) { 20029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEFAULT_KEYS_DISABLE: 20039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEFAULT_KEYS_SHORTCUT: 20049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDefaultKeySsb = null; // not used in these modes 20059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 20069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEFAULT_KEYS_DIALER: 20079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEFAULT_KEYS_SEARCH_LOCAL: 20089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEFAULT_KEYS_SEARCH_GLOBAL: 20099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDefaultKeySsb = new SpannableStringBuilder(); 20109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Selection.setSelection(mDefaultKeySsb,0); 20119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 20129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 20139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException(); 20149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 20179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 20189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when a key was pressed down and not handled by any of the views 20199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * inside of the activity. So, for example, key presses while the cursor 20209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is inside a TextView will not trigger the event (unless it is a navigation 20219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to another object) because TextView handles its own key presses. 20229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 20239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>If the focused view didn't want this event, this method is called. 20249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 20258d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * <p>The default implementation takes care of {@link KeyEvent#KEYCODE_BACK} 20268d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * by calling {@link #onBackPressed()}, though the behavior varies based 20278d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * on the application compatibility mode: for 20288d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * {@link android.os.Build.VERSION_CODES#ECLAIR} or later applications, 20298d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * it will set up the dispatch to call {@link #onKeyUp} where the action 20308d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * will be performed; for earlier applications, it will perform the 20318d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * action immediately in on-down, as those versions of the platform 20328d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * behaved. 20338d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * 20348d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * <p>Other additional default key handling may be performed 203583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * if configured with {@link #setDefaultKeyMode}. 20369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 20379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Return <code>true</code> to prevent this event from being propagated 20389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * further, or <code>false</code> to indicate that you have not handled 20399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this event and it should continue to be propagated. 20409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onKeyUp 20419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.KeyEvent 20429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 20439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onKeyDown(int keyCode, KeyEvent event) { 204483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn if (keyCode == KeyEvent.KEYCODE_BACK) { 20458d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (getApplicationInfo().targetSdkVersion 20468d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn >= Build.VERSION_CODES.ECLAIR) { 20478d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn event.startTracking(); 20488d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn } else { 20498d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn onBackPressed(); 20508d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn } 20519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 20529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 20549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mDefaultKeyMode == DEFAULT_KEYS_DISABLE) { 20559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 20569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (mDefaultKeyMode == DEFAULT_KEYS_SHORTCUT) { 205783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn if (getWindow().performPanelShortcut(Window.FEATURE_OPTIONS_PANEL, 205883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn keyCode, event, Menu.FLAG_ALWAYS_PERFORM_CLOSE)) { 205983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn return true; 206083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 206183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn return false; 20629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 20639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Common code for DEFAULT_KEYS_DIALER & DEFAULT_KEYS_SEARCH_* 20649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean clearSpannable = false; 20659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean handled; 20669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((event.getRepeatCount() != 0) || event.isSystem()) { 20679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project clearSpannable = true; 20689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project handled = false; 20699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 207083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn handled = TextKeyListener.getInstance().onKeyDown( 207183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn null, mDefaultKeySsb, keyCode, event); 20729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (handled && mDefaultKeySsb.length() > 0) { 20739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // something useable has been typed - dispatch it now. 20749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 20759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final String str = mDefaultKeySsb.toString(); 20769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project clearSpannable = true; 20779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 20789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (mDefaultKeyMode) { 20799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEFAULT_KEYS_DIALER: 20809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + str)); 20819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 20829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startActivity(intent); 20839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 20849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEFAULT_KEYS_SEARCH_LOCAL: 20859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startSearch(str, false, null, false); 20869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 20879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEFAULT_KEYS_SEARCH_GLOBAL: 20889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startSearch(str, false, null, true); 20899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 20909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (clearSpannable) { 20949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDefaultKeySsb.clear(); 20959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDefaultKeySsb.clearSpans(); 20969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Selection.setSelection(mDefaultKeySsb,0); 20979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return handled; 20999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 210383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Default implementation of {@link KeyEvent.Callback#onKeyLongPress(int, KeyEvent) 210483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * KeyEvent.Callback.onKeyLongPress()}: always returns false (doesn't handle 210583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * the event). 210683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 210783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public boolean onKeyLongPress(int keyCode, KeyEvent event) { 210883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn return false; 210983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 211083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn 211183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 21129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when a key was released and not handled by any of the views 21139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * inside of the activity. So, for example, key presses while the cursor 21149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is inside a TextView will not trigger the event (unless it is a navigation 21159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to another object) because TextView handles its own key presses. 21169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 211783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * <p>The default implementation handles KEYCODE_BACK to stop the activity 211883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * and go back. 211983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * 21209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Return <code>true</code> to prevent this event from being propagated 21219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * further, or <code>false</code> to indicate that you have not handled 21229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this event and it should continue to be propagated. 21239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onKeyDown 21249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see KeyEvent 21259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 21269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onKeyUp(int keyCode, KeyEvent event) { 21278d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (getApplicationInfo().targetSdkVersion 21288d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn >= Build.VERSION_CODES.ECLAIR) { 21298d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking() 21308d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn && !event.isCanceled()) { 21318d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn onBackPressed(); 21328d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn return true; 21338d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn } 213483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 21359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 21369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 21399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Default implementation of {@link KeyEvent.Callback#onKeyMultiple(int, int, KeyEvent) 21409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * KeyEvent.Callback.onKeyMultiple()}: always returns false (doesn't handle 21419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the event). 21429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 21439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) { 21449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 21459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 214883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Called when the activity has detected the user's press of the back 214983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * key. The default implementation simply finishes the current activity, 215083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * but you can override this to do whatever you want. 215183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 215283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public void onBackPressed() { 21533a57fb9e9c4f205ca6bd4f036b3080f92588d16dDianne Hackborn if (!mFragments.popBackStackImmediate()) { 2154ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn finish(); 2155ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 215683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 215764da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown 215864da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown /** 215964da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * Called when a key shortcut event is not handled by any of the views in the Activity. 216064da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * Override this method to implement global key shortcuts for the Activity. 216164da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * Key shortcuts can also be implemented by setting the 216264da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * {@link MenuItem#setShortcut(char, char) shortcut} property of menu items. 216364da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * 216464da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * @param keyCode The value in event.getKeyCode(). 216564da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * @param event Description of the key event. 216664da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * @return True if the key shortcut was handled. 216764da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown */ 216864da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown public boolean onKeyShortcut(int keyCode, KeyEvent event) { 216964da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown return false; 217064da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown } 217164da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown 217283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 21739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when a touch screen event was not handled by any of the views 21749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * under it. This is most useful to process touch events that happen 21759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * outside of your window bounds, where there is no view to receive it. 21769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 21779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param event The touch screen event being processed. 21789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 21799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Return true if you have consumed the event, false if you haven't. 21809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default implementation always returns false. 21819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 21829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onTouchEvent(MotionEvent event) { 2183cfaf8878de83b6bb7a24aee3c240259f428e6e4aDianne Hackborn if (mWindow.shouldCloseOnTouch(this, event)) { 2184cfaf8878de83b6bb7a24aee3c240259f428e6e4aDianne Hackborn finish(); 2185cfaf8878de83b6bb7a24aee3c240259f428e6e4aDianne Hackborn return true; 2186cfaf8878de83b6bb7a24aee3c240259f428e6e4aDianne Hackborn } 2187cfaf8878de83b6bb7a24aee3c240259f428e6e4aDianne Hackborn 21889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 21899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 21929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when the trackball was moved and not handled by any of the 21939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * views inside of the activity. So, for example, if the trackball moves 21949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * while focus is on a button, you will receive a call here because 21959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * buttons do not normally do anything with trackball events. The call 21969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * here happens <em>before</em> trackball movements are converted to 21979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * DPAD key events, which then get sent back to the view hierarchy, and 21989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will be processed at the point for things like focus navigation. 21999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param event The trackball event being processed. 22019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Return true if you have consumed the event, false if you haven't. 22039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default implementation always returns false. 22049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 22059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onTrackballEvent(MotionEvent event) { 22069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 22079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2208cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 2209cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** 2210cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * Called when a generic motion event was not handled by any of the 2211cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * views inside of the activity. 2212cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * <p> 221333bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown * Generic motion events describe joystick movements, mouse hovers, track pad 221433bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown * touches, scroll wheel movements and other input events. The 2215cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * {@link MotionEvent#getSource() source} of the motion event specifies 2216cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * the class of input that was received. Implementations of this method 2217cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * must examine the bits in the source before processing the event. 2218cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * The following code example shows how this is done. 221933bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown * </p><p> 222033bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown * Generic motion events with source class 222133bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown * {@link android.view.InputDevice#SOURCE_CLASS_POINTER} 222233bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown * are delivered to the view under the pointer. All other generic motion events are 222333bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown * delivered to the focused view. 222433bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown * </p><p> 222533bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown * See {@link View#onGenericMotionEvent(MotionEvent)} for an example of how to 222633bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown * handle this event. 2227cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * </p> 2228cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 2229cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * @param event The generic motion event being processed. 2230cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 2231cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * @return Return true if you have consumed the event, false if you haven't. 2232cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * The default implementation always returns false. 2233cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown */ 2234cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public boolean onGenericMotionEvent(MotionEvent event) { 2235cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown return false; 2236cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown } 2237cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 22389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 22399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called whenever a key, touch, or trackball event is dispatched to the 22409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity. Implement this method if you wish to know that the user has 22419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * interacted with the device in some way while your activity is running. 22429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This callback and {@link #onUserLeaveHint} are intended to help 22439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activities manage status bar notifications intelligently; specifically, 22449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for helping activities determine the proper time to cancel a notfication. 22459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>All calls to your activity's {@link #onUserLeaveHint} callback will 22479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be accompanied by calls to {@link #onUserInteraction}. This 22489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ensures that your activity will be told of relevant user activity such 22499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as pulling down the notification pane and touching an item there. 22509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note that this callback will be invoked for the touch down action 22529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that begins a touch gesture, but may not be invoked for the touch-moved 22539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and touch-up actions that follow. 22549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onUserLeaveHint() 22569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 22579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onUserInteraction() { 22589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onWindowAttributesChanged(WindowManager.LayoutParams params) { 22619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Update window manager if: we have a view, that view is 22629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // attached to its parent (which will be a RootView), and 22639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // this activity is not embedded. 22649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 22659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project View decor = mDecor; 22669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (decor != null && decor.getParent() != null) { 22679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindowManager().updateViewLayout(decor, params); 22689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onContentChanged() { 22739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 22769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when the current {@link Window} of the activity gains or loses 22779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * focus. This is the best indicator of whether this activity is visible 227883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * to the user. The default implementation clears the key tracking 227983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * state, so should always be called. 22809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 228183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * <p>Note that this provides information about global focus state, which 22829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is managed independently of activity lifecycles. As such, while focus 22839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * changes will generally have some relation to lifecycle changes (an 22849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity that is stopped will not generally get window focus), you 22859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * should not rely on any particular order between the callbacks here and 22869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * those in the other lifecycle methods such as {@link #onResume}. 22879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>As a general rule, however, a resumed activity will have window 22899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * focus... unless it has displayed other dialogs or popups that take 22909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * input focus, in which case the activity itself will not have focus 22919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * when the other windows have it. Likewise, the system may display 22929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * system-level windows (such as the status bar notification panel or 22939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a system alert) which will temporarily take window input focus without 22949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * pausing the foreground activity. 22959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param hasFocus Whether the window of this activity has focus. 22979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #hasWindowFocus() 22999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onResume 23003be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * @see View#onWindowFocusChanged(boolean) 23019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 23029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onWindowFocusChanged(boolean hasFocus) { 23039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 23063be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * Called when the main window associated with the activity has been 23073be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * attached to the window manager. 23083be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * See {@link View#onAttachedToWindow() View.onAttachedToWindow()} 23093be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * for more information. 23103be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * @see View#onAttachedToWindow 23113be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn */ 23123be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn public void onAttachedToWindow() { 23133be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn } 23143be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn 23153be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn /** 23163be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * Called when the main window associated with the activity has been 23173be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * detached from the window manager. 23183be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * See {@link View#onDetachedFromWindow() View.onDetachedFromWindow()} 23193be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * for more information. 23203be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * @see View#onDetachedFromWindow 23213be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn */ 23223be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn public void onDetachedFromWindow() { 23233be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn } 23243be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn 23253be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn /** 23269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true if this activity's <em>main</em> window currently has window focus. 23279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Note that this is not the same as the view itself having focus. 23289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 23299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return True if this activity's main window currently has window focus. 23309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 23319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onWindowAttributesChanged(android.view.WindowManager.LayoutParams) 23329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 23339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean hasWindowFocus() { 23349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Window w = getWindow(); 23359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (w != null) { 23369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project View d = w.getDecorView(); 23379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (d != null) { 23389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return d.hasWindowFocus(); 23399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 23429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 23459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called to process key events. You can override this to intercept all 23469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * key events before they are dispatched to the window. Be sure to call 23479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this implementation for key events that should be handled normally. 23489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 23499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param event The key event. 23509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 23519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return boolean Return true if this event was consumed. 23529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 23539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean dispatchKeyEvent(KeyEvent event) { 23549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onUserInteraction(); 23558d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn Window win = getWindow(); 23568d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (win.superDispatchKeyEvent(event)) { 23579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 23589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23598d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn View decor = mDecor; 23608d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (decor == null) decor = win.getDecorView(); 23618d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn return event.dispatch(this, decor != null 23628d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn ? decor.getKeyDispatcherState() : null, this); 23639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 236664da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * Called to process a key shortcut event. 236764da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * You can override this to intercept all key shortcut events before they are 236864da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * dispatched to the window. Be sure to call this implementation for key shortcut 236964da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * events that should be handled normally. 237064da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * 237164da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * @param event The key shortcut event. 237264da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * @return True if this event was consumed. 237364da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown */ 237464da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown public boolean dispatchKeyShortcutEvent(KeyEvent event) { 237564da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown onUserInteraction(); 237664da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown if (getWindow().superDispatchKeyShortcutEvent(event)) { 237764da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown return true; 237864da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown } 237964da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown return onKeyShortcut(event.getKeyCode(), event); 238064da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown } 238164da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown 238264da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown /** 23839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called to process touch screen events. You can override this to 23849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * intercept all touch screen events before they are dispatched to the 23859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * window. Be sure to call this implementation for touch screen events 23869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that should be handled normally. 23879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 23889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param ev The touch screen event. 23899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 23909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return boolean Return true if this event was consumed. 23919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 23929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean dispatchTouchEvent(MotionEvent ev) { 23939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ev.getAction() == MotionEvent.ACTION_DOWN) { 23949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onUserInteraction(); 23959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (getWindow().superDispatchTouchEvent(ev)) { 23979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 23989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return onTouchEvent(ev); 24009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 24039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called to process trackball events. You can override this to 24049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * intercept all trackball events before they are dispatched to the 24059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * window. Be sure to call this implementation for trackball events 24069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that should be handled normally. 24079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 24089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param ev The trackball event. 24099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 24109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return boolean Return true if this event was consumed. 24119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 24129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean dispatchTrackballEvent(MotionEvent ev) { 24139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onUserInteraction(); 24149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (getWindow().superDispatchTrackballEvent(ev)) { 24159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 24169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return onTrackballEvent(ev); 24189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 241975986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov 2420cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** 2421cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * Called to process generic motion events. You can override this to 2422cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * intercept all generic motion events before they are dispatched to the 2423cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * window. Be sure to call this implementation for generic motion events 2424cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * that should be handled normally. 2425cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 2426cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * @param ev The generic motion event. 2427cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 2428cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * @return boolean Return true if this event was consumed. 2429cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown */ 2430cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public boolean dispatchGenericMotionEvent(MotionEvent ev) { 2431cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown onUserInteraction(); 2432cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown if (getWindow().superDispatchGenericMotionEvent(ev)) { 2433cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown return true; 2434cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown } 2435cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown return onGenericMotionEvent(ev); 2436cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown } 2437cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 243875986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { 243975986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov event.setClassName(getClass().getName()); 244075986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov event.setPackageName(getPackageName()); 244175986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov 244275986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov LayoutParams params = getWindow().getAttributes(); 2443980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy boolean isFullScreen = (params.width == LayoutParams.MATCH_PARENT) && 2444980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy (params.height == LayoutParams.MATCH_PARENT); 244575986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov event.setFullScreen(isFullScreen); 244675986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov 244775986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov CharSequence title = getTitle(); 244875986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov if (!TextUtils.isEmpty(title)) { 244975986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov event.getText().add(title); 245075986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov } 245175986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov 245275986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov return true; 245375986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov } 245475986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov 24559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 24569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Default implementation of 24579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window.Callback#onCreatePanelView} 24589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for activities. This 24599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * simply returns null so that all panel sub-windows will have the default 24609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * menu behavior. 24619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 24629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public View onCreatePanelView(int featureId) { 24639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 24649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 24679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Default implementation of 24689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window.Callback#onCreatePanelMenu} 24699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for activities. This calls through to the new 24709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onCreateOptionsMenu} method for the 24719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#FEATURE_OPTIONS_PANEL} panel, 24729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * so that subclasses of Activity don't need to deal with feature codes. 24739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 24749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onCreatePanelMenu(int featureId, Menu menu) { 24759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (featureId == Window.FEATURE_OPTIONS_PANEL) { 2476b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn boolean show = onCreateOptionsMenu(menu); 2477b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn show |= mFragments.dispatchCreateOptionsMenu(menu, getMenuInflater()); 2478b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn return show; 24799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 24819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 24849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Default implementation of 24859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window.Callback#onPreparePanel} 24869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for activities. This 24879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * calls through to the new {@link #onPrepareOptionsMenu} method for the 24889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#FEATURE_OPTIONS_PANEL} 24899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * panel, so that subclasses of 24909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Activity don't need to deal with feature codes. 24919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 24929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onPreparePanel(int featureId, View view, Menu menu) { 24939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (featureId == Window.FEATURE_OPTIONS_PANEL && menu != null) { 24949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean goforit = onPrepareOptionsMenu(menu); 2495b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn goforit |= mFragments.dispatchPrepareOptionsMenu(menu); 2496ef31e7cab57c82083c41adf2d2a056ab159a4f51Adam Powell return goforit; 24979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 24999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 25029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 25039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The default implementation returns true. 25059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 25069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onMenuOpened(int featureId, Menu menu) { 25078515ee846bd76aee86ec5ddfcc4dd1e626dd999cAdam Powell if (featureId == Window.FEATURE_ACTION_BAR) { 2508763cbb134f40fa1e555c0a945a2a651f69193505Adam Powell initActionBar(); 2509049dd3d4a4869e0c65d370e2538fcfb55bacef52Adam Powell if (mActionBar != null) { 2510049dd3d4a4869e0c65d370e2538fcfb55bacef52Adam Powell mActionBar.dispatchMenuVisibilityChanged(true); 2511049dd3d4a4869e0c65d370e2538fcfb55bacef52Adam Powell } else { 2512049dd3d4a4869e0c65d370e2538fcfb55bacef52Adam Powell Log.e(TAG, "Tried to open action bar menu with no action bar"); 2513049dd3d4a4869e0c65d370e2538fcfb55bacef52Adam Powell } 25148515ee846bd76aee86ec5ddfcc4dd1e626dd999cAdam Powell } 25159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 25169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 25199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Default implementation of 25209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window.Callback#onMenuItemSelected} 25219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for activities. This calls through to the new 25229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onOptionsItemSelected} method for the 25239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#FEATURE_OPTIONS_PANEL} 25249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * panel, so that subclasses of 25259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Activity don't need to deal with feature codes. 25269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 25279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onMenuItemSelected(int featureId, MenuItem item) { 25289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (featureId) { 25299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case Window.FEATURE_OPTIONS_PANEL: 25309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Put event logging here so it gets called even if subclass 25319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // doesn't call through to superclass's implmeentation of each 25329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // of these methods below 25339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EventLog.writeEvent(50000, 0, item.getTitleCondensed()); 2534b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn if (onOptionsItemSelected(item)) { 2535b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn return true; 2536b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 253704d5811500874d44010df2b4ce37a0b21095168fAdam Powell if (mFragments.dispatchOptionsItemSelected(item)) { 253804d5811500874d44010df2b4ce37a0b21095168fAdam Powell return true; 253904d5811500874d44010df2b4ce37a0b21095168fAdam Powell } 254004d5811500874d44010df2b4ce37a0b21095168fAdam Powell if (item.getItemId() == android.R.id.home && mActionBar != null && 254104d5811500874d44010df2b4ce37a0b21095168fAdam Powell (mActionBar.getDisplayOptions() & ActionBar.DISPLAY_HOME_AS_UP) != 0) { 254204d5811500874d44010df2b4ce37a0b21095168fAdam Powell if (mParent == null) { 254307304f5299c6bccf84bd993239fbb3b87a0d46e6Adam Powell return onNavigateUp(); 254404d5811500874d44010df2b4ce37a0b21095168fAdam Powell } else { 254507304f5299c6bccf84bd993239fbb3b87a0d46e6Adam Powell return mParent.onNavigateUpFromChild(this); 254604d5811500874d44010df2b4ce37a0b21095168fAdam Powell } 254704d5811500874d44010df2b4ce37a0b21095168fAdam Powell } 254804d5811500874d44010df2b4ce37a0b21095168fAdam Powell return false; 25499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case Window.FEATURE_CONTEXT_MENU: 25519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EventLog.writeEvent(50000, 1, item.getTitleCondensed()); 25525ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn if (onContextItemSelected(item)) { 25535ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn return true; 25545ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn } 25555ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn return mFragments.dispatchContextItemSelected(item); 25568515ee846bd76aee86ec5ddfcc4dd1e626dd999cAdam Powell 25579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 25589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 25599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 25639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Default implementation of 25649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window.Callback#onPanelClosed(int, Menu)} for 25659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activities. This calls through to {@link #onOptionsMenuClosed(Menu)} 25669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * method for the {@link android.view.Window#FEATURE_OPTIONS_PANEL} panel, 25679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * so that subclasses of Activity don't need to deal with feature codes. 25689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * For context menus ({@link Window#FEATURE_CONTEXT_MENU}), the 25699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onContextMenuClosed(Menu)} will be called. 25709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 25719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onPanelClosed(int featureId, Menu menu) { 25729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (featureId) { 25739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case Window.FEATURE_OPTIONS_PANEL: 2574b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn mFragments.dispatchOptionsMenuClosed(menu); 25759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onOptionsMenuClosed(menu); 25769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 25779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case Window.FEATURE_CONTEXT_MENU: 25799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onContextMenuClosed(menu); 25809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 25818515ee846bd76aee86ec5ddfcc4dd1e626dd999cAdam Powell 25828515ee846bd76aee86ec5ddfcc4dd1e626dd999cAdam Powell case Window.FEATURE_ACTION_BAR: 25839b4bee0f14bbd137b0797127aff2df46a6321ec5Adam Powell initActionBar(); 25848515ee846bd76aee86ec5ddfcc4dd1e626dd999cAdam Powell mActionBar.dispatchMenuVisibilityChanged(false); 25858515ee846bd76aee86ec5ddfcc4dd1e626dd999cAdam Powell break; 25869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2590b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * Declare that the options menu has changed, so should be recreated. 2591b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * The {@link #onCreateOptionsMenu(Menu)} method will be called the next 2592b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * time it needs to be displayed. 2593b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn */ 2594b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn public void invalidateOptionsMenu() { 2595b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn mWindow.invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL); 2596b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 2597b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn 2598b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn /** 25999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Initialize the contents of the Activity's standard options menu. You 26009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * should place your menu items in to <var>menu</var>. 26019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This is only called once, the first time the options menu is 26039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * displayed. To update the menu every time it is displayed, see 26049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onPrepareOptionsMenu}. 26059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The default implementation populates the menu with standard system 26079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * menu items. These are placed in the {@link Menu#CATEGORY_SYSTEM} group so that 26089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * they will be correctly ordered with application-defined menu items. 26099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Deriving classes should always call through to the base implementation. 26109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>You can safely hold on to <var>menu</var> (and any items created 26129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from it), making modifications to it as desired, until the next 26139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * time onCreateOptionsMenu() is called. 26149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>When you add items to the menu, you can implement the Activity's 26169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onOptionsItemSelected} method to handle them there. 26179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param menu The options menu in which you place your items. 26199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return You must return true for the menu to be displayed; 26219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if you return false it will not be shown. 26229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPrepareOptionsMenu 26249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onOptionsItemSelected 26259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 26269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onCreateOptionsMenu(Menu menu) { 26279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent != null) { 26289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParent.onCreateOptionsMenu(menu); 26299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 26319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 26339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 26349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Prepare the Screen's standard options menu to be displayed. This is 26359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * called right before the menu is shown, every time it is shown. You can 26369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * use this method to efficiently enable/disable items or otherwise 26379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * dynamically modify the contents. 26389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The default implementation updates the system menu items based on the 26409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity's state. Deriving classes should always call through to the 26419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * base class implementation. 26429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param menu The options menu as last shown or first initialized by 26449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onCreateOptionsMenu(). 26459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return You must return true for the menu to be displayed; 26479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if you return false it will not be shown. 26489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onCreateOptionsMenu 26509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 26519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onPrepareOptionsMenu(Menu menu) { 26529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent != null) { 26539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParent.onPrepareOptionsMenu(menu); 26549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 26569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 26589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 26599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This hook is called whenever an item in your options menu is selected. 26609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default implementation simply returns false to have the normal 26619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * processing happen (calling the item's Runnable or sending a message to 26629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * its Handler as appropriate). You can use this method for any items 26639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for which you would like to do processing without those other 26649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * facilities. 26659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Derived classes should call through to the base class for it to 2667dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * perform the default menu handling.</p> 26689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param item The menu item that was selected. 26709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return boolean Return false to allow normal menu processing to 26729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * proceed, true to consume it here. 26739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onCreateOptionsMenu 26759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 26769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onOptionsItemSelected(MenuItem item) { 26779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent != null) { 26789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParent.onOptionsItemSelected(item); 26799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 26819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 26839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2684dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * This method is called whenever the user chooses to navigate Up within your application's 2685dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * activity hierarchy from the action bar. 2686dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * 2687dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * <p>If the attribute {@link android.R.attr#parentActivityName parentActivityName} 2688dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * was specified in the manifest for this activity or an activity-alias to it, 2689dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * default Up navigation will be handled automatically. If any activity 2690dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * along the parent chain requires extra Intent arguments, the Activity subclass 2691dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * should override the method {@link #onPrepareNavigateUpTaskStack(TaskStackBuilder)} 2692dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * to supply those arguments.</p> 2693dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * 2694dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * <p>See <a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back Stack</a> 2695dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * from the developer guide and <a href="{@docRoot}design/patterns/navigation.html">Navigation</a> 2696dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * from the design guide for more information about navigating within your app.</p> 2697dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * 2698dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * <p>See the {@link TaskStackBuilder} class and the Activity methods 2699dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * {@link #getParentActivityIntent()}, {@link #shouldUpRecreateTask(Intent)}, and 2700dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * {@link #navigateUpTo(Intent)} for help implementing custom Up navigation. 2701dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * The AppNavigation sample application in the Android SDK is also available for reference.</p> 2702dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * 2703dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * @return true if Up navigation completed successfully and this Activity was finished, 2704dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * false otherwise. 2705dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell */ 2706dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell public boolean onNavigateUp() { 2707dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell // Automatically handle hierarchical Up navigation if the proper 2708dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell // metadata is available. 2709dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell Intent upIntent = getParentActivityIntent(); 2710dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell if (upIntent != null) { 27110fc5b2bea09a6d320884c5b12577caf426f547c1Adam Powell if (mActivityInfo.taskAffinity == null) { 27120fc5b2bea09a6d320884c5b12577caf426f547c1Adam Powell // Activities with a null affinity are special; they really shouldn't 27130fc5b2bea09a6d320884c5b12577caf426f547c1Adam Powell // specify a parent activity intent in the first place. Just finish 27140fc5b2bea09a6d320884c5b12577caf426f547c1Adam Powell // the current activity and call it a day. 27150fc5b2bea09a6d320884c5b12577caf426f547c1Adam Powell finish(); 27160fc5b2bea09a6d320884c5b12577caf426f547c1Adam Powell } else if (shouldUpRecreateTask(upIntent)) { 2717f78a8444a9b21b0d1daca8667d580dd0ec04a310Adam Powell TaskStackBuilder b = TaskStackBuilder.create(this); 2718dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell onCreateNavigateUpTaskStack(b); 2719dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell onPrepareNavigateUpTaskStack(b); 2720dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell b.startActivities(); 27213d193d92f601569bb99fe011bb6e104a492a0a71Adam Powell 27223d193d92f601569bb99fe011bb6e104a492a0a71Adam Powell // We can't finishAffinity if we have a result. 27233d193d92f601569bb99fe011bb6e104a492a0a71Adam Powell // Fall back and simply finish the current activity instead. 27243d193d92f601569bb99fe011bb6e104a492a0a71Adam Powell if (mResultCode != RESULT_CANCELED || mResultData != null) { 27253d193d92f601569bb99fe011bb6e104a492a0a71Adam Powell // Tell the developer what's going on to avoid hair-pulling. 27263d193d92f601569bb99fe011bb6e104a492a0a71Adam Powell Log.i(TAG, "onNavigateUp only finishing topmost activity to return a result"); 27273d193d92f601569bb99fe011bb6e104a492a0a71Adam Powell finish(); 27283d193d92f601569bb99fe011bb6e104a492a0a71Adam Powell } else { 27293d193d92f601569bb99fe011bb6e104a492a0a71Adam Powell finishAffinity(); 27303d193d92f601569bb99fe011bb6e104a492a0a71Adam Powell } 2731dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } else { 2732dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell navigateUpTo(upIntent); 2733dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } 2734dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell return true; 2735dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } 2736dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell return false; 2737dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } 2738dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell 2739dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell /** 2740dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * This is called when a child activity of this one attempts to navigate up. 2741dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * The default implementation simply calls onNavigateUp() on this activity (the parent). 2742dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * 2743dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * @param child The activity making the call. 2744dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell */ 2745dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell public boolean onNavigateUpFromChild(Activity child) { 2746dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell return onNavigateUp(); 2747dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } 2748dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell 2749dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell /** 2750dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * Define the synthetic task stack that will be generated during Up navigation from 2751dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * a different task. 2752dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * 2753dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * <p>The default implementation of this method adds the parent chain of this activity 2754dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * as specified in the manifest to the supplied {@link TaskStackBuilder}. Applications 2755dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * may choose to override this method to construct the desired task stack in a different 2756dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * way.</p> 2757dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * 2758f0195951519a5d7ce26ff2d88228af13642fc292Adam Powell * <p>This method will be invoked by the default implementation of {@link #onNavigateUp()} 2759f0195951519a5d7ce26ff2d88228af13642fc292Adam Powell * if {@link #shouldUpRecreateTask(Intent)} returns true when supplied with the intent 2760f0195951519a5d7ce26ff2d88228af13642fc292Adam Powell * returned by {@link #getParentActivityIntent()}.</p> 2761f0195951519a5d7ce26ff2d88228af13642fc292Adam Powell * 2762dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * <p>Applications that wish to supply extra Intent parameters to the parent stack defined 2763dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * by the manifest should override {@link #onPrepareNavigateUpTaskStack(TaskStackBuilder)}.</p> 2764dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * 2765dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * @param builder An empty TaskStackBuilder - the application should add intents representing 2766dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * the desired task stack 2767dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell */ 2768dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell public void onCreateNavigateUpTaskStack(TaskStackBuilder builder) { 2769dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell builder.addParentStack(this); 2770dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } 2771dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell 2772dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell /** 2773dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * Prepare the synthetic task stack that will be generated during Up navigation 2774dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * from a different task. 2775dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * 2776dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * <p>This method receives the {@link TaskStackBuilder} with the constructed series of 2777dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * Intents as generated by {@link #onCreateNavigateUpTaskStack(TaskStackBuilder)}. 2778dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * If any extra data should be added to these intents before launching the new task, 2779dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * the application should override this method and add that data here.</p> 2780dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * 2781dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * @param builder A TaskStackBuilder that has been populated with Intents by 2782dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * onCreateNavigateUpTaskStack. 2783dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell */ 2784dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell public void onPrepareNavigateUpTaskStack(TaskStackBuilder builder) { 2785dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } 2786dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell 2787dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell /** 27889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This hook is called whenever the options menu is being closed (either by the user canceling 27899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the menu with the back/menu button, or when an item is selected). 27909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 27919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param menu The options menu as last shown or first initialized by 27929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onCreateOptionsMenu(). 27939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 27949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onOptionsMenuClosed(Menu menu) { 27959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent != null) { 27969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent.onOptionsMenuClosed(menu); 27979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 27989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 27999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 28019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Programmatically opens the options menu. If the options menu is already 28029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * open, this method does nothing. 28039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 28049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void openOptionsMenu() { 28059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.openPanel(Window.FEATURE_OPTIONS_PANEL, null); 28069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 28099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Progammatically closes the options menu. If the options menu is already 28109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * closed, this method does nothing. 28119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 28129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void closeOptionsMenu() { 28139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.closePanel(Window.FEATURE_OPTIONS_PANEL); 28149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 28179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when a context menu for the {@code view} is about to be shown. 28189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unlike {@link #onCreateOptionsMenu(Menu)}, this will be called every 28199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * time the context menu is about to be shown and should be populated for 28209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the view (or item inside the view for {@link AdapterView} subclasses, 28219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this can be found in the {@code menuInfo})). 28229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 28239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use {@link #onContextItemSelected(android.view.MenuItem)} to know when an 28249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * item has been selected. 28259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 28269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * It is not safe to hold onto the context menu after this method returns. 28279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 28289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 28299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 28309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 28339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Registers a context menu to be shown for the given view (multiple views 28349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can show the context menu). This method will set the 28359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link OnCreateContextMenuListener} on the view to this activity, so 28369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onCreateContextMenu(ContextMenu, View, ContextMenuInfo)} will be 28379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * called when it is time to show the context menu. 28389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 28399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #unregisterForContextMenu(View) 28409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The view that should show a context menu. 28419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 28429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void registerForContextMenu(View view) { 28439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project view.setOnCreateContextMenuListener(this); 28449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 28479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Prevents a context menu to be shown for the given view. This method will remove the 28489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link OnCreateContextMenuListener} on the view. 28499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 28509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #registerForContextMenu(View) 28519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The view that should stop showing a context menu. 28529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 28539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void unregisterForContextMenu(View view) { 28549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project view.setOnCreateContextMenuListener(null); 28559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 28589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Programmatically opens the context menu for a particular {@code view}. 28599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The {@code view} should have been added via 28609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #registerForContextMenu(View)}. 28619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 28629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The view to show the context menu for. 28639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 28649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void openContextMenu(View view) { 28659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project view.showContextMenu(); 28669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 28699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Programmatically closes the most recently opened context menu, if showing. 28709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 28719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void closeContextMenu() { 28729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.closePanel(Window.FEATURE_CONTEXT_MENU); 28739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 28769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This hook is called whenever an item in a context menu is selected. The 28779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * default implementation simply returns false to have the normal processing 28789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * happen (calling the item's Runnable or sending a message to its Handler 28799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as appropriate). You can use this method for any items for which you 28809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * would like to do processing without those other facilities. 28819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 28829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use {@link MenuItem#getMenuInfo()} to get extra information set by the 28839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * View that added this menu item. 28849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 28859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Derived classes should call through to the base class for it to perform 28869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the default menu handling. 28879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 28889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param item The context menu item that was selected. 28899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return boolean Return false to allow normal context menu processing to 28909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * proceed, true to consume it here. 28919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 28929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onContextItemSelected(MenuItem item) { 28939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent != null) { 28949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParent.onContextItemSelected(item); 28959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 28979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 29009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This hook is called whenever the context menu is being closed (either by 29019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the user canceling the menu with the back/menu button, or when an item is 29029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * selected). 29039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 29049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param menu The context menu that is being closed. 29059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 29069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onContextMenuClosed(Menu menu) { 29079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent != null) { 29089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent.onContextMenuClosed(menu); 29099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 29109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 29119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 29129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 29138ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @deprecated Old no-arguments version of {@link #onCreateDialog(int, Bundle)}. 29148ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn */ 29158ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn @Deprecated 29168ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn protected Dialog onCreateDialog(int id) { 29178ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn return null; 29188ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn } 29198ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn 29208ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn /** 29219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Callback for creating dialogs that are managed (saved and restored) for you 29228ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * by the activity. The default implementation calls through to 29238ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * {@link #onCreateDialog(int)} for compatibility. 29249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2925291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <em>If you are targeting {@link android.os.Build.VERSION_CODES#HONEYCOMB} 2926291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * or later, consider instead using a {@link DialogFragment} instead.</em> 2927291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 29288ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * <p>If you use {@link #showDialog(int)}, the activity will call through to 29299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this method the first time, and hang onto it thereafter. Any dialog 29309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that is created by this method will automatically be saved and restored 29319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for you, including whether it is showing. 29329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 29338ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * <p>If you would like the activity to manage saving and restoring dialogs 29349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for you, you should override this method and handle any ids that are 29359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * passed to {@link #showDialog}. 29369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 29378ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * <p>If you would like an opportunity to prepare your dialog before it is shown, 29388ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * override {@link #onPrepareDialog(int, Dialog, Bundle)}. 29399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 29409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param id The id of the dialog. 29418ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @param args The dialog arguments provided to {@link #showDialog(int, Bundle)}. 29428ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @return The dialog. If you return null, the dialog will not be created. 29439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 29448ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #onPrepareDialog(int, Dialog, Bundle) 29458ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #showDialog(int, Bundle) 29469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #dismissDialog(int) 29479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #removeDialog(int) 2948271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * 2949271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * @deprecated Use the new {@link DialogFragment} class with 2950271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * {@link FragmentManager} instead; this is also 2951271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * available on older platforms through the Android compatibility package. 29529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 29539567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn @Deprecated 29548ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn protected Dialog onCreateDialog(int id, Bundle args) { 29558ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn return onCreateDialog(id); 29568ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn } 29578ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn 29588ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn /** 29598ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @deprecated Old no-arguments version of 29608ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * {@link #onPrepareDialog(int, Dialog, Bundle)}. 29618ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn */ 29628ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn @Deprecated 29638ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn protected void onPrepareDialog(int id, Dialog dialog) { 29648ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn dialog.setOwnerActivity(this); 29659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 29669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 29679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 29689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Provides an opportunity to prepare a managed dialog before it is being 29698ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * shown. The default implementation calls through to 29708ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * {@link #onPrepareDialog(int, Dialog)} for compatibility. 29718ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * 29729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 29739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Override this if you need to update a managed dialog based on the state 29749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of the application each time it is shown. For example, a time picker 29759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * dialog might want to be updated with the current time. You should call 29769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * through to the superclass's implementation. The default implementation 29779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will set this Activity as the owner activity on the Dialog. 29789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 29799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param id The id of the managed dialog. 29809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dialog The dialog. 29818ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @param args The dialog arguments provided to {@link #showDialog(int, Bundle)}. 29828ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #onCreateDialog(int, Bundle) 29839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #showDialog(int) 29849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #dismissDialog(int) 29859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #removeDialog(int) 2986271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * 2987271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * @deprecated Use the new {@link DialogFragment} class with 2988271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * {@link FragmentManager} instead; this is also 2989271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * available on older platforms through the Android compatibility package. 29909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 29919567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn @Deprecated 29928ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn protected void onPrepareDialog(int id, Dialog dialog, Bundle args) { 29938ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn onPrepareDialog(id, dialog); 29949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 29959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 29969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 29978ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * Simple version of {@link #showDialog(int, Bundle)} that does not 29988ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * take any arguments. Simply calls {@link #showDialog(int, Bundle)} 29998ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * with null arguments. 3000271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * 3001271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * @deprecated Use the new {@link DialogFragment} class with 3002271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * {@link FragmentManager} instead; this is also 3003271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * available on older platforms through the Android compatibility package. 30048ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn */ 30059567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn @Deprecated 30068ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn public final void showDialog(int id) { 30078ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn showDialog(id, null); 30088ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn } 30098ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn 30108ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn /** 30118ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * Show a dialog managed by this activity. A call to {@link #onCreateDialog(int, Bundle)} 30129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will be made with the same id the first time this is called for a given 30139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * id. From thereafter, the dialog will be automatically saved and restored. 30149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3015291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <em>If you are targeting {@link android.os.Build.VERSION_CODES#HONEYCOMB} 3016291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * or later, consider instead using a {@link DialogFragment} instead.</em> 3017291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 30188ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * <p>Each time a dialog is shown, {@link #onPrepareDialog(int, Dialog, Bundle)} will 30199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be made to provide an opportunity to do any timely preparation. 30209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 30219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param id The id of the managed dialog. 30228ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @param args Arguments to pass through to the dialog. These will be saved 30238ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * and restored for you. Note that if the dialog is already created, 30248ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * {@link #onCreateDialog(int, Bundle)} will not be called with the new 30258ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * arguments but {@link #onPrepareDialog(int, Dialog, Bundle)} will be. 3026d47c6ed4a9f2b5bd31f6c806b74701428efe458bDianne Hackborn * If you need to rebuild the dialog, call {@link #removeDialog(int)} first. 30278ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @return Returns true if the Dialog was created; false is returned if 30288ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * it is not created because {@link #onCreateDialog(int, Bundle)} returns false. 30298ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * 303037296dc4edae8d1383179e956dff2ecf806ac166Joe Onorato * @see Dialog 30318ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #onCreateDialog(int, Bundle) 30328ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #onPrepareDialog(int, Dialog, Bundle) 30339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #dismissDialog(int) 30349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #removeDialog(int) 3035271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * 3036271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * @deprecated Use the new {@link DialogFragment} class with 3037271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * {@link FragmentManager} instead; this is also 3038271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * available on older platforms through the Android compatibility package. 30399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 30409567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn @Deprecated 30418ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn public final boolean showDialog(int id, Bundle args) { 30429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mManagedDialogs == null) { 30438ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn mManagedDialogs = new SparseArray<ManagedDialog>(); 30449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30458ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn ManagedDialog md = mManagedDialogs.get(id); 30468ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn if (md == null) { 30478ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md = new ManagedDialog(); 30488ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md.mDialog = createDialog(id, null, args); 30498ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn if (md.mDialog == null) { 30508ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn return false; 30518ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn } 30528ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn mManagedDialogs.put(id, md); 30539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 30558ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md.mArgs = args; 30568ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn onPrepareDialog(id, md.mDialog, args); 30578ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md.mDialog.show(); 30588ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn return true; 30599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 30619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 30629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Dismiss a dialog that was previously shown via {@link #showDialog(int)}. 30639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 30649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param id The id of the managed dialog. 30659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 30669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws IllegalArgumentException if the id was not previously shown via 30679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #showDialog(int)}. 30689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 30698ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #onCreateDialog(int, Bundle) 30708ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #onPrepareDialog(int, Dialog, Bundle) 30719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #showDialog(int) 30729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #removeDialog(int) 3073271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * 3074271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * @deprecated Use the new {@link DialogFragment} class with 3075271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * {@link FragmentManager} instead; this is also 3076271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * available on older platforms through the Android compatibility package. 30779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 30789567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn @Deprecated 30799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void dismissDialog(int id) { 30809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mManagedDialogs == null) { 30819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw missingDialog(id); 30829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30838ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn 30848ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn final ManagedDialog md = mManagedDialogs.get(id); 30858ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn if (md == null) { 30869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw missingDialog(id); 30879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30888ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md.mDialog.dismiss(); 30899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 30919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 30929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Creates an exception to throw if a user passed in a dialog id that is 30939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * unexpected. 30949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 30959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IllegalArgumentException missingDialog(int id) { 30969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new IllegalArgumentException("no dialog with id " + id + " was ever " 30979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + "shown via Activity#showDialog"); 30989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 31009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 31019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Removes any internal references to a dialog managed by this Activity. 31029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If the dialog is showing, it will dismiss it as part of the clean up. 31039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 31048ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * <p>This can be useful if you know that you will never show a dialog again and 31059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * want to avoid the overhead of saving and restoring it in the future. 31069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3107d2ce8bbb84607b1f456b9af00d8d7b84a4610a79Dianne Hackborn * <p>As of {@link android.os.Build.VERSION_CODES#GINGERBREAD}, this function 3108d2ce8bbb84607b1f456b9af00d8d7b84a4610a79Dianne Hackborn * will not throw an exception if you try to remove an ID that does not 3109d2ce8bbb84607b1f456b9af00d8d7b84a4610a79Dianne Hackborn * currently have an associated dialog.</p> 3110d2ce8bbb84607b1f456b9af00d8d7b84a4610a79Dianne Hackborn * 31119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param id The id of the managed dialog. 31129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 31138ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #onCreateDialog(int, Bundle) 31148ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #onPrepareDialog(int, Dialog, Bundle) 31159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #showDialog(int) 31169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #dismissDialog(int) 3117271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * 3118271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * @deprecated Use the new {@link DialogFragment} class with 3119271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * {@link FragmentManager} instead; this is also 3120271c2fe0eb36fbf872535bedf3ee8156e3087847Dianne Hackborn * available on older platforms through the Android compatibility package. 31219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 31229567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn @Deprecated 31239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void removeDialog(int id) { 3124d2ce8bbb84607b1f456b9af00d8d7b84a4610a79Dianne Hackborn if (mManagedDialogs != null) { 3125d2ce8bbb84607b1f456b9af00d8d7b84a4610a79Dianne Hackborn final ManagedDialog md = mManagedDialogs.get(id); 3126d2ce8bbb84607b1f456b9af00d8d7b84a4610a79Dianne Hackborn if (md != null) { 3127d2ce8bbb84607b1f456b9af00d8d7b84a4610a79Dianne Hackborn md.mDialog.dismiss(); 3128d2ce8bbb84607b1f456b9af00d8d7b84a4610a79Dianne Hackborn mManagedDialogs.remove(id); 3129d2ce8bbb84607b1f456b9af00d8d7b84a4610a79Dianne Hackborn } 31309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 31319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 31329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 31339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 31349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This hook is called when the user signals the desire to start a search. 31359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 31366266e40a754d82afa717ef068898c8418a0bb5c3Bjorn Bringert * <p>You can use this function as a simple way to launch the search UI, in response to a 31376266e40a754d82afa717ef068898c8418a0bb5c3Bjorn Bringert * menu item, search button, or other widgets within your activity. Unless overidden, 31386266e40a754d82afa717ef068898c8418a0bb5c3Bjorn Bringert * calling this function is the same as calling 31396266e40a754d82afa717ef068898c8418a0bb5c3Bjorn Bringert * {@link #startSearch startSearch(null, false, null, false)}, which launches 31406266e40a754d82afa717ef068898c8418a0bb5c3Bjorn Bringert * search for the current activity as specified in its manifest, see {@link SearchManager}. 31419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 31429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>You can override this function to force global search, e.g. in response to a dedicated 31439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * search key, or to block search entirely (by simply returning false). 31449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 31456266e40a754d82afa717ef068898c8418a0bb5c3Bjorn Bringert * @return Returns {@code true} if search launched, and {@code false} if activity blocks it. 31466266e40a754d82afa717ef068898c8418a0bb5c3Bjorn Bringert * The default implementation always returns {@code true}. 31479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 31489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.app.SearchManager 31499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 31509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onSearchRequested() { 31519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startSearch(null, false, null, false); 31529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 31539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 31549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 31559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 31569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This hook is called to launch the search UI. 31579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 31589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>It is typically called from onSearchRequested(), either directly from 31599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Activity.onSearchRequested() or from an overridden version in any given 31609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Activity. If your goal is simply to activate search, it is preferred to call 31619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onSearchRequested(), which may have been overriden elsewhere in your Activity. If your goal 31629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is to inject specific data such as context data, it is preferred to <i>override</i> 31639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onSearchRequested(), so that any callers to it will benefit from the override. 31649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 31659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param initialQuery Any non-null non-empty string will be inserted as 31669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * pre-entered text in the search query box. 31679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param selectInitialQuery If true, the intial query will be preselected, which means that 31689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * any further typing will replace it. This is useful for cases where an entire pre-formed 31699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * query is being inserted. If false, the selection point will be placed at the end of the 31709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * inserted query. This is useful when the inserted query is text that the user entered, 31719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and the user would expect to be able to keep typing. <i>This parameter is only meaningful 31729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if initialQuery is a non-empty string.</i> 31739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param appSearchData An application can insert application-specific 31749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * context here, in order to improve quality or specificity of its own 31759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * searches. This data will be returned with SEARCH intent(s). Null if 31769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * no extra data is required. 31779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param globalSearch If false, this will only launch the search that has been specifically 31789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * defined by the application (which is usually defined as a local search). If no default 3179cfa419b754332e12f8cd45244c2f3bee9d6a74bbMike LeBeau * search is defined in the current application or activity, global search will be launched. 31809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If true, this will always launch a platform-global (e.g. web-based) search instead. 31819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 31829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.app.SearchManager 31839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onSearchRequested 31849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 31859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void startSearch(String initialQuery, boolean selectInitialQuery, 31869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bundle appSearchData, boolean globalSearch) { 3187b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn ensureSearchManager(); 31888d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert mSearchManager.startSearch(initialQuery, selectInitialQuery, getComponentName(), 31899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project appSearchData, globalSearch); 31909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 31919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 31929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3193d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen * Similar to {@link #startSearch}, but actually fires off the search query after invoking 3194d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen * the search dialog. Made available for testing purposes. 3195d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen * 3196d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen * @param query The query to trigger. If empty, the request will be ignored. 3197d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen * @param appSearchData An application can insert application-specific 3198d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen * context here, in order to improve quality or specificity of its own 3199d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen * searches. This data will be returned with SEARCH intent(s). Null if 3200d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen * no extra data is required. 3201d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen */ 3202b782a2f4f0a3072f2677f6f10fb255c77468ae66Bjorn Bringert public void triggerSearch(String query, Bundle appSearchData) { 3203d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen ensureSearchManager(); 3204b782a2f4f0a3072f2677f6f10fb255c77468ae66Bjorn Bringert mSearchManager.triggerSearch(query, getComponentName(), appSearchData); 3205d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen } 3206d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen 3207d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen /** 32089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Request that key events come to this activity. Use this if your 32099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity has no views with focus, but the activity still wants 32109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a chance to process key events. 32119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 32129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.Window#takeKeyEvents 32139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 32149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void takeKeyEvents(boolean get) { 32159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().takeKeyEvents(get); 32169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 32179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 32189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 32199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Enable extended window features. This is a convenience for calling 32209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#requestFeature getWindow().requestFeature()}. 32219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 32229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param featureId The desired feature as defined in 32239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window}. 32249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns true if the requested feature is supported and now 32259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * enabled. 32269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 32279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.Window#requestFeature 32289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 32299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean requestWindowFeature(int featureId) { 32309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getWindow().requestFeature(featureId); 32319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 32329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 32339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 32349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convenience for calling 32359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#setFeatureDrawableResource}. 32369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 32379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setFeatureDrawableResource(int featureId, int resId) { 32389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureDrawableResource(featureId, resId); 32399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 32409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 32419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 32429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convenience for calling 32439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#setFeatureDrawableUri}. 32449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 32459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setFeatureDrawableUri(int featureId, Uri uri) { 32469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureDrawableUri(featureId, uri); 32479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 32489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 32499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 32509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convenience for calling 32519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#setFeatureDrawable(int, Drawable)}. 32529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 32539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setFeatureDrawable(int featureId, Drawable drawable) { 32549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureDrawable(featureId, drawable); 32559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 32569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 32579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 32589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convenience for calling 32599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#setFeatureDrawableAlpha}. 32609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 32619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setFeatureDrawableAlpha(int featureId, int alpha) { 32629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureDrawableAlpha(featureId, alpha); 32639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 32649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 32659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 32669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convenience for calling 32679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#getLayoutInflater}. 32689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 32699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public LayoutInflater getLayoutInflater() { 32709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getWindow().getLayoutInflater(); 32719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 32729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 32739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 32749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a {@link MenuInflater} with this context. 32759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 32769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public MenuInflater getMenuInflater() { 327788ab69780f58e4b32d497266b2ad646a4d74827bAdam Powell // Make sure that action views can get an appropriate theme. 327888ab69780f58e4b32d497266b2ad646a4d74827bAdam Powell if (mMenuInflater == null) { 327988ab69780f58e4b32d497266b2ad646a4d74827bAdam Powell initActionBar(); 328088ab69780f58e4b32d497266b2ad646a4d74827bAdam Powell if (mActionBar != null) { 32819275197d35a99c3f187d18d0eda6ead3b8a32603Dianne Hackborn mMenuInflater = new MenuInflater(mActionBar.getThemedContext(), this); 328288ab69780f58e4b32d497266b2ad646a4d74827bAdam Powell } else { 328388ab69780f58e4b32d497266b2ad646a4d74827bAdam Powell mMenuInflater = new MenuInflater(this); 328488ab69780f58e4b32d497266b2ad646a4d74827bAdam Powell } 328588ab69780f58e4b32d497266b2ad646a4d74827bAdam Powell } 328688ab69780f58e4b32d497266b2ad646a4d74827bAdam Powell return mMenuInflater; 32879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 32889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 32899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3290bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn protected void onApplyThemeResource(Resources.Theme theme, int resid, 3291bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn boolean first) { 32929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 32939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.onApplyThemeResource(theme, resid, first); 32949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 32959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 32969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project theme.setTo(mParent.getTheme()); 32979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (Exception e) { 32989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 32999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project theme.applyStyle(resid, false); 33019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 33049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3305a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Same as calling {@link #startActivityForResult(Intent, int, Bundle)} 3306a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * with no options. 3307a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 3308a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param intent The intent to start. 3309a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param requestCode If >= 0, this code will be returned in 3310a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * onActivityResult() when the activity exits. 3311a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 3312a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @throws android.content.ActivityNotFoundException 3313a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 3314a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @see #startActivity 3315a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 3316a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public void startActivityForResult(Intent intent, int requestCode) { 3317a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn startActivityForResult(intent, requestCode, null); 3318a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn } 3319a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 3320a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 33219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Launch an activity for which you would like a result when it finished. 33229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When this activity exits, your 33239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onActivityResult() method will be called with the given requestCode. 33249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Using a negative requestCode is the same as calling 33259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #startActivity} (the activity is not launched as a sub-activity). 3326a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 33279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note that this method should only be used with Intent protocols 33289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that are defined to return a result. In other protocols (such as 33299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Intent#ACTION_MAIN} or {@link Intent#ACTION_VIEW}), you may 33309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not get the result when you expect. For example, if the activity you 33319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are launching uses the singleTask launch mode, it will not run in your 33329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * task and thus you will immediately receive a cancel result. 3333a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 33349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>As a special case, if you call startActivityForResult() with a requestCode 33359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * >= 0 during the initial onCreate(Bundle savedInstanceState)/onResume() of your 33369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity, then your window will not be displayed until a result is 33379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returned back from the started activity. This is to avoid visible 33389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * flickering when redirecting to another activity. 3339a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 33409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This method throws {@link android.content.ActivityNotFoundException} 33419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if there was no Activity found to run the given Intent. 3342a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 33439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param intent The intent to start. 33449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param requestCode If >= 0, this code will be returned in 33459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onActivityResult() when the activity exits. 3346a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param options Additional options for how the Activity should be started. 33477a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * See {@link android.content.Context#startActivity(Intent, Bundle) 33487a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * Context.startActivity(Intent, Bundle)} for more details. 3349a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 33509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws android.content.ActivityNotFoundException 3351a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 33529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startActivity 33539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3354a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public void startActivityForResult(Intent intent, int requestCode, Bundle options) { 33559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 33569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Instrumentation.ActivityResult ar = 33579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentation.execStartActivity( 33589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this, mMainThread.getApplicationThread(), mToken, this, 3359a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn intent, requestCode, options); 33609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ar != null) { 33619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMainThread.sendActivityResult( 33629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mToken, mEmbeddedID, requestCode, ar.getResultCode(), 33639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ar.getResultData()); 33649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (requestCode >= 0) { 33669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // If this start is requesting a result, we can avoid making 33679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // the activity visible until the result is received. Setting 33689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // this code during onCreate(Bundle savedInstanceState) or onResume() will keep the 33699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // activity hidden during this time, to avoid flickering. 33709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // This can only be done when a result is requested because 33719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // that guarantees we will get information back when the 33729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // activity is finished, no matter what happens to it. 33739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStartedActivity = true; 33749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3376a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn if (options != null) { 3377a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn mParent.startActivityFromChild(this, intent, requestCode, options); 3378a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn } else { 3379a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn // Note we want to go through this method for compatibility with 3380a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn // existing applications that may have overridden it. 3381a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn mParent.startActivityFromChild(this, intent, requestCode); 3382a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn } 33839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 33869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3387a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Same as calling {@link #startIntentSenderForResult(IntentSender, int, 3388a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Intent, int, int, int, Bundle)} with no options. 3389a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 3390a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param intent The IntentSender to launch. 3391a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param requestCode If >= 0, this code will be returned in 3392a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * onActivityResult() when the activity exits. 3393a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param fillInIntent If non-null, this will be provided as the 3394a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * intent parameter to {@link IntentSender#sendIntent}. 3395a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param flagsMask Intent flags in the original IntentSender that you 3396a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * would like to change. 3397a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param flagsValues Desired values for any bits set in 3398a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * <var>flagsMask</var> 3399a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param extraFlags Always set to 0. 3400a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 3401a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public void startIntentSenderForResult(IntentSender intent, int requestCode, 3402a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags) 3403a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn throws IntentSender.SendIntentException { 3404a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn startIntentSenderForResult(intent, requestCode, fillInIntent, flagsMask, 3405a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn flagsValues, extraFlags, null); 3406a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn } 3407a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 3408a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 3409bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * Like {@link #startActivityForResult(Intent, int)}, but allowing you 3410fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * to use a IntentSender to describe the activity to be started. If 3411fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * the IntentSender is for an activity, that activity will be started 3412fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * as if you had called the regular {@link #startActivityForResult(Intent, int)} 3413fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * here; otherwise, its associated action will be executed (such as 3414fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * sending a broadcast) as if you had called 3415fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * {@link IntentSender#sendIntent IntentSender.sendIntent} on it. 3416fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * 3417fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * @param intent The IntentSender to launch. 3418bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * @param requestCode If >= 0, this code will be returned in 3419bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * onActivityResult() when the activity exits. 3420bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * @param fillInIntent If non-null, this will be provided as the 3421fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * intent parameter to {@link IntentSender#sendIntent}. 3422fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * @param flagsMask Intent flags in the original IntentSender that you 3423bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * would like to change. 3424bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * @param flagsValues Desired values for any bits set in 3425bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * <var>flagsMask</var> 3426fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * @param extraFlags Always set to 0. 3427a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param options Additional options for how the Activity should be started. 34287a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * See {@link android.content.Context#startActivity(Intent, Bundle) 34297a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * Context.startActivity(Intent, Bundle)} for more details. If options 34307a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * have also been supplied by the IntentSender, options given here will 34317a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * override any that conflict with those given by the IntentSender. 3432bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn */ 3433fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn public void startIntentSenderForResult(IntentSender intent, int requestCode, 3434a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, 3435a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn Bundle options) throws IntentSender.SendIntentException { 3436bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn if (mParent == null) { 3437fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn startIntentSenderForResultInner(intent, requestCode, fillInIntent, 3438a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn flagsMask, flagsValues, this, options); 3439a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn } else if (options != null) { 3440a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn mParent.startIntentSenderFromChild(this, intent, requestCode, 3441a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn fillInIntent, flagsMask, flagsValues, extraFlags, options); 3442bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } else { 3443a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn // Note we want to go through this call for compatibility with 3444a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn // existing applications that may have overridden the method. 3445fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn mParent.startIntentSenderFromChild(this, intent, requestCode, 3446fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn fillInIntent, flagsMask, flagsValues, extraFlags); 3447bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 3448bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 3449bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn 3450fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn private void startIntentSenderForResultInner(IntentSender intent, int requestCode, 3451a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn Intent fillInIntent, int flagsMask, int flagsValues, Activity activity, 3452a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn Bundle options) 3453fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn throws IntentSender.SendIntentException { 3454bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn try { 3455bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn String resolvedType = null; 3456bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn if (fillInIntent != null) { 34579ecebbfbf768fd63e9a6c9a09c86d81c7737ee2dDianne Hackborn fillInIntent.setAllowFds(false); 3458bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn resolvedType = fillInIntent.resolveTypeIfNeeded(getContentResolver()); 3459bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 3460bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn int result = ActivityManagerNative.getDefault() 3461fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn .startActivityIntentSender(mMainThread.getApplicationThread(), intent, 3462bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn fillInIntent, resolvedType, mToken, activity.mEmbeddedID, 3463a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn requestCode, flagsMask, flagsValues, options); 3464a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn if (result == ActivityManager.START_CANCELED) { 3465fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn throw new IntentSender.SendIntentException(); 3466bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 3467bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn Instrumentation.checkStartActivityResult(result, null); 3468bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } catch (RemoteException e) { 3469bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 3470bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn if (requestCode >= 0) { 3471bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn // If this start is requesting a result, we can avoid making 3472bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn // the activity visible until the result is received. Setting 3473bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn // this code during onCreate(Bundle savedInstanceState) or onResume() will keep the 3474bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn // activity hidden during this time, to avoid flickering. 3475bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn // This can only be done when a result is requested because 3476bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn // that guarantees we will get information back when the 3477bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn // activity is finished, no matter what happens to it. 3478bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn mStartedActivity = true; 3479bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 3480bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 3481bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn 3482bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn /** 3483a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Same as {@link #startActivity(Intent, Bundle)} with no options 3484a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * specified. 3485a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 3486a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param intent The intent to start. 3487a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 3488a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @throws android.content.ActivityNotFoundException 3489a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 3490a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @see {@link #startActivity(Intent, Bundle)} 3491a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @see #startActivityForResult 3492a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 3493a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn @Override 3494a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public void startActivity(Intent intent) { 3495a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn startActivity(intent, null); 3496a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn } 3497a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 3498a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 34999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Launch a new activity. You will not receive any information about when 35009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the activity exits. This implementation overrides the base version, 35019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * providing information about 35029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the activity performing the launch. Because of this additional 35039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * information, the {@link Intent#FLAG_ACTIVITY_NEW_TASK} launch flag is not 35049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * required; if not specified, the new activity will be added to the 35059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * task of the caller. 35069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 35079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This method throws {@link android.content.ActivityNotFoundException} 35089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if there was no Activity found to run the given Intent. 35099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 35109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param intent The intent to start. 3511a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param options Additional options for how the Activity should be started. 35127a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * See {@link android.content.Context#startActivity(Intent, Bundle) 35137a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * Context.startActivity(Intent, Bundle)} for more details. 35149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 35159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws android.content.ActivityNotFoundException 3516a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 3517a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @see {@link #startActivity(Intent)} 35189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startActivityForResult 35199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 35209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3521a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public void startActivity(Intent intent, Bundle options) { 3522a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn if (options != null) { 3523a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn startActivityForResult(intent, -1, options); 3524a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn } else { 3525a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn // Note we want to go through this call for compatibility with 3526a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn // applications that may have overridden the method. 3527a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn startActivityForResult(intent, -1); 3528a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn } 3529a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn } 3530a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 3531a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 3532a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Same as {@link #startActivities(Intent[], Bundle)} with no options 3533a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * specified. 3534a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 3535a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param intents The intents to start. 3536a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 3537a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @throws android.content.ActivityNotFoundException 3538a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 3539a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @see {@link #startActivities(Intent[], Bundle)} 3540a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @see #startActivityForResult 3541a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 3542a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn @Override 3543a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public void startActivities(Intent[] intents) { 3544a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn startActivities(intents, null); 35459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 35479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3548621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * Launch a new activity. You will not receive any information about when 3549621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * the activity exits. This implementation overrides the base version, 3550621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * providing information about 3551621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * the activity performing the launch. Because of this additional 3552621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * information, the {@link Intent#FLAG_ACTIVITY_NEW_TASK} launch flag is not 3553621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * required; if not specified, the new activity will be added to the 3554621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * task of the caller. 3555621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * 3556621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * <p>This method throws {@link android.content.ActivityNotFoundException} 3557621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * if there was no Activity found to run the given Intent. 3558621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * 3559621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * @param intents The intents to start. 3560a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param options Additional options for how the Activity should be started. 35617a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * See {@link android.content.Context#startActivity(Intent, Bundle) 35627a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * Context.startActivity(Intent, Bundle)} for more details. 3563621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * 3564621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * @throws android.content.ActivityNotFoundException 3565621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * 3566a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @see {@link #startActivities(Intent[])} 3567621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * @see #startActivityForResult 3568621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn */ 3569621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn @Override 3570a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public void startActivities(Intent[] intents, Bundle options) { 3571621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn mInstrumentation.execStartActivities(this, mMainThread.getApplicationThread(), 3572a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn mToken, this, intents, options); 3573621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn } 3574621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn 3575621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn /** 3576a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Same as calling {@link #startIntentSender(IntentSender, Intent, int, int, int, Bundle)} 3577a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * with no options. 3578bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * 3579fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * @param intent The IntentSender to launch. 3580bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * @param fillInIntent If non-null, this will be provided as the 3581fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * intent parameter to {@link IntentSender#sendIntent}. 3582fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * @param flagsMask Intent flags in the original IntentSender that you 3583bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * would like to change. 3584bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * @param flagsValues Desired values for any bits set in 3585bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * <var>flagsMask</var> 3586fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * @param extraFlags Always set to 0. 3587bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn */ 3588fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn public void startIntentSender(IntentSender intent, 3589fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags) 3590fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn throws IntentSender.SendIntentException { 3591a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn startIntentSender(intent, fillInIntent, flagsMask, flagsValues, 3592a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn extraFlags, null); 3593a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn } 3594a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 3595a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 3596a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Like {@link #startActivity(Intent, Bundle)}, but taking a IntentSender 3597a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * to start; see 3598a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * {@link #startIntentSenderForResult(IntentSender, int, Intent, int, int, int, Bundle)} 3599a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * for more information. 3600a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 3601a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param intent The IntentSender to launch. 3602a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param fillInIntent If non-null, this will be provided as the 3603a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * intent parameter to {@link IntentSender#sendIntent}. 3604a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param flagsMask Intent flags in the original IntentSender that you 3605a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * would like to change. 3606a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param flagsValues Desired values for any bits set in 3607a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * <var>flagsMask</var> 3608a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param extraFlags Always set to 0. 3609a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param options Additional options for how the Activity should be started. 36107a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * See {@link android.content.Context#startActivity(Intent, Bundle) 36117a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * Context.startActivity(Intent, Bundle)} for more details. If options 36127a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * have also been supplied by the IntentSender, options given here will 36137a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * override any that conflict with those given by the IntentSender. 3614a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 3615a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public void startIntentSender(IntentSender intent, 3616a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, 3617a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn Bundle options) throws IntentSender.SendIntentException { 3618a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn if (options != null) { 3619a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn startIntentSenderForResult(intent, -1, fillInIntent, flagsMask, 3620a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn flagsValues, extraFlags, options); 3621a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn } else { 3622a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn // Note we want to go through this call for compatibility with 3623a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn // applications that may have overridden the method. 3624a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn startIntentSenderForResult(intent, -1, fillInIntent, flagsMask, 3625a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn flagsValues, extraFlags); 3626a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn } 3627a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn } 3628a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 3629a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 3630a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Same as calling {@link #startActivityIfNeeded(Intent, int, Bundle)} 3631a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * with no options. 3632a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 3633a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param intent The intent to start. 3634a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param requestCode If >= 0, this code will be returned in 3635a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * onActivityResult() when the activity exits, as described in 3636a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * {@link #startActivityForResult}. 3637a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 3638a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @return If a new activity was launched then true is returned; otherwise 3639a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * false is returned and you must handle the Intent yourself. 3640a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 3641a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @see #startActivity 3642a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @see #startActivityForResult 3643a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 3644a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public boolean startActivityIfNeeded(Intent intent, int requestCode) { 3645a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn return startActivityIfNeeded(intent, requestCode, null); 3646bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 3647bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn 3648bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn /** 36499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A special variation to launch an activity only if a new activity 36509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * instance is needed to handle the given Intent. In other words, this is 36519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * just like {@link #startActivityForResult(Intent, int)} except: if you are 36529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * using the {@link Intent#FLAG_ACTIVITY_SINGLE_TOP} flag, or 36539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * singleTask or singleTop 36549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.styleable#AndroidManifestActivity_launchMode launchMode}, 36559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and the activity 36569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that handles <var>intent</var> is the same as your currently running 36579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity, then a new instance is not needed. In this case, instead of 36589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the normal behavior of calling {@link #onNewIntent} this function will 36599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * return and you can handle the Intent yourself. 36609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 36619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This function can only be called from a top-level activity; if it is 36629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * called from a child activity, a runtime exception will be thrown. 36639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 36649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param intent The intent to start. 36659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param requestCode If >= 0, this code will be returned in 36669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onActivityResult() when the activity exits, as described in 36679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #startActivityForResult}. 3668a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param options Additional options for how the Activity should be started. 36697a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * See {@link android.content.Context#startActivity(Intent, Bundle) 36707a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * Context.startActivity(Intent, Bundle)} for more details. 36719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 36729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return If a new activity was launched then true is returned; otherwise 36739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * false is returned and you must handle the Intent yourself. 36749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 36759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startActivity 36769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startActivityForResult 36779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3678a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public boolean startActivityIfNeeded(Intent intent, int requestCode, Bundle options) { 36799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 3680a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn int result = ActivityManager.START_RETURN_INTENT_TO_CALLER; 36819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 36829ecebbfbf768fd63e9a6c9a09c86d81c7737ee2dDianne Hackborn intent.setAllowFds(false); 36839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = ActivityManagerNative.getDefault() 36849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .startActivity(mMainThread.getApplicationThread(), 368592a8b22e7410e74e1cba1b856333116652af8a5cSiva Velusamy intent, intent.resolveTypeIfNeeded(getContentResolver()), 3686a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn mToken, mEmbeddedID, requestCode, 3687a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn ActivityManager.START_FLAG_ONLY_IF_NEEDED, null, null, 3688a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn options); 36899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 36909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 36919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 369292a8b22e7410e74e1cba1b856333116652af8a5cSiva Velusamy 36939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Instrumentation.checkStartActivityResult(result, intent); 369492a8b22e7410e74e1cba1b856333116652af8a5cSiva Velusamy 36959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (requestCode >= 0) { 36969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // If this start is requesting a result, we can avoid making 36979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // the activity visible until the result is received. Setting 36989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // this code during onCreate(Bundle savedInstanceState) or onResume() will keep the 36999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // activity hidden during this time, to avoid flickering. 37009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // This can only be done when a result is requested because 37019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // that guarantees we will get information back when the 37029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // activity is finished, no matter what happens to it. 37039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStartedActivity = true; 37049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3705a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn return result != ActivityManager.START_RETURN_INTENT_TO_CALLER; 37069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 37079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 37089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new UnsupportedOperationException( 37099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "startActivityIfNeeded can only be called from a top-level activity"); 37109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 37119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 37129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3713a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Same as calling {@link #startNextMatchingActivity(Intent, Bundle)} with 3714a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * no options. 3715a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 3716a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param intent The intent to dispatch to the next activity. For 3717a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * correct behavior, this must be the same as the Intent that started 3718a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * your own activity; the only changes you can make are to the extras 3719a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * inside of it. 3720a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 3721a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @return Returns a boolean indicating whether there was another Activity 3722a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * to start: true if there was a next activity to start, false if there 3723a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * wasn't. In general, if true is returned you will then want to call 3724a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * finish() on yourself. 3725a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 3726a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public boolean startNextMatchingActivity(Intent intent) { 3727a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn return startNextMatchingActivity(intent, null); 3728a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn } 3729a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 3730a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 37319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Special version of starting an activity, for use when you are replacing 37329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * other activity components. You can use this to hand the Intent off 37339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the next Activity that can handle it. You typically call this in 37349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onCreate} with the Intent returned by {@link #getIntent}. 37359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 37369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param intent The intent to dispatch to the next activity. For 37379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * correct behavior, this must be the same as the Intent that started 37389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * your own activity; the only changes you can make are to the extras 37399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * inside of it. 3740a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param options Additional options for how the Activity should be started. 37417a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * See {@link android.content.Context#startActivity(Intent, Bundle) 37427a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * Context.startActivity(Intent, Bundle)} for more details. 37439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 37449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a boolean indicating whether there was another Activity 37459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to start: true if there was a next activity to start, false if there 37469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * wasn't. In general, if true is returned you will then want to call 37479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * finish() on yourself. 37489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3749a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public boolean startNextMatchingActivity(Intent intent, Bundle options) { 37509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 37519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 37529ecebbfbf768fd63e9a6c9a09c86d81c7737ee2dDianne Hackborn intent.setAllowFds(false); 37539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault() 3754a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn .startNextMatchingActivity(mToken, intent, options); 37559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 37569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 37579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 37589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 37599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 37609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 37619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new UnsupportedOperationException( 37629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "startNextMatchingActivity can only be called from a top-level activity"); 37639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3764a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 3765a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 3766a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Same as calling {@link #startActivityFromChild(Activity, Intent, int, Bundle)} 3767a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * with no options. 3768a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 3769a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param child The activity making the call. 3770a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param intent The intent to start. 3771a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param requestCode Reply request code. < 0 if reply is not requested. 3772a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 3773a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @throws android.content.ActivityNotFoundException 3774a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 3775a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @see #startActivity 3776a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @see #startActivityForResult 3777a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 3778a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public void startActivityFromChild(Activity child, Intent intent, 3779a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn int requestCode) { 37808078d8c8a282ca81344febe7256f63b1e805e3aaDianne Hackborn startActivityFromChild(child, intent, requestCode, null); 3781a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn } 3782a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 37839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 37849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is called when a child activity of this one calls its 37859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #startActivity} or {@link #startActivityForResult} method. 37869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 37879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This method throws {@link android.content.ActivityNotFoundException} 37889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if there was no Activity found to run the given Intent. 37899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 37909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param child The activity making the call. 37919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param intent The intent to start. 3792a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param requestCode Reply request code. < 0 if reply is not requested. 3793a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param options Additional options for how the Activity should be started. 37947a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * See {@link android.content.Context#startActivity(Intent, Bundle) 37957a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * Context.startActivity(Intent, Bundle)} for more details. 37969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 37979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws android.content.ActivityNotFoundException 37989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 37999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startActivity 38009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startActivityForResult 38019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 38029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void startActivityFromChild(Activity child, Intent intent, 3803a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn int requestCode, Bundle options) { 38049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Instrumentation.ActivityResult ar = 38059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentation.execStartActivity( 38069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this, mMainThread.getApplicationThread(), mToken, child, 3807a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn intent, requestCode, options); 38089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ar != null) { 38099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMainThread.sendActivityResult( 38109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mToken, child.mEmbeddedID, requestCode, 38119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ar.getResultCode(), ar.getResultData()); 38129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 38159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3816a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Same as calling {@link #startActivityFromFragment(Fragment, Intent, int, Bundle)} 3817a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * with no options. 3818a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 3819a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param fragment The fragment making the call. 3820a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param intent The intent to start. 3821a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param requestCode Reply request code. < 0 if reply is not requested. 3822a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 3823a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @throws android.content.ActivityNotFoundException 3824a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * 3825a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @see Fragment#startActivity 3826a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @see Fragment#startActivityForResult 3827a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 3828a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public void startActivityFromFragment(Fragment fragment, Intent intent, 3829a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn int requestCode) { 3830a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn startActivityFromFragment(fragment, intent, requestCode, null); 3831a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn } 3832a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 3833a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 38346e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * This is called when a Fragment in this activity calls its 38356e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * {@link Fragment#startActivity} or {@link Fragment#startActivityForResult} 38366e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * method. 38376e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * 38386e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * <p>This method throws {@link android.content.ActivityNotFoundException} 38396e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * if there was no Activity found to run the given Intent. 38406e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * 38416e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * @param fragment The fragment making the call. 38426e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * @param intent The intent to start. 38436e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * @param requestCode Reply request code. < 0 if reply is not requested. 3844a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * @param options Additional options for how the Activity should be started. 38457a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * See {@link android.content.Context#startActivity(Intent, Bundle) 38467a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * Context.startActivity(Intent, Bundle)} for more details. 38476e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * 38486e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * @throws android.content.ActivityNotFoundException 38496e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * 38506e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * @see Fragment#startActivity 38516e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * @see Fragment#startActivityForResult 38526e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn */ 38536e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn public void startActivityFromFragment(Fragment fragment, Intent intent, 3854a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn int requestCode, Bundle options) { 38556e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn Instrumentation.ActivityResult ar = 38566e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mInstrumentation.execStartActivity( 38576e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn this, mMainThread.getApplicationThread(), mToken, fragment, 3858a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn intent, requestCode, options); 38596e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (ar != null) { 38606e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mMainThread.sendActivityResult( 38616e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mToken, fragment.mWho, requestCode, 38626e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn ar.getResultCode(), ar.getResultData()); 38636e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 38646e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 38656e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 38666e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn /** 3867a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * Same as calling {@link #startIntentSenderFromChild(Activity, IntentSender, 3868a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn * int, Intent, int, int, int, Bundle)} with no options. 3869a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn */ 3870a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn public void startIntentSenderFromChild(Activity child, IntentSender intent, 3871a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn int requestCode, Intent fillInIntent, int flagsMask, int flagsValues, 3872a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn int extraFlags) 3873a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn throws IntentSender.SendIntentException { 3874a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn startIntentSenderFromChild(child, intent, requestCode, fillInIntent, 3875a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn flagsMask, flagsValues, extraFlags, null); 3876a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn } 3877a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn 3878a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn /** 3879bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * Like {@link #startActivityFromChild(Activity, Intent, int)}, but 3880fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * taking a IntentSender; see 3881ae22c05b91d1e7a458066792eb5cfc0974c1be9eDianne Hackborn * {@link #startIntentSenderForResult(IntentSender, int, Intent, int, int, int)} 3882bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * for more information. 3883bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn */ 3884fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn public void startIntentSenderFromChild(Activity child, IntentSender intent, 3885fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn int requestCode, Intent fillInIntent, int flagsMask, int flagsValues, 3886a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn int extraFlags, Bundle options) 3887fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn throws IntentSender.SendIntentException { 3888fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn startIntentSenderForResultInner(intent, requestCode, fillInIntent, 3889a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn flagsMask, flagsValues, child, options); 3890bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 3891bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn 3892bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn /** 38933b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn * Call immediately after one of the flavors of {@link #startActivity(Intent)} 38943b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn * or {@link #finish} to specify an explicit transition animation to 38953b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn * perform next. 38967a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * 38977a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * <p>As of {@link android.os.Build.VERSION_CODES#JELLY_BEAN} an alternative 38987a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * to using this with starting activities is to supply the desired animation 38997a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * information through a {@link ActivityOptions} bundle to 39007a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * {@link #startActivity(Intent, Bundle) or a related function. This allows 39017a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * you to specify a custom animation even when starting an activity from 39027a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * outside the context of the current top activity. 39037a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn * 39043b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn * @param enterAnim A resource ID of the animation resource to use for 39058b571a817cc953ce96750f440645f104c7f55157Dianne Hackborn * the incoming activity. Use 0 for no animation. 39063b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn * @param exitAnim A resource ID of the animation resource to use for 39078b571a817cc953ce96750f440645f104c7f55157Dianne Hackborn * the outgoing activity. Use 0 for no animation. 39083b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn */ 39093b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn public void overridePendingTransition(int enterAnim, int exitAnim) { 39103b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn try { 39113b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn ActivityManagerNative.getDefault().overridePendingTransition( 39123b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn mToken, getPackageName(), enterAnim, exitAnim); 39133b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn } catch (RemoteException e) { 39143b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn } 39153b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn } 39163b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn 39173b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn /** 39189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Call this to set the result that your activity will return to its 39199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * caller. 39209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 39219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param resultCode The result code to propagate back to the originating 39229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity, often RESULT_CANCELED or RESULT_OK 39239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 39249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #RESULT_CANCELED 39259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #RESULT_OK 39269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #RESULT_FIRST_USER 39279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setResult(int, Intent) 39289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 39299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setResult(int resultCode) { 39309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (this) { 39319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mResultCode = resultCode; 39329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mResultData = null; 39339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 39379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Call this to set the result that your activity will return to its 39389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * caller. 393921c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn * 394021c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn * <p>As of {@link android.os.Build.VERSION_CODES#GINGERBREAD}, the Intent 394121c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn * you supply here can have {@link Intent#FLAG_GRANT_READ_URI_PERMISSION 394221c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn * Intent.FLAG_GRANT_READ_URI_PERMISSION} and/or {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION 394321c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn * Intent.FLAG_GRANT_WRITE_URI_PERMISSION} set. This will grant the 394421c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn * Activity receiving the result access to the specific URIs in the Intent. 394521c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn * Access will remain until the Activity has finished (it will remain across the hosting 394621c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn * process being killed and other temporary destruction) and will be added 394721c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn * to any existing set of URI permissions it already holds. 394821c241e061de29a538008ca42df9c878184bcfb8Dianne Hackborn * 39499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param resultCode The result code to propagate back to the originating 39509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity, often RESULT_CANCELED or RESULT_OK 39519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param data The data to propagate back to the originating activity. 39529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 39539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #RESULT_CANCELED 39549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #RESULT_OK 39559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #RESULT_FIRST_USER 39569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setResult(int) 39579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 39589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setResult(int resultCode, Intent data) { 39599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (this) { 39609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mResultCode = resultCode; 39619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mResultData = data; 39629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 39669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the name of the package that invoked this activity. This is who 39679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the data in {@link #setResult setResult()} will be sent to. You can 39689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * use this information to validate that the recipient is allowed to 39699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * receive the data. 39709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 39719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note: if the calling activity is not expecting a result (that is it 39729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * did not use the {@link #startActivityForResult} 39739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * form that includes a request code), then the calling package will be 39749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * null. 39759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 39769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The package of the activity that will receive your 39779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * reply, or null if none. 39789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 39799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getCallingPackage() { 39809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 39819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault().getCallingPackage(mToken); 39829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 39839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 39849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 39889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the name of the activity that invoked this activity. This is 39899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * who the data in {@link #setResult setResult()} will be sent to. You 39909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can use this information to validate that the recipient is allowed to 39919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * receive the data. 39929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 39939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note: if the calling activity is not expecting a result (that is it 39949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * did not use the {@link #startActivityForResult} 39959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * form that includes a request code), then the calling package will be 39969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * null. 39979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 39989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return String The full name of the activity that will receive your 39999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * reply, or null if none. 40009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 40019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ComponentName getCallingActivity() { 40029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 40039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault().getCallingActivity(mToken); 40049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 40059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 40069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 40079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 40089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 40099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 40109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Control whether this activity's main window is visible. This is intended 40119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * only for the special case of an activity that is not going to show a 40129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * UI itself, but can't just finish prior to onResume() because it needs 40139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to wait for a service binding or such. Setting this to false allows 40149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you to prevent your UI from being shown during that time. 40159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 40169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The default value for this is taken from the 40179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.attr#windowNoDisplay} attribute of the activity's theme. 40189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 40199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setVisible(boolean visible) { 40209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mVisibleFromClient != visible) { 40219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mVisibleFromClient = visible; 40229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mVisibleFromServer) { 40239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (visible) makeVisible(); 40249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else mDecor.setVisibility(View.INVISIBLE); 40259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 40269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 40279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 40289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 40299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void makeVisible() { 40309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mWindowAdded) { 40319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ViewManager wm = getWindowManager(); 40329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wm.addView(mDecor, getWindow().getAttributes()); 40339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindowAdded = true; 40349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 40359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDecor.setVisibility(View.VISIBLE); 40369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 40379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 40389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 40399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Check to see whether this activity is in the process of finishing, 40409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * either because you called {@link #finish} on it or someone else 40419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * has requested that it finished. This is often used in 40429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onPause} to determine whether the activity is simply pausing or 40439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * completely finishing. 40449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 40459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return If the activity is finishing, returns true; else returns false. 40469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 40479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #finish 40489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 40499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isFinishing() { 40509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mFinished; 40519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 40529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 40539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 40543d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton * Check to see whether this activity is in the process of being destroyed in order to be 40553d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton * recreated with a new configuration. This is often used in 40563d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton * {@link #onStop} to determine whether the state needs to be cleaned up or will be passed 40573d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton * on to the next instance of the activity via {@link #onRetainNonConfigurationInstance()}. 40583d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton * 40593d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton * @return If the activity is being torn down in order to be recreated with a new configuration, 40603d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton * returns true; else returns false. 40613d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton */ 40623d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton public boolean isChangingConfigurations() { 40633d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton return mChangingConfigurations; 40643d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton } 40653d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton 40663d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton /** 406730c9bd89556137157b2f686637ece961454ccabeDianne Hackborn * Cause this Activity to be recreated with a new instance. This results 406830c9bd89556137157b2f686637ece961454ccabeDianne Hackborn * in essentially the same flow as when the Activity is created due to 406930c9bd89556137157b2f686637ece961454ccabeDianne Hackborn * a configuration change -- the current instance will go through its 407030c9bd89556137157b2f686637ece961454ccabeDianne Hackborn * lifecycle to {@link #onDestroy} and a new instance then created after it. 407130c9bd89556137157b2f686637ece961454ccabeDianne Hackborn */ 407230c9bd89556137157b2f686637ece961454ccabeDianne Hackborn public void recreate() { 407330c9bd89556137157b2f686637ece961454ccabeDianne Hackborn if (mParent != null) { 407430c9bd89556137157b2f686637ece961454ccabeDianne Hackborn throw new IllegalStateException("Can only be called on top-level activity"); 407530c9bd89556137157b2f686637ece961454ccabeDianne Hackborn } 407630c9bd89556137157b2f686637ece961454ccabeDianne Hackborn if (Looper.myLooper() != mMainThread.getLooper()) { 407730c9bd89556137157b2f686637ece961454ccabeDianne Hackborn throw new IllegalStateException("Must be called from main thread"); 407830c9bd89556137157b2f686637ece961454ccabeDianne Hackborn } 407930c9bd89556137157b2f686637ece961454ccabeDianne Hackborn mMainThread.requestRelaunchActivity(mToken, null, null, 0, false, null, false); 408030c9bd89556137157b2f686637ece961454ccabeDianne Hackborn } 408130c9bd89556137157b2f686637ece961454ccabeDianne Hackborn 408230c9bd89556137157b2f686637ece961454ccabeDianne Hackborn /** 40839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Call this when your activity is done and should be closed. The 40849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ActivityResult is propagated back to whoever launched you via 40859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onActivityResult(). 40869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 40879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void finish() { 40889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 40899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int resultCode; 40909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Intent resultData; 40919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (this) { 40929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resultCode = mResultCode; 40939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resultData = mResultData; 40949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 409543a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato if (false) Log.v(TAG, "Finishing self: token=" + mToken); 40969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 40979ecebbfbf768fd63e9a6c9a09c86d81c7737ee2dDianne Hackborn if (resultData != null) { 40989ecebbfbf768fd63e9a6c9a09c86d81c7737ee2dDianne Hackborn resultData.setAllowFds(false); 40999ecebbfbf768fd63e9a6c9a09c86d81c7737ee2dDianne Hackborn } 41009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ActivityManagerNative.getDefault() 41019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .finishActivity(mToken, resultCode, resultData)) { 41029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFinished = true; 41039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 41049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 41059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 41069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 41079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 41089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent.finishFromChild(this); 41099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 41109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 41119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 41129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4113ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn * Finish this activity as well as all activities immediately below it 4114ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn * in the current task that have the same affinity. This is typically 4115ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn * used when an application can be launched on to another task (such as 4116ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn * from an ACTION_VIEW of a content type it understands) and the user 4117ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn * has used the up navigation to switch out of the current task and in 4118ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn * to its own task. In this case, if the user has navigated down into 4119ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn * any other activities of the second application, all of those should 4120ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn * be removed from the original task as part of the task switch. 4121ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn * 4122ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn * <p>Note that this finish does <em>not</em> allow you to deliver results 4123ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn * to the previous activity, and an exception will be thrown if you are trying 4124ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn * to do so.</p> 4125ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn */ 4126ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn public void finishAffinity() { 4127ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn if (mParent != null) { 4128ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn throw new IllegalStateException("Can not be called from an embedded activity"); 4129ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn } 4130ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn if (mResultCode != RESULT_CANCELED || mResultData != null) { 4131ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn throw new IllegalStateException("Can not be called to deliver a result"); 4132ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn } 4133ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn try { 4134ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn if (ActivityManagerNative.getDefault().finishActivityAffinity(mToken)) { 4135ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn mFinished = true; 4136ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn } 4137ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn } catch (RemoteException e) { 4138ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn // Empty 4139ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn } 4140ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn } 4141ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn 4142ecc5a9cca000b62d2a649b795460fd791a206a89Dianne Hackborn /** 41439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is called when a child activity of this one calls its 41449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #finish} method. The default implementation simply calls 41459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * finish() on this activity (the parent), finishing the entire group. 41469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 41479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param child The activity making the call. 41489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 41499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #finish 41509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 41519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void finishFromChild(Activity child) { 41529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project finish(); 41539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 41549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 41559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 41569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Force finish another activity that you had previously started with 41579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #startActivityForResult}. 41589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 41599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param requestCode The request code of the activity that you had 41609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * given to startActivityForResult(). If there are multiple 41619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activities started with this request code, they 41629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will all be finished. 41639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 41649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void finishActivity(int requestCode) { 41659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 41669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 41679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ActivityManagerNative.getDefault() 41689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .finishSubActivity(mToken, mEmbeddedID, requestCode); 41699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 41709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 41719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 41729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 41739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent.finishActivityFromChild(this, requestCode); 41749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 41759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 41769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 41779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 41789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is called when a child activity of this one calls its 41799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * finishActivity(). 41809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 41819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param child The activity making the call. 41829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param requestCode Request code that had been used to start the 41839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity. 41849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 41859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void finishActivityFromChild(Activity child, int requestCode) { 41869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 41879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ActivityManagerNative.getDefault() 41889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .finishSubActivity(mToken, child.mEmbeddedID, requestCode); 41899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 41909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 41919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 41929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 41939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 41949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 41959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when an activity you launched exits, giving you the requestCode 41969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you started it with, the resultCode it returned, and any additional 41979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * data from it. The <var>resultCode</var> will be 41989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #RESULT_CANCELED} if the activity explicitly returned that, 41999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * didn't return any result, or crashed during its operation. 42009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 42019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>You will receive this call immediately before onResume() when your 42029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity is re-starting. 42039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 42049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param requestCode The integer request code originally supplied to 42059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * startActivityForResult(), allowing you to identify who this 42069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * result came from. 42079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param resultCode The integer result code returned by the child activity 42089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * through its setResult(). 42099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param data An Intent, which can return result data to the caller 42109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (various data can be attached to Intent "extras"). 42119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 42129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startActivityForResult 42139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #createPendingResult 42149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setResult(int) 42159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 42166e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn protected void onActivityResult(int requestCode, int resultCode, Intent data) { 42179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 42189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 42199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 42209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new PendingIntent object which you can hand to others 42219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for them to use to send result data back to your 42229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onActivityResult} callback. The created object will be either 42239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * one-shot (becoming invalid after a result is sent back) or multiple 42249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (allowing any number of results to be sent through it). 42259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 42269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param requestCode Private request code for the sender that will be 42279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associated with the result data when it is returned. The sender can not 42289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * modify this value, allowing you to identify incoming results. 42299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param data Default data to supply in the result, which may be modified 42309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * by the sender. 42319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param flags May be {@link PendingIntent#FLAG_ONE_SHOT PendingIntent.FLAG_ONE_SHOT}, 42329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PendingIntent#FLAG_NO_CREATE PendingIntent.FLAG_NO_CREATE}, 42339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PendingIntent#FLAG_CANCEL_CURRENT PendingIntent.FLAG_CANCEL_CURRENT}, 42349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PendingIntent#FLAG_UPDATE_CURRENT PendingIntent.FLAG_UPDATE_CURRENT}, 42359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or any of the flags as supported by 42369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Intent#fillIn Intent.fillIn()} to control which unspecified parts 42379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of the intent that can be supplied when the actual send happens. 42389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 42399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns an existing or new PendingIntent matching the given 42409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * parameters. May return null only if 42419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PendingIntent#FLAG_NO_CREATE PendingIntent.FLAG_NO_CREATE} has been 42429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * supplied. 42439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 42449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see PendingIntent 42459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 42469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PendingIntent createPendingResult(int requestCode, Intent data, 42479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int flags) { 42489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String packageName = getPackageName(); 42499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 42509ecebbfbf768fd63e9a6c9a09c86d81c7737ee2dDianne Hackborn data.setAllowFds(false); 42519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IIntentSender target = 42529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ActivityManagerNative.getDefault().getIntentSender( 4253a4972e951bf2bdb7afdafee95b3ab0c15b8bacaeDianne Hackborn ActivityManager.INTENT_SENDER_ACTIVITY_RESULT, packageName, 42549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent == null ? mToken : mParent.mToken, 42557a2195cdd33f27c79eda343defc1f7ccf59cc8acDianne Hackborn mEmbeddedID, requestCode, new Intent[] { data }, null, flags, null); 42569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return target != null ? new PendingIntent(target) : null; 42579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 42589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 42599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 42609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 42619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 42629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 42639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 42649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Change the desired orientation of this activity. If the activity 42659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is currently in the foreground or otherwise impacting the screen 42669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * orientation, the screen will immediately be changed (possibly causing 42679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the activity to be restarted). Otherwise, this will be used the next 42689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * time the activity is visible. 42699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 42709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param requestedOrientation An orientation constant as used in 42719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link ActivityInfo#screenOrientation ActivityInfo.screenOrientation}. 42729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 42739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setRequestedOrientation(int requestedOrientation) { 42749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 42759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 42769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ActivityManagerNative.getDefault().setRequestedOrientation( 42779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mToken, requestedOrientation); 42789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 42799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 42809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 42819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 42829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent.setRequestedOrientation(requestedOrientation); 42839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 42849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 42859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 42869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 42879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the current requested orientation of the activity. This will 42889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * either be the orientation requested in its component's manifest, or 42899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the last requested orientation given to 42909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setRequestedOrientation(int)}. 42919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 42929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns an orientation constant as used in 42939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link ActivityInfo#screenOrientation ActivityInfo.screenOrientation}. 42949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 42959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getRequestedOrientation() { 42969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 42979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 42989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault() 42999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .getRequestedOrientation(mToken); 43009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 43019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 43029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 43039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 43049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParent.getRequestedOrientation(); 43059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 43069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; 43079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 43089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 43099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 43109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the identifier of the task this activity is in. This identifier 43119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will remain the same for the lifetime of the activity. 43129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 43139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Task identifier, an opaque integer. 43149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 43159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getTaskId() { 43169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 43179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault() 43189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .getTaskForActivity(mToken, false); 43199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 43209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return -1; 43219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 43229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 43239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 43249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 43259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return whether this activity is the root of a task. The root is the 43269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * first activity in a task. 43279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 43289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return True if this is the root activity, else false. 43299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 43309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isTaskRoot() { 43319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 43329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault() 43339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .getTaskForActivity(mToken, true) >= 0; 43349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 43359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 43369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 43379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 43389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 43399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 43409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Move the task containing this activity to the back of the activity 43419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * stack. The activity's order within the task is unchanged. 43429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 43439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param nonRoot If false then this only works if the activity is the root 43449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of a task; if true it will work for any activity in 43459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a task. 43469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 43479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return If the task was moved (or it was already at the 43489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * back) true is returned, else false. 43499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 43509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean moveTaskToBack(boolean nonRoot) { 43519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 43529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault().moveActivityTaskToBack( 43539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mToken, nonRoot); 43549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 43559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 43569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 43579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 43589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 43599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 43609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 43619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns class name for this activity with the package prefix removed. 43629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is the default name used to read and write settings. 43639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 43649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The local class name. 43659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 43669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getLocalClassName() { 43679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final String pkg = getPackageName(); 43689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final String cls = mComponent.getClassName(); 43699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int packageLen = pkg.length(); 43709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!cls.startsWith(pkg) || cls.length() <= packageLen 43719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || cls.charAt(packageLen) != '.') { 43729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return cls; 43739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 43749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return cls.substring(packageLen+1); 43759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 43769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 43779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 43789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns complete component name of this activity. 43799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 43809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the complete component name for this activity 43819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 43829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ComponentName getComponentName() 43839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 43849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mComponent; 43859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 43869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 43879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 43889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve a {@link SharedPreferences} object for accessing preferences 43899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that are private to this activity. This simply calls the underlying 43909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getSharedPreferences(String, int)} method by passing in this activity's 43919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * class name as the preferences name. 43929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 43939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param mode Operating mode. Use {@link #MODE_PRIVATE} for the default 43949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * operation, {@link #MODE_WORLD_READABLE} and 43959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #MODE_WORLD_WRITEABLE} to control permissions. 43969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 43979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the single SharedPreferences instance that can be used 43989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to retrieve and modify the preference values. 43999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 44009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public SharedPreferences getPreferences(int mode) { 44019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getSharedPreferences(getLocalClassName(), mode); 44029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4404b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn private void ensureSearchManager() { 4405b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn if (mSearchManager != null) { 4406b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn return; 4407b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn } 4408b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn 4409e9ce3f01d42769f03f10e70c3244500e92d7eee1Amith Yamasani mSearchManager = new SearchManager(this, null); 4410b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn } 4411b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn 44129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 44139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Object getSystemService(String name) { 44149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (getBaseContext() == null) { 44159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalStateException( 44169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "System services not available to Activities before onCreate()"); 44179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 44199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (WINDOW_SERVICE.equals(name)) { 44209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mWindowManager; 44218d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert } else if (SEARCH_SERVICE.equals(name)) { 4422b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn ensureSearchManager(); 44238d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert return mSearchManager; 44249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return super.getSystemService(name); 44269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 44289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 44299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Change the title associated with this activity. If this is a 44309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * top-level activity, the title for its window will change. If it 44319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is an embedded activity, the parent can do whatever it wants 44329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with it. 44339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 44349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setTitle(CharSequence title) { 44359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTitle = title; 44369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onTitleChanged(title, mTitleColor); 44379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 44389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent != null) { 44399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent.onChildTitleChanged(this, title); 44409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 44439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 44449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Change the title associated with this activity. If this is a 44459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * top-level activity, the title for its window will change. If it 44469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is an embedded activity, the parent can do whatever it wants 44479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with it. 44489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 44499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setTitle(int titleId) { 44509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setTitle(getText(titleId)); 44519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 44539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setTitleColor(int textColor) { 44549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTitleColor = textColor; 44559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onTitleChanged(mTitle, textColor); 44569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 44589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final CharSequence getTitle() { 44599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mTitle; 44609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 44629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getTitleColor() { 44639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mTitleColor; 44649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 44669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onTitleChanged(CharSequence title, int color) { 44679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mTitleReady) { 44689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Window win = getWindow(); 44699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (win != null) { 44709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project win.setTitle(title); 44719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (color != 0) { 44729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project win.setTitleColor(color); 44739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 44789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onChildTitleChanged(Activity childActivity, CharSequence title) { 44799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 44819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 44829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the visibility of the progress bar in the title. 44839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 44849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In order for the progress bar to be shown, the feature must be requested 44859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * via {@link #requestWindowFeature(int)}. 44869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 44879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param visible Whether to show the progress bars in the title. 44889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 44899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setProgressBarVisibility(boolean visible) { 44909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureInt(Window.FEATURE_PROGRESS, visible ? Window.PROGRESS_VISIBILITY_ON : 44919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Window.PROGRESS_VISIBILITY_OFF); 44929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 44949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 44959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the visibility of the indeterminate progress bar in the title. 44969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 44979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In order for the progress bar to be shown, the feature must be requested 44989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * via {@link #requestWindowFeature(int)}. 44999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 45009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param visible Whether to show the progress bars in the title. 45019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 45029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setProgressBarIndeterminateVisibility(boolean visible) { 45039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureInt(Window.FEATURE_INDETERMINATE_PROGRESS, 45049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project visible ? Window.PROGRESS_VISIBILITY_ON : Window.PROGRESS_VISIBILITY_OFF); 45059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 45069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 45079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 45089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets whether the horizontal progress bar in the title should be indeterminate (the circular 45099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is always indeterminate). 45109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 45119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In order for the progress bar to be shown, the feature must be requested 45129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * via {@link #requestWindowFeature(int)}. 45139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 45149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param indeterminate Whether the horizontal progress bar should be indeterminate. 45159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 45169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setProgressBarIndeterminate(boolean indeterminate) { 45179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureInt(Window.FEATURE_PROGRESS, 45189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project indeterminate ? Window.PROGRESS_INDETERMINATE_ON : Window.PROGRESS_INDETERMINATE_OFF); 45199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 45209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 45219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 45229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the progress for the progress bars in the title. 45239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 45249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In order for the progress bar to be shown, the feature must be requested 45259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * via {@link #requestWindowFeature(int)}. 45269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 45279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param progress The progress for the progress bar. Valid ranges are from 45289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 0 to 10000 (both inclusive). If 10000 is given, the progress 45299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * bar will be completely filled and will fade out. 45309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 45319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setProgress(int progress) { 45329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureInt(Window.FEATURE_PROGRESS, progress + Window.PROGRESS_START); 45339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 45349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 45359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 45369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the secondary progress for the progress bar in the title. This 45379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * progress is drawn between the primary progress (set via 45389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setProgress(int)} and the background. It can be ideal for media 45399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * scenarios such as showing the buffering progress while the default 45409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * progress shows the play progress. 45419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 45429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In order for the progress bar to be shown, the feature must be requested 45439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * via {@link #requestWindowFeature(int)}. 45449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 45459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param secondaryProgress The secondary progress for the progress bar. Valid ranges are from 45469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 0 to 10000 (both inclusive). 45479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 45489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setSecondaryProgress(int secondaryProgress) { 45499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureInt(Window.FEATURE_PROGRESS, 45509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project secondaryProgress + Window.PROGRESS_SECONDARY_START); 45519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 45529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 45539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 45549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Suggests an audio stream whose volume should be changed by the hardware 45559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * volume controls. 45569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 45579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The suggested audio stream will be tied to the window of this Activity. 45589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If the Activity is switched, the stream set here is no longer the 45599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * suggested stream. The client does not need to save and restore the old 45609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * suggested stream value in onPause and onResume. 45619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 45629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param streamType The type of the audio stream whose volume should be 45639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * changed by the hardware volume controls. It is not guaranteed that 45649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the hardware volume controls will always change this stream's 45659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * volume (for example, if a call is in progress, its stream's volume 45669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * may be changed instead). To reset back to the default, use 45679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link AudioManager#USE_DEFAULT_STREAM_TYPE}. 45689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 45699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setVolumeControlStream(int streamType) { 45709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setVolumeControlStream(streamType); 45719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 45729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 45739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 45749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the suggested audio stream whose volume should be changed by the 45759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * harwdare volume controls. 45769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 45779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The suggested audio stream type whose volume should be changed by 45789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the hardware volume controls. 45799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setVolumeControlStream(int) 45809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 45819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getVolumeControlStream() { 45829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getWindow().getVolumeControlStream(); 45839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 45849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 45859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 45869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Runs the specified action on the UI thread. If the current thread is the UI 45879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thread, then the action is executed immediately. If the current thread is 45889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not the UI thread, the action is posted to the event queue of the UI thread. 45899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 45909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param action the action to run on the UI thread 45919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 45929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void runOnUiThread(Runnable action) { 45939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (Thread.currentThread() != mUiThread) { 45949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHandler.post(action); 45959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 45969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project action.run(); 45979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 45989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 45999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 46009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4601ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn * Standard implementation of 4602ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn * {@link android.view.LayoutInflater.Factory#onCreateView} used when 4603ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn * inflating with the LayoutInflater returned by {@link #getSystemService}. 4604625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * This implementation does nothing and is for 4605625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * pre-{@link android.os.Build.VERSION_CODES#HONEYCOMB} apps. Newer apps 4606625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * should use {@link #onCreateView(View, String, Context, AttributeSet)}. 4607625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * 4608625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * @see android.view.LayoutInflater#createView 4609625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * @see android.view.Window#getLayoutInflater 4610625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn */ 4611625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn public View onCreateView(String name, Context context, AttributeSet attrs) { 4612625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn return null; 4613625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn } 4614625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn 4615625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn /** 4616625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * Standard implementation of 4617625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * {@link android.view.LayoutInflater.Factory2#onCreateView(View, String, Context, AttributeSet)} 4618625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * used when inflating with the LayoutInflater returned by {@link #getSystemService}. 4619ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn * This implementation handles <fragment> tags to embed fragments inside 4620ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn * of the activity. 46219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 46229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.LayoutInflater#createView 46239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.Window#getLayoutInflater 46249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4625625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn public View onCreateView(View parent, String name, Context context, AttributeSet attrs) { 4626ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn if (!"fragment".equals(name)) { 4627625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn return onCreateView(name, context, attrs); 4628ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 4629ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn 4630def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn String fname = attrs.getAttributeValue(null, "class"); 4631ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn TypedArray a = 4632ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.Fragment); 4633def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn if (fname == null) { 4634def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn fname = a.getString(com.android.internal.R.styleable.Fragment_name); 4635def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn } 4636625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn int id = a.getResourceId(com.android.internal.R.styleable.Fragment_id, View.NO_ID); 4637ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn String tag = a.getString(com.android.internal.R.styleable.Fragment_tag); 4638ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn a.recycle(); 4639ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn 4640625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn int containerId = parent != null ? parent.getId() : 0; 4641625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn if (containerId == View.NO_ID && id == View.NO_ID && tag == null) { 4642b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn throw new IllegalArgumentException(attrs.getPositionDescription() 4643625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn + ": Must specify unique android:id, android:tag, or have a parent with an id for " + fname); 4644b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 4645625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn 4646b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn // If we restored from a previous state, we may already have 4647b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn // instantiated this fragment from the state and should use 4648b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn // that instance instead of making a new one. 4649625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn Fragment fragment = id != View.NO_ID ? mFragments.findFragmentById(id) : null; 4650625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn if (fragment == null && tag != null) { 4651625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn fragment = mFragments.findFragmentByTag(tag); 4652625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn } 4653625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn if (fragment == null && containerId != View.NO_ID) { 4654625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn fragment = mFragments.findFragmentById(containerId); 4655625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn } 4656625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn 4657b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn if (FragmentManagerImpl.DEBUG) Log.v(TAG, "onCreateView: id=0x" 4658b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn + Integer.toHexString(id) + " fname=" + fname 4659b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn + " existing=" + fragment); 4660b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn if (fragment == null) { 4661b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn fragment = Fragment.instantiate(this, fname); 4662b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn fragment.mFromLayout = true; 4663625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn fragment.mFragmentId = id != 0 ? id : containerId; 4664625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn fragment.mContainerId = containerId; 4665b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn fragment.mTag = tag; 4666625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn fragment.mInLayout = true; 46673e449ce00ed2d3b271e50bc7a52798f630973bf1Dianne Hackborn fragment.mFragmentManager = mFragments; 4668e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn fragment.onInflate(this, attrs, fragment.mSavedFragmentState); 4669625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn mFragments.addFragment(fragment, true); 4670625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn 4671625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn } else if (fragment.mInLayout) { 4672625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn // A fragment already exists and it is not one we restored from 4673625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn // previous state. 4674625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn throw new IllegalArgumentException(attrs.getPositionDescription() 4675625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn + ": Duplicate id 0x" + Integer.toHexString(id) 4676625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn + ", tag " + tag + ", or parent id 0x" + Integer.toHexString(containerId) 4677625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn + " with another fragment for " + fname); 4678625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn } else { 4679625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn // This fragment was retained from a previous instance; get it 4680625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn // going now. 4681625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn fragment.mInLayout = true; 4682def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn // If this fragment is newly instantiated (either right now, or 4683def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn // from last saved state), then give it the attributes to 4684def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn // initialize itself. 4685def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn if (!fragment.mRetaining) { 4686e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn fragment.onInflate(this, attrs, fragment.mSavedFragmentState); 4687def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn } 4688625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn mFragments.moveToState(fragment); 4689b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn } 4690625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn 4691b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn if (fragment.mView == null) { 4692b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn throw new IllegalStateException("Fragment " + fname 4693b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn + " did not create a view."); 4694b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn } 4695625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn if (id != 0) { 4696625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn fragment.mView.setId(id); 4697625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn } 4698b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn if (fragment.mView.getTag() == null) { 4699b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn fragment.mView.setTag(tag); 4700b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn } 4701b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn return fragment.mView; 47029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 47039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 470469a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler /** 4705625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * Print the Activity's state into the given stream. This gets invoked if 47065554b7082220d37496e30f39a0d9146afc177ab4Jeff Sharkey * you run "adb shell dumpsys activity <activity_component_name>". 4707625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * 470830d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn * @param prefix Desired prefix to prepend at each line of output. 4709625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * @param fd The raw file descriptor that the dump is being sent to. 4710625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * @param writer The PrintWriter to which you should dump your state. This will be 4711625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * closed for you after you return. 4712625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * @param args additional arguments to the dump request. 4713625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn */ 471430d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { 471530d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.print(prefix); writer.print("Local Activity "); 471630d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.print(Integer.toHexString(System.identityHashCode(this))); 471730d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.println(" State:"); 471830d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn String innerPrefix = prefix + " "; 471930d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.print(innerPrefix); writer.print("mResumed="); 472030d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.print(mResumed); writer.print(" mStopped="); 472130d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.print(mStopped); writer.print(" mFinished="); 472230d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.println(mFinished); 472330d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.print(innerPrefix); writer.print("mLoadersStarted="); 472430d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.println(mLoadersStarted); 472530d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.print(innerPrefix); writer.print("mChangingConfigurations="); 472630d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.println(mChangingConfigurations); 472730d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.print(innerPrefix); writer.print("mCurrentConfig="); 472830d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.println(mCurrentConfig); 472930d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn if (mLoaderManager != null) { 473030d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.print(prefix); writer.print("Loader Manager "); 473130d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.print(Integer.toHexString(System.identityHashCode(mLoaderManager))); 473230d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.println(":"); 473330d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn mLoaderManager.dump(prefix + " ", fd, writer, args); 473430d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn } 473530d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn mFragments.dump(prefix, fd, writer, args); 47364702a856973a553deb82f71b1d3b6c3db5dbf4baDianne Hackborn writer.print(prefix); writer.println("View Hierarchy:"); 47374702a856973a553deb82f71b1d3b6c3db5dbf4baDianne Hackborn dumpViewHierarchy(prefix + " ", writer, getWindow().getDecorView()); 47384702a856973a553deb82f71b1d3b6c3db5dbf4baDianne Hackborn } 47394702a856973a553deb82f71b1d3b6c3db5dbf4baDianne Hackborn 47404702a856973a553deb82f71b1d3b6c3db5dbf4baDianne Hackborn private void dumpViewHierarchy(String prefix, PrintWriter writer, View view) { 47414702a856973a553deb82f71b1d3b6c3db5dbf4baDianne Hackborn writer.print(prefix); 47424702a856973a553deb82f71b1d3b6c3db5dbf4baDianne Hackborn if (view == null) { 47434702a856973a553deb82f71b1d3b6c3db5dbf4baDianne Hackborn writer.println("null"); 47444702a856973a553deb82f71b1d3b6c3db5dbf4baDianne Hackborn return; 47454702a856973a553deb82f71b1d3b6c3db5dbf4baDianne Hackborn } 47464702a856973a553deb82f71b1d3b6c3db5dbf4baDianne Hackborn writer.println(view.toString()); 47474702a856973a553deb82f71b1d3b6c3db5dbf4baDianne Hackborn if (!(view instanceof ViewGroup)) { 47484702a856973a553deb82f71b1d3b6c3db5dbf4baDianne Hackborn return; 47494702a856973a553deb82f71b1d3b6c3db5dbf4baDianne Hackborn } 47504702a856973a553deb82f71b1d3b6c3db5dbf4baDianne Hackborn ViewGroup grp = (ViewGroup)view; 47514702a856973a553deb82f71b1d3b6c3db5dbf4baDianne Hackborn final int N = grp.getChildCount(); 47524702a856973a553deb82f71b1d3b6c3db5dbf4baDianne Hackborn if (N <= 0) { 47534702a856973a553deb82f71b1d3b6c3db5dbf4baDianne Hackborn return; 47544702a856973a553deb82f71b1d3b6c3db5dbf4baDianne Hackborn } 47554702a856973a553deb82f71b1d3b6c3db5dbf4baDianne Hackborn prefix = prefix + " "; 47564702a856973a553deb82f71b1d3b6c3db5dbf4baDianne Hackborn for (int i=0; i<N; i++) { 47574702a856973a553deb82f71b1d3b6c3db5dbf4baDianne Hackborn dumpViewHierarchy(prefix, writer, grp.getChildAt(i)); 47584702a856973a553deb82f71b1d3b6c3db5dbf4baDianne Hackborn } 4759625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn } 4760625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn 4761625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn /** 476269a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * Bit indicating that this activity is "immersive" and should not be 476369a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * interrupted by notifications if possible. 476469a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * 476569a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * This value is initially set by the manifest property 476669a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * <code>android:immersive</code> but may be changed at runtime by 476769a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * {@link #setImmersive}. 476869a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * 476969a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * @see android.content.pm.ActivityInfo#FLAG_IMMERSIVE 477002486b1327e3007c62d253dd89ba9db1852b87f8Dianne Hackborn * @hide 477169a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler */ 477269a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler public boolean isImmersive() { 477369a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler try { 477469a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler return ActivityManagerNative.getDefault().isImmersive(mToken); 477569a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler } catch (RemoteException e) { 477669a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler return false; 477769a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler } 477869a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler } 477969a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler 478069a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler /** 478169a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * Adjust the current immersive mode setting. 478269a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * 478369a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * Note that changing this value will have no effect on the activity's 478469a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * {@link android.content.pm.ActivityInfo} structure; that is, if 478569a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * <code>android:immersive</code> is set to <code>true</code> 478669a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * in the application's manifest entry for this activity, the {@link 478769a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * android.content.pm.ActivityInfo#flags ActivityInfo.flags} member will 478869a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * always have its {@link android.content.pm.ActivityInfo#FLAG_IMMERSIVE 478969a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * FLAG_IMMERSIVE} bit set. 479069a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * 479169a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * @see #isImmersive 479269a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * @see android.content.pm.ActivityInfo#FLAG_IMMERSIVE 479302486b1327e3007c62d253dd89ba9db1852b87f8Dianne Hackborn * @hide 479469a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler */ 479569a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler public void setImmersive(boolean i) { 479669a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler try { 479769a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler ActivityManagerNative.getDefault().setImmersive(mToken, i); 479869a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler } catch (RemoteException e) { 479969a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler // pass 480069a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler } 480169a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler } 480269a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler 48036e34636749217654f43221885afb7a29bb5ca96aAdam Powell /** 4804debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * Start an action mode. 48056e34636749217654f43221885afb7a29bb5ca96aAdam Powell * 48066e34636749217654f43221885afb7a29bb5ca96aAdam Powell * @param callback Callback that will manage lifecycle events for this context mode 48076e34636749217654f43221885afb7a29bb5ca96aAdam Powell * @return The ContextMode that was started, or null if it was canceled 48086e34636749217654f43221885afb7a29bb5ca96aAdam Powell * 48096e34636749217654f43221885afb7a29bb5ca96aAdam Powell * @see ActionMode 48106e34636749217654f43221885afb7a29bb5ca96aAdam Powell */ 48115d27977f9da482627ceb19317a2cd70467aff046Adam Powell public ActionMode startActionMode(ActionMode.Callback callback) { 48126e34636749217654f43221885afb7a29bb5ca96aAdam Powell return mWindow.getDecorView().startActionMode(callback); 48136e34636749217654f43221885afb7a29bb5ca96aAdam Powell } 48146e34636749217654f43221885afb7a29bb5ca96aAdam Powell 4815debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell /** 4816debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * Give the Activity a chance to control the UI for an action mode requested 4817debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * by the system. 4818debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * 4819debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * <p>Note: If you are looking for a notification callback that an action mode 4820debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * has been started for this activity, see {@link #onActionModeStarted(ActionMode)}.</p> 4821debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * 4822debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * @param callback The callback that should control the new action mode 4823debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * @return The new action mode, or <code>null</code> if the activity does not want to 4824debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * provide special handling for this action mode. (It will be handled by the system.) 4825debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell */ 4826debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell public ActionMode onWindowStartingActionMode(ActionMode.Callback callback) { 482742c0fe86521af507f597af6159f63879cb5be73eAdam Powell initActionBar(); 48286e34636749217654f43221885afb7a29bb5ca96aAdam Powell if (mActionBar != null) { 48295d27977f9da482627ceb19317a2cd70467aff046Adam Powell return mActionBar.startActionMode(callback); 48306e34636749217654f43221885afb7a29bb5ca96aAdam Powell } 48316e34636749217654f43221885afb7a29bb5ca96aAdam Powell return null; 48326e34636749217654f43221885afb7a29bb5ca96aAdam Powell } 48336e34636749217654f43221885afb7a29bb5ca96aAdam Powell 4834debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell /** 4835debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * Notifies the Activity that an action mode has been started. 4836debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * Activity subclasses overriding this method should call the superclass implementation. 4837debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * 4838debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * @param mode The new action mode. 4839debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell */ 4840debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell public void onActionModeStarted(ActionMode mode) { 4841debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell } 4842debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell 4843debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell /** 4844debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * Notifies the activity that an action mode has finished. 4845debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * Activity subclasses overriding this method should call the superclass implementation. 4846debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * 4847debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * @param mode The action mode that just finished. 4848debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell */ 4849debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell public void onActionModeFinished(ActionMode mode) { 4850debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell } 4851debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell 4852dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell /** 4853dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * Returns true if the app should recreate the task when navigating 'up' from this activity 4854dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * by using targetIntent. 4855dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * 4856dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * <p>If this method returns false the app can trivially call 4857dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * {@link #navigateUpTo(Intent)} using the same parameters to correctly perform 4858dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * up navigation. If this method returns false, the app should synthesize a new task stack 4859dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * by using {@link TaskStackBuilder} or another similar mechanism to perform up navigation.</p> 4860dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * 4861dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * @param targetIntent An intent representing the target destination for up navigation 4862dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * @return true if navigating up should recreate a new task stack, false if the same task 4863dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * should be used for the destination 4864dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell */ 4865dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell public boolean shouldUpRecreateTask(Intent targetIntent) { 4866dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell try { 4867dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell PackageManager pm = getPackageManager(); 4868dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell ComponentName cn = targetIntent.getComponent(); 4869dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell if (cn == null) { 4870dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell cn = targetIntent.resolveActivity(pm); 4871dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } 4872dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell ActivityInfo info = pm.getActivityInfo(cn, 0); 4873dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell if (info.taskAffinity == null) { 4874dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell return false; 4875dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } 4876dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell return !ActivityManagerNative.getDefault() 4877dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell .targetTaskAffinityMatchesActivity(mToken, info.taskAffinity); 4878dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } catch (RemoteException e) { 4879dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell return false; 4880dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } catch (NameNotFoundException e) { 4881dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell return false; 4882dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } 4883dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } 4884dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell 4885dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell /** 4886dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * Navigate from this activity to the activity specified by upIntent, finishing this activity 4887dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * in the process. If the activity indicated by upIntent already exists in the task's history, 4888dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * this activity and all others before the indicated activity in the history stack will be 488935c064b2e895328022f7ac02587ec9bb69895c74Adam Powell * finished. 489035c064b2e895328022f7ac02587ec9bb69895c74Adam Powell * 489135c064b2e895328022f7ac02587ec9bb69895c74Adam Powell * <p>If the indicated activity does not appear in the history stack, this will finish 489235c064b2e895328022f7ac02587ec9bb69895c74Adam Powell * each activity in this task until the root activity of the task is reached, resulting in 489335c064b2e895328022f7ac02587ec9bb69895c74Adam Powell * an "in-app home" behavior. This can be useful in apps with a complex navigation hierarchy 489435c064b2e895328022f7ac02587ec9bb69895c74Adam Powell * when an activity may be reached by a path not passing through a canonical parent 489535c064b2e895328022f7ac02587ec9bb69895c74Adam Powell * activity.</p> 4896dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * 4897dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * <p>This method should be used when performing up navigation from within the same task 4898dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * as the destination. If up navigation should cross tasks in some cases, see 4899dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * {@link #shouldUpRecreateTask(Intent)}.</p> 4900dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * 4901dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * @param upIntent An intent representing the target destination for up navigation 4902dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * 4903dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * @return true if up navigation successfully reached the activity indicated by upIntent and 4904dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * upIntent was delivered to it. false if an instance of the indicated activity could 4905dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * not be found and this activity was simply finished normally. 4906dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell */ 4907dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell public boolean navigateUpTo(Intent upIntent) { 4908dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell if (mParent == null) { 4909dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell ComponentName destInfo = upIntent.getComponent(); 4910dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell if (destInfo == null) { 4911dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell destInfo = upIntent.resolveActivity(getPackageManager()); 4912dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell if (destInfo == null) { 4913dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell return false; 4914dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } 4915dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell upIntent = new Intent(upIntent); 4916dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell upIntent.setComponent(destInfo); 4917dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } 4918dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell int resultCode; 4919dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell Intent resultData; 4920dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell synchronized (this) { 4921dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell resultCode = mResultCode; 4922dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell resultData = mResultData; 4923dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } 4924dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell if (resultData != null) { 4925dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell resultData.setAllowFds(false); 4926dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } 4927dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell try { 4928dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell return ActivityManagerNative.getDefault().navigateUpTo(mToken, upIntent, 4929dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell resultCode, resultData); 4930dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } catch (RemoteException e) { 4931dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell return false; 4932dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } 4933dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } else { 4934dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell return mParent.navigateUpToFromChild(this, upIntent); 4935dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } 4936dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } 4937dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell 4938dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell /** 4939dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * This is called when a child activity of this one calls its 4940dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * {@link #navigateUpTo} method. The default implementation simply calls 4941dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * navigateUpTo(upIntent) on this activity (the parent). 4942dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * 4943dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * @param child The activity making the call. 4944dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * @param upIntent An intent representing the target destination for up navigation 4945dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * 4946dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * @return true if up navigation successfully reached the activity indicated by upIntent and 4947dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * upIntent was delivered to it. false if an instance of the indicated activity could 4948dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * not be found and this activity was simply finished normally. 4949dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell */ 4950dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell public boolean navigateUpToFromChild(Activity child, Intent upIntent) { 4951dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell return navigateUpTo(upIntent); 4952dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } 4953dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell 4954dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell /** 4955dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * Obtain an {@link Intent} that will launch an explicit target activity specified by 4956dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * this activity's logical parent. The logical parent is named in the application's manifest 4957dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * by the {@link android.R.attr#parentActivityName parentActivityName} attribute. 495804d5811500874d44010df2b4ce37a0b21095168fAdam Powell * Activity subclasses may override this method to modify the Intent returned by 495904d5811500874d44010df2b4ce37a0b21095168fAdam Powell * super.getParentActivityIntent() or to implement a different mechanism of retrieving 496004d5811500874d44010df2b4ce37a0b21095168fAdam Powell * the parent intent entirely. 4961dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell * 496204d5811500874d44010df2b4ce37a0b21095168fAdam Powell * @return a new Intent targeting the defined parent of this activity or null if 496304d5811500874d44010df2b4ce37a0b21095168fAdam Powell * there is no valid parent. 4964dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell */ 4965dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell public Intent getParentActivityIntent() { 496604d5811500874d44010df2b4ce37a0b21095168fAdam Powell final String parentName = mActivityInfo.parentActivityName; 496704d5811500874d44010df2b4ce37a0b21095168fAdam Powell if (TextUtils.isEmpty(parentName)) { 496804d5811500874d44010df2b4ce37a0b21095168fAdam Powell return null; 496904d5811500874d44010df2b4ce37a0b21095168fAdam Powell } 497004d5811500874d44010df2b4ce37a0b21095168fAdam Powell return new Intent().setClassName(this, parentName); 4971dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell } 4972dd8fab2629131b09367df747afd9a61e42dd1992Adam Powell 49739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // ------------------ Internal API ------------------ 49749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 49759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void setParent(Activity parent) { 49769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent = parent; 49779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 49789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 49799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void attach(Context context, ActivityThread aThread, Instrumentation instr, IBinder token, 49809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Application application, Intent intent, ActivityInfo info, CharSequence title, 4981b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Activity parent, String id, NonConfigurationInstances lastNonConfigurationInstances, 49829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Configuration config) { 4983b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn attach(context, aThread, instr, token, 0, application, intent, info, title, parent, id, 4984b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn lastNonConfigurationInstances, config); 49859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 49869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4987b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn final void attach(Context context, ActivityThread aThread, 4988b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn Instrumentation instr, IBinder token, int ident, 4989b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn Application application, Intent intent, ActivityInfo info, 4990b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn CharSequence title, Activity parent, String id, 4991b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn NonConfigurationInstances lastNonConfigurationInstances, 4992b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn Configuration config) { 49939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project attachBaseContext(context); 49949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 49952dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mFragments.attachActivity(this); 49962dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 49979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow = PolicyManager.makeNewWindow(this); 49989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.setCallback(this); 4999420829ef78c5d86e470fc445279c7c10be6b5dbeDianne Hackborn mWindow.getLayoutInflater().setPrivateFactory(this); 50009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (info.softInputMode != WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED) { 50019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.setSoftInputMode(info.softInputMode); 50029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5003269248d112e35fe8e9f0d5d11c96dcb2ac1118b0Adam Powell if (info.uiOptions != 0) { 5004269248d112e35fe8e9f0d5d11c96dcb2ac1118b0Adam Powell mWindow.setUiOptions(info.uiOptions); 5005269248d112e35fe8e9f0d5d11c96dcb2ac1118b0Adam Powell } 50069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mUiThread = Thread.currentThread(); 5007529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy 50089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMainThread = aThread; 50099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentation = instr; 50109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mToken = token; 5011b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn mIdent = ident; 50129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mApplication = application; 50139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIntent = intent; 50149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mComponent = intent.getComponent(); 50159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mActivityInfo = info; 50169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTitle = title; 50179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent = parent; 50189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEmbeddedID = id; 5019b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mLastNonConfigurationInstances = lastNonConfigurationInstances; 50209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5021529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy mWindow.setWindowManager(null, mToken, mComponent.flattenToString(), 5022529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy (info.flags & ActivityInfo.FLAG_HARDWARE_ACCELERATED) != 0); 50239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent != null) { 50249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.setContainer(mParent.getWindow()); 50259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 50269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindowManager = mWindow.getWindowManager(); 50279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCurrentConfig = config; 50289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 50299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 50305320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn /** @hide */ 50315320eb8938098c9824093f7f842a0a97bbc190a4Dianne Hackborn public final IBinder getActivityToken() { 50329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParent != null ? mParent.getActivityToken() : mToken; 50339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 50349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 50352dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn final void performCreate(Bundle icicle) { 50362dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn onCreate(icicle); 503730c9bd89556137157b2f686637ece961454ccabeDianne Hackborn mVisibleFromClient = !mWindow.getWindowStyle().getBoolean( 503830c9bd89556137157b2f686637ece961454ccabeDianne Hackborn com.android.internal.R.styleable.Window_windowNoDisplay, false); 5039c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn mFragments.dispatchActivityCreated(); 50402dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 50412dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 50429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void performStart() { 5043fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn mFragments.noteStateNotSaved(); 50449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = false; 5045445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn mFragments.execPendingActions(); 50469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentation.callActivityOnStart(this); 50479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mCalled) { 50489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new SuperNotCalledException( 50499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Activity " + mComponent.toShortString() + 50509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " did not call through to super.onStart()"); 50519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 50522dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mFragments.dispatchStart(); 50532707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn if (mAllLoaderManagers != null) { 50542707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn for (int i=mAllLoaderManagers.size()-1; i>=0; i--) { 5055afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn LoaderManagerImpl lm = mAllLoaderManagers.valueAt(i); 5056afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn lm.finishRetain(); 5057afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn lm.doReportStart(); 50582707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } 50592707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } 50609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 50619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 50629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void performRestart() { 5063fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn mFragments.noteStateNotSaved(); 5064a21e3da55940e239addd80bf379091a1d85d006fDianne Hackborn 50659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mStopped) { 50669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStopped = false; 5067ce418e661ab52a08a2a2c3b2f10a4dd9adf33305Dianne Hackborn if (mToken != null && mParent == null) { 5068ce418e661ab52a08a2a2c3b2f10a4dd9adf33305Dianne Hackborn WindowManagerImpl.getDefault().setStoppedState(mToken, false); 5069ce418e661ab52a08a2a2c3b2f10a4dd9adf33305Dianne Hackborn } 5070185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn 5071185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn synchronized (mManagedCursors) { 5072185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn final int N = mManagedCursors.size(); 5073185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn for (int i=0; i<N; i++) { 5074185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn ManagedCursor mc = mManagedCursors.get(i); 5075185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn if (mc.mReleased || mc.mUpdated) { 5076185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn if (!mc.mCursor.requery()) { 5077a5445d3bbd7985ffeeeabc3813bec3d1e0463ceaDianne Hackborn if (getApplicationInfo().targetSdkVersion 5078a5445d3bbd7985ffeeeabc3813bec3d1e0463ceaDianne Hackborn >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH) { 5079a5445d3bbd7985ffeeeabc3813bec3d1e0463ceaDianne Hackborn throw new IllegalStateException( 5080a5445d3bbd7985ffeeeabc3813bec3d1e0463ceaDianne Hackborn "trying to requery an already closed cursor " 5081a5445d3bbd7985ffeeeabc3813bec3d1e0463ceaDianne Hackborn + mc.mCursor); 5082a5445d3bbd7985ffeeeabc3813bec3d1e0463ceaDianne Hackborn } 5083185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn } 5084185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn mc.mReleased = false; 5085185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn mc.mUpdated = false; 5086185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn } 5087185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn } 5088185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn } 5089185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn 5090185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn mCalled = false; 50919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentation.callActivityOnRestart(this); 50929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mCalled) { 50939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new SuperNotCalledException( 50949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Activity " + mComponent.toShortString() + 50959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " did not call through to super.onRestart()"); 50969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 50979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project performStart(); 50989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 50999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 51009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 51019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void performResume() { 51029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project performRestart(); 51039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5104445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn mFragments.execPendingActions(); 5105445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn 5106b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mLastNonConfigurationInstances = null; 51079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 51089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = false; 510952d3203ef69d4babbc4dd030a15c08c0b8d1d226Jeff Hamilton // mResumed is set by the instrumentation 51109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentation.callActivityOnResume(this); 51119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mCalled) { 51129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new SuperNotCalledException( 51139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Activity " + mComponent.toShortString() + 51149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " did not call through to super.onResume()"); 51159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 51169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 51179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Now really resume, and install the current status bar and menu. 51189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = false; 51192dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 51202dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mFragments.dispatchResume(); 5121445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn mFragments.execPendingActions(); 51222dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 51239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onPostResume(); 51249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mCalled) { 51259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new SuperNotCalledException( 51269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Activity " + mComponent.toShortString() + 51279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " did not call through to super.onPostResume()"); 51289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 51299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 51309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 51319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void performPause() { 51322dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mFragments.dispatchPause(); 5133e794e9f9b7599c1ad6b8760e601c81b19ecc80c6Dianne Hackborn mCalled = false; 51349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onPause(); 51354eba96bb314d8ff773ea33d6cb3179f25751ecceDianne Hackborn mResumed = false; 5136e794e9f9b7599c1ad6b8760e601c81b19ecc80c6Dianne Hackborn if (!mCalled && getApplicationInfo().targetSdkVersion 5137e794e9f9b7599c1ad6b8760e601c81b19ecc80c6Dianne Hackborn >= android.os.Build.VERSION_CODES.GINGERBREAD) { 5138e794e9f9b7599c1ad6b8760e601c81b19ecc80c6Dianne Hackborn throw new SuperNotCalledException( 5139e794e9f9b7599c1ad6b8760e601c81b19ecc80c6Dianne Hackborn "Activity " + mComponent.toShortString() + 5140e794e9f9b7599c1ad6b8760e601c81b19ecc80c6Dianne Hackborn " did not call through to super.onPause()"); 5141e794e9f9b7599c1ad6b8760e601c81b19ecc80c6Dianne Hackborn } 514252d3203ef69d4babbc4dd030a15c08c0b8d1d226Jeff Hamilton mResumed = false; 51439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 51449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 51459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void performUserLeaving() { 51469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onUserInteraction(); 51479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onUserLeaveHint(); 51489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 51499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 51509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void performStop() { 5151fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn if (mLoadersStarted) { 5152fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn mLoadersStarted = false; 51532707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn if (mLoaderManager != null) { 51542707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn if (!mChangingConfigurations) { 51552707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn mLoaderManager.doStop(); 51562707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } else { 51572707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn mLoaderManager.doRetain(); 51582707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } 51592707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } 51602707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } 51612707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn 51629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mStopped) { 51639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mWindow != null) { 51649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.closeAllPanels(); 51659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 51669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5167ce418e661ab52a08a2a2c3b2f10a4dd9adf33305Dianne Hackborn if (mToken != null && mParent == null) { 5168ce418e661ab52a08a2a2c3b2f10a4dd9adf33305Dianne Hackborn WindowManagerImpl.getDefault().setStoppedState(mToken, true); 5169ce418e661ab52a08a2a2c3b2f10a4dd9adf33305Dianne Hackborn } 5170ce418e661ab52a08a2a2c3b2f10a4dd9adf33305Dianne Hackborn 51712dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mFragments.dispatchStop(); 51722dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 51739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = false; 51749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentation.callActivityOnStop(this); 51759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mCalled) { 51769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new SuperNotCalledException( 51779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Activity " + mComponent.toShortString() + 51789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " did not call through to super.onStop()"); 51799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 51809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 51812f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki synchronized (mManagedCursors) { 51822f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki final int N = mManagedCursors.size(); 51832f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki for (int i=0; i<N; i++) { 51842f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki ManagedCursor mc = mManagedCursors.get(i); 51852f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki if (!mc.mReleased) { 51862f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki mc.mCursor.deactivate(); 51872f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki mc.mReleased = true; 51882f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki } 51899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 51909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 51919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 51929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStopped = true; 51939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 51949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mResumed = false; 51959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 51969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 51972dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn final void performDestroy() { 5198291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn mWindow.destroy(); 51992dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mFragments.dispatchDestroy(); 52002dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn onDestroy(); 52015e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn if (mLoaderManager != null) { 52025e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn mLoaderManager.doDestroy(); 52035e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn } 52042dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 52052dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 520652d3203ef69d4babbc4dd030a15c08c0b8d1d226Jeff Hamilton /** 520752d3203ef69d4babbc4dd030a15c08c0b8d1d226Jeff Hamilton * @hide 520852d3203ef69d4babbc4dd030a15c08c0b8d1d226Jeff Hamilton */ 520952d3203ef69d4babbc4dd030a15c08c0b8d1d226Jeff Hamilton public final boolean isResumed() { 52109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mResumed; 52119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 52129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 52139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void dispatchActivityResult(String who, int requestCode, 52149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int resultCode, Intent data) { 521543a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato if (false) Log.v( 52169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TAG, "Dispatching result: who=" + who + ", reqCode=" + requestCode 52179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + ", resCode=" + resultCode + ", data=" + data); 5218fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn mFragments.noteStateNotSaved(); 52199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (who == null) { 52209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onActivityResult(requestCode, resultCode, data); 52216e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } else { 52226e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn Fragment frag = mFragments.findFragmentByWho(who); 52236e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (frag != null) { 52246e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn frag.onActivityResult(requestCode, resultCode, data); 52256e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 52269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 52279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 52289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5229