Activity.java revision 88ab69780f58e4b32d497266b2ad646a4d74827b
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 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ComponentCallbacks; 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; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.Configuration; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.Resources; 34ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackbornimport android.content.res.TypedArray; 3588ab69780f58e4b32d497266b2ad646a4d74827bAdam Powellimport android.content.res.Resources.Theme; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.Cursor; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Bitmap; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Canvas; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.drawable.Drawable; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.media.AudioManager; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri; 428d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackbornimport android.os.Build; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Bundle; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Handler; 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.IBinder; 4630c9bd89556137157b2f686637ece961454ccabeDianne Hackbornimport android.os.Looper; 47b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackbornimport android.os.Parcelable; 4875986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganovimport android.os.RemoteException; 49758035757f11a085a12b54daa9467f1d6bb251efBrad Fitzpatrickimport android.os.StrictMode; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.Selection; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.SpannableStringBuilder; 5275986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganovimport android.text.TextUtils; 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.method.TextKeyListener; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.EventLog; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.SparseArray; 5888ab69780f58e4b32d497266b2ad646a4d74827bAdam Powellimport android.util.TypedValue; 596e34636749217654f43221885afb7a29bb5ca96aAdam Powellimport android.view.ActionMode; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.ContextMenu; 616e34636749217654f43221885afb7a29bb5ca96aAdam Powellimport android.view.ContextMenu.ContextMenuInfo; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.ContextThemeWrapper; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.KeyEvent; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.LayoutInflater; 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.Menu; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.MenuInflater; 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.MenuItem; 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.MotionEvent; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View; 70ce418e661ab52a08a2a2c3b2f10a4dd9adf33305Dianne Hackbornimport android.view.WindowManagerImpl; 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; 7775986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganovimport android.view.accessibility.AccessibilityEvent; 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.AdapterView; 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 80625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackbornimport java.io.FileDescriptor; 81625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackbornimport java.io.PrintWriter; 826e34636749217654f43221885afb7a29bb5ca96aAdam Powellimport java.util.ArrayList; 836e34636749217654f43221885afb7a29bb5ca96aAdam Powellimport java.util.HashMap; 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * An activity is a single, focused thing that the user can do. Almost all 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activities interact with the user, so the Activity class takes care of 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * creating a window for you in which you can place your UI with 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setContentView}. While activities are often presented to the user 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as full-screen windows, they can also be used in other ways: as floating 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * windows (via a theme with {@link android.R.attr#windowIsFloating} set) 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or embedded inside of another activity (using {@link ActivityGroup}). 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * There are two methods almost all subclasses of Activity will implement: 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul> 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> {@link #onCreate} is where you initialize your activity. Most 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * importantly, here you will usually call {@link #setContentView(int)} 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with a layout resource defining your UI, and using {@link #findViewById} 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to retrieve the widgets in that UI that you need to interact with 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * programmatically. 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> {@link #onPause} is where you deal with the user leaving your 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity. Most importantly, any changes made by the user should at this 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * point be committed (usually to the 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.content.ContentProvider} holding the data). 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul> 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>To be of use with {@link android.content.Context#startActivity Context.startActivity()}, all 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity classes must have a corresponding 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.styleable#AndroidManifestActivity <activity>} 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * declaration in their package's <code>AndroidManifest.xml</code>.</p> 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The Activity class is an important part of an application's overall lifecycle, 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and the way activities are launched and put together is a fundamental 1167aee61f5a96e94e158bf5ad3d8e192c4d4f7eff6Scott Main * part of the platform's application model. For a detailed perspective on the structure of an 1177aee61f5a96e94e158bf5ad3d8e192c4d4f7eff6Scott Main * Android application and how activities behave, please read the 1187aee61f5a96e94e158bf5ad3d8e192c4d4f7eff6Scott Main * <a href="{@docRoot}guide/topics/fundamentals.html">Application Fundamentals</a> and 1197aee61f5a96e94e158bf5ad3d8e192c4d4f7eff6Scott Main * <a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back Stack</a> 1207aee61f5a96e94e158bf5ad3d8e192c4d4f7eff6Scott Main * documents.</p> 1217aee61f5a96e94e158bf5ad3d8e192c4d4f7eff6Scott Main * 1227aee61f5a96e94e158bf5ad3d8e192c4d4f7eff6Scott Main * <p>You can also find a detailed discussion about how to create activities in the 1237aee61f5a96e94e158bf5ad3d8e192c4d4f7eff6Scott Main * <a href="{@docRoot}guide/topics/fundamentals/activities.html">Activities</a> 1247aee61f5a96e94e158bf5ad3d8e192c4d4f7eff6Scott Main * document.</p> 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Topics covered here: 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ol> 128291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <li><a href="#Fragments">Fragments</a> 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><a href="#ActivityLifecycle">Activity Lifecycle</a> 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><a href="#ConfigurationChanges">Configuration Changes</a> 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><a href="#StartingActivities">Starting Activities and Getting Results</a> 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><a href="#SavingPersistentState">Saving Persistent State</a> 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><a href="#Permissions">Permissions</a> 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><a href="#ProcessLifecycle">Process Lifecycle</a> 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ol> 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 137291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <a name="Fragments"></a> 138291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <h3>Fragments</h3> 139291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 140291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <p>Starting with {@link android.os.Build.VERSION_CODES#HONEYCOMB}, Activity 141291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * implementations can make use of the {@link Fragment} class to better 142291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * modularize their code, build more sophisticated user interfaces for larger 143291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * screens, and help scale their application between small and large screens. 144291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <a name="ActivityLifecycle"></a> 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <h3>Activity Lifecycle</h3> 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Activities in the system are managed as an <em>activity stack</em>. 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When a new activity is started, it is placed on the top of the stack 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and becomes the running activity -- the previous activity always remains 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * below it in the stack, and will not come to the foreground again until 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the new activity exits.</p> 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>An activity has essentially four states:</p> 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul> 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> If an activity in the foreground of the screen (at the top of 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the stack), 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it is <em>active</em> or <em>running</em>. </li> 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>If an activity has lost focus but is still visible (that is, a new non-full-sized 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or transparent activity has focus on top of your activity), it 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is <em>paused</em>. A paused activity is completely alive (it 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * maintains all state and member information and remains attached to 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the window manager), but can be killed by the system in extreme 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * low memory situations. 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>If an activity is completely obscured by another activity, 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it is <em>stopped</em>. It still retains all state and member information, 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * however, it is no longer visible to the user so its window is hidden 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and it will often be killed by the system when memory is needed 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * elsewhere.</li> 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>If an activity is paused or stopped, the system can drop the activity 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from memory by either asking it to finish, or simply killing its 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * process. When it is displayed again to the user, it must be 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * completely restarted and restored to its previous state.</li> 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul> 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The following diagram shows the important state paths of an Activity. 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The square rectangles represent callback methods you can implement to 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * perform operations when the Activity moves between states. The colored 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ovals are major states the Activity can be in.</p> 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><img src="../../../images/activity_lifecycle.png" 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * alt="State diagram for an Android Activity Lifecycle." border="0" /></p> 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>There are three key loops you may be interested in monitoring within your 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity: 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul> 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>The <b>entire lifetime</b> of an activity happens between the first call 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to {@link android.app.Activity#onCreate} through to a single final call 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to {@link android.app.Activity#onDestroy}. An activity will do all setup 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of "global" state in onCreate(), and release all remaining resources in 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onDestroy(). For example, if it has a thread running in the background 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to download data from the network, it may create that thread in onCreate() 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and then stop the thread in onDestroy(). 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>The <b>visible lifetime</b> of an activity happens between a call to 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.app.Activity#onStart} until a corresponding call to 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.app.Activity#onStop}. During this time the user can see the 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity on-screen, though it may not be in the foreground and interacting 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with the user. Between these two methods you can maintain resources that 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are needed to show the activity to the user. For example, you can register 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a {@link android.content.BroadcastReceiver} in onStart() to monitor for changes 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that impact your UI, and unregister it in onStop() when the user an no 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * longer see what you are displaying. The onStart() and onStop() methods 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can be called multiple times, as the activity becomes visible and hidden 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the user. 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>The <b>foreground lifetime</b> of an activity happens between a call to 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.app.Activity#onResume} until a corresponding call to 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.app.Activity#onPause}. During this time the activity is 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in front of all other activities and interacting with the user. An activity 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can frequently go between the resumed and paused states -- for example when 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the device goes to sleep, when an activity result is delivered, when a new 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * intent is delivered -- so the code in these methods should be fairly 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * lightweight. 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul> 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The entire lifecycle of an activity is defined by the following 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Activity methods. All of these are hooks that you can override 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to do appropriate work when the activity changes state. All 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activities will implement {@link android.app.Activity#onCreate} 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to do their initial setup; many will also implement 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.app.Activity#onPause} to commit changes to data and 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * otherwise prepare to stop interacting with the user. You should always 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * call up to your superclass when implementing these methods.</p> 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p> 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <pre class="prettyprint"> 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * public class Activity extends ApplicationContext { 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onCreate(Bundle savedInstanceState); 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onStart(); 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onRestart(); 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onResume(); 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onPause(); 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onStop(); 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onDestroy(); 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </pre> 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>In general the movement through an activity's lifecycle looks like 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this:</p> 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <table border="2" width="85%" align="center" frame="hsides" rules="rows"> 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <colgroup align="left" span="3" /> 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <colgroup align="left" /> 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <colgroup align="center" /> 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <colgroup align="center" /> 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <thead> 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><th colspan="3">Method</th> <th>Description</th> <th>Killable?</th> <th>Next</th></tr> 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </thead> 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tbody> 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><th colspan="3" align="left" border="0">{@link android.app.Activity#onCreate onCreate()}</th> 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>Called when the activity is first created. 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is where you should do all of your normal static set up: 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * create views, bind data to lists, etc. This method also 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * provides you with a Bundle containing the activity's previously 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * frozen state, if there was one. 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Always followed by <code>onStart()</code>.</td> 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center">No</td> 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><code>onStart()</code></td> 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td rowspan="5" style="border-left: none; border-right: none;"> </td> 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <th colspan="2" align="left" border="0">{@link android.app.Activity#onRestart onRestart()}</th> 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>Called after your activity has been stopped, prior to it being 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * started again. 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Always followed by <code>onStart()</code></td> 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center">No</td> 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><code>onStart()</code></td> 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><th colspan="2" align="left" border="0">{@link android.app.Activity#onStart onStart()}</th> 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>Called when the activity is becoming visible to the user. 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Followed by <code>onResume()</code> if the activity comes 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the foreground, or <code>onStop()</code> if it becomes hidden.</td> 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center">No</td> 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><code>onResume()</code> or <code>onStop()</code></td> 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td rowspan="2" style="border-left: none;"> </td> 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <th align="left" border="0">{@link android.app.Activity#onResume onResume()}</th> 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>Called when the activity will start 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * interacting with the user. At this point your activity is at 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the top of the activity stack, with user input going to it. 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Always followed by <code>onPause()</code>.</td> 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center">No</td> 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><code>onPause()</code></td> 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><th align="left" border="0">{@link android.app.Activity#onPause onPause()}</th> 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>Called when the system is about to start resuming a previous 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity. This is typically used to commit unsaved changes to 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * persistent data, stop animations and other things that may be consuming 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * CPU, etc. Implementations of this method must be very quick because 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the next activity will not be resumed until this method returns. 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Followed by either <code>onResume()</code> if the activity 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returns back to the front, or <code>onStop()</code> if it becomes 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * invisible to the user.</td> 3070aae2d4e0075fd699cf40b26dca0eb2c3b3e37d2Dianne Hackborn * <td align="center"><font color="#800000"><strong>Pre-{@link android.os.Build.VERSION_CODES#HONEYCOMB}</strong></font></td> 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><code>onResume()</code> or<br> 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>onStop()</code></td> 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><th colspan="2" align="left" border="0">{@link android.app.Activity#onStop onStop()}</th> 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>Called when the activity is no longer visible to the user, because 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * another activity has been resumed and is covering this one. This 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * may happen either because a new activity is being started, an existing 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * one is being brought in front of this one, or this one is being 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * destroyed. 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Followed by either <code>onRestart()</code> if 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this activity is coming back to interact with the user, or 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>onDestroy()</code> if this activity is going away.</td> 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><font color="#800000"><strong>Yes</strong></font></td> 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><code>onRestart()</code> or<br> 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>onDestroy()</code></td> 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><th colspan="3" align="left" border="0">{@link android.app.Activity#onDestroy onDestroy()}</th> 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>The final call you receive before your 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity is destroyed. This can happen either because the 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity is finishing (someone called {@link Activity#finish} on 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it, or because the system is temporarily destroying this 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * instance of the activity to save space. You can distinguish 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * between these two scenarios with the {@link 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Activity#isFinishing} method.</td> 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><font color="#800000"><strong>Yes</strong></font></td> 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><em>nothing</em></td> 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tbody> 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </table> 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note the "Killable" column in the above table -- for those methods that 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are marked as being killable, after that method returns the process hosting the 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity may killed by the system <em>at any time</em> without another line 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of its code being executed. Because of this, you should use the 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onPause} method to write any persistent data (such as user edits) 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to storage. In addition, the method 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onSaveInstanceState(Bundle)} is called before placing the activity 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in such a background state, allowing you to save away any dynamic instance 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * state in your activity into the given Bundle, to be later received in 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onCreate} if the activity needs to be re-created. 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the <a href="#ProcessLifecycle">Process Lifecycle</a> 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * section for more information on how the lifecycle of a process is tied 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the activities it is hosting. Note that it is important to save 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * persistent data in {@link #onPause} instead of {@link #onSaveInstanceState} 3545c40f3fcc966ecde3347cd7ddbe965440318c35aDaisuke Miyakawa * because the latter is not part of the lifecycle callbacks, so will not 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be called in every situation as described in its documentation.</p> 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3570aae2d4e0075fd699cf40b26dca0eb2c3b3e37d2Dianne Hackborn * <p class="note">Be aware that these semantics will change slightly between 3580aae2d4e0075fd699cf40b26dca0eb2c3b3e37d2Dianne Hackborn * applications targeting platforms starting with {@link android.os.Build.VERSION_CODES#HONEYCOMB} 3590aae2d4e0075fd699cf40b26dca0eb2c3b3e37d2Dianne Hackborn * vs. those targeting prior platforms. Starting with Honeycomb, an application 3600aae2d4e0075fd699cf40b26dca0eb2c3b3e37d2Dianne Hackborn * is not in the killable state until its {@link #onStop} has returned. This 3610aae2d4e0075fd699cf40b26dca0eb2c3b3e37d2Dianne Hackborn * impacts when {@link #onSaveInstanceState(Bundle)} may be called (it may be 3620aae2d4e0075fd699cf40b26dca0eb2c3b3e37d2Dianne Hackborn * safely called after {@link #onPause()} and allows and application to safely 3630aae2d4e0075fd699cf40b26dca0eb2c3b3e37d2Dianne Hackborn * wait until {@link #onStop()} to save persistent state.</p> 3640aae2d4e0075fd699cf40b26dca0eb2c3b3e37d2Dianne Hackborn * 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>For those methods that are not marked as being killable, the activity's 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * process will not be killed by the system starting from the time the method 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is called and continuing after it returns. Thus an activity is in the killable 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * state, for example, between after <code>onPause()</code> to the start of 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>onResume()</code>.</p> 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <a name="ConfigurationChanges"></a> 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <h3>Configuration Changes</h3> 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>If the configuration of the device (as defined by the 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Configuration Resources.Configuration} class) changes, 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * then anything displaying a user interface will need to update to match that 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * configuration. Because Activity is the primary mechanism for interacting 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with the user, it includes special support for handling configuration 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * changes.</p> 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Unless you specify otherwise, a configuration change (such as a change 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in screen orientation, language, input devices, etc) will cause your 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current activity to be <em>destroyed</em>, going through the normal activity 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * lifecycle process of {@link #onPause}, 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onStop}, and {@link #onDestroy} as appropriate. If the activity 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * had been in the foreground or visible to the user, once {@link #onDestroy} is 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * called in that instance then a new instance of the activity will be 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * created, with whatever savedInstanceState the previous instance had generated 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from {@link #onSaveInstanceState}.</p> 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This is done because any application resource, 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * including layout files, can change based on any configuration value. Thus 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the only safe way to handle a configuration change is to re-retrieve all 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resources, including layouts, drawables, and strings. Because activities 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * must already know how to save their state and re-create themselves from 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that state, this is a convenient way to have an activity restart itself 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with a new configuration.</p> 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>In some special cases, you may want to bypass restarting of your 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity based on one or more types of configuration changes. This is 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * done with the {@link android.R.attr#configChanges android:configChanges} 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * attribute in its manifest. For any types of configuration changes you say 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that you handle there, you will receive a call to your current activity's 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onConfigurationChanged} method instead of being restarted. If 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a configuration change involves any that you do not handle, however, the 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity will still be restarted and {@link #onConfigurationChanged} 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will not be called.</p> 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <a name="StartingActivities"></a> 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <h3>Starting Activities and Getting Results</h3> 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The {@link android.app.Activity#startActivity} 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * method is used to start a 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * new activity, which will be placed at the top of the activity stack. It 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * takes a single argument, an {@link android.content.Intent Intent}, 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * which describes the activity 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to be executed.</p> 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Sometimes you want to get a result back from an activity when it 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ends. For example, you may start an activity that lets the user pick 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a person in a list of contacts; when it ends, it returns the person 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that was selected. To do this, you call the 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.app.Activity#startActivityForResult(Intent, int)} 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * version with a second integer parameter identifying the call. The result 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will come back through your {@link android.app.Activity#onActivityResult} 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * method.</p> 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>When an activity exits, it can call 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.app.Activity#setResult(int)} 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to return data back to its parent. It must always supply a result code, 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * which can be the standard results RESULT_CANCELED, RESULT_OK, or any 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * custom values starting at RESULT_FIRST_USER. In addition, it can optionally 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * return back an Intent containing any additional data it wants. All of this 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * information appears back on the 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * parent's <code>Activity.onActivityResult()</code>, along with the integer 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * identifier it originally supplied.</p> 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>If a child activity fails for any reason (such as crashing), the parent 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity will receive a result with the code RESULT_CANCELED.</p> 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <pre class="prettyprint"> 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * public class MyActivity extends Activity { 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ... 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * static final int PICK_CONTACT_REQUEST = 0; 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected boolean onKeyDown(int keyCode, KeyEvent event) { 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // When the user center presses, let them pick a contact. 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * startActivityForResult( 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * new Intent(Intent.ACTION_PICK, 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * new Uri("content://contacts")), 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * PICK_CONTACT_REQUEST); 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * return true; 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * return false; 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onActivityResult(int requestCode, int resultCode, 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Intent data) { 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if (requestCode == PICK_CONTACT_REQUEST) { 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if (resultCode == RESULT_OK) { 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // A contact was picked. Here we will just display it 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // to the user. 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * startActivity(new Intent(Intent.ACTION_VIEW, data)); 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </pre> 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <a name="SavingPersistentState"></a> 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <h3>Saving Persistent State</h3> 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>There are generally two kinds of persistent state than an activity 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will deal with: shared document-like data (typically stored in a SQLite 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * database using a {@linkplain android.content.ContentProvider content provider}) 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and internal state such as user preferences.</p> 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>For content provider data, we suggest that activities use a 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * "edit in place" user model. That is, any edits a user makes are effectively 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * made immediately without requiring an additional confirmation step. 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Supporting this model is generally a simple matter of following two rules:</p> 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul> 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> <p>When creating a new document, the backing database entry or file for 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it is created immediately. For example, if the user chooses to write 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a new e-mail, a new entry for that e-mail is created as soon as they 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * start entering data, so that if they go to any other activity after 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that point this e-mail will now appear in the list of drafts.</p> 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> <p>When an activity's <code>onPause()</code> method is called, it should 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * commit to the backing content provider or file any changes the user 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * has made. This ensures that those changes will be seen by any other 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity that is about to run. You will probably want to commit 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * your data even more aggressively at key times during your 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity's lifecycle: for example before starting a new 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity, before finishing your own activity, when the user 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * switches between input fields, etc.</p> 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul> 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This model is designed to prevent data loss when a user is navigating 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * between activities, and allows the system to safely kill an activity (because 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * system resources are needed somewhere else) at any time after it has been 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * paused. Note this implies 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that the user pressing BACK from your activity does <em>not</em> 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * mean "cancel" -- it means to leave the activity with its current contents 5070aae2d4e0075fd699cf40b26dca0eb2c3b3e37d2Dianne Hackborn * saved away. Canceling edits in an activity must be provided through 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * some other mechanism, such as an explicit "revert" or "undo" option.</p> 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>See the {@linkplain android.content.ContentProvider content package} for 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * more information about content providers. These are a key aspect of how 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * different activities invoke and propagate data between themselves.</p> 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The Activity class also provides an API for managing internal persistent state 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associated with an activity. This can be used, for example, to remember 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the user's preferred initial display in a calendar (day view or week view) 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or the user's default home page in a web browser.</p> 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Activity persistent state is managed 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with the method {@link #getPreferences}, 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * allowing you to retrieve and 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * modify a set of name/value pairs associated with the activity. To use 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * preferences that are shared across multiple application components 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (activities, receivers, services, providers), you can use the underlying 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Context#getSharedPreferences Context.getSharedPreferences()} method 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to retrieve a preferences 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * object stored under a specific name. 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (Note that it is not possible to share settings data across application 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * packages -- for that you will need a content provider.)</p> 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Here is an excerpt from a calendar activity that stores the user's 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * preferred view mode in its persistent settings:</p> 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <pre class="prettyprint"> 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * public class CalendarActivity extends Activity { 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ... 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * static final int DAY_VIEW_MODE = 0; 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * static final int WEEK_VIEW_MODE = 1; 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * private SharedPreferences mPrefs; 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * private int mCurViewMode; 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onCreate(Bundle savedInstanceState) { 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * super.onCreate(savedInstanceState); 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * SharedPreferences mPrefs = getSharedPreferences(); 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * mCurViewMode = mPrefs.getInt("view_mode" DAY_VIEW_MODE); 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onPause() { 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * super.onPause(); 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * SharedPreferences.Editor ed = mPrefs.edit(); 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ed.putInt("view_mode", mCurViewMode); 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ed.commit(); 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </pre> 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <a name="Permissions"></a> 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <h3>Permissions</h3> 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The ability to start a particular Activity can be enforced when it is 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * declared in its 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * manifest's {@link android.R.styleable#AndroidManifestActivity <activity>} 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * tag. By doing so, other applications will need to declare a corresponding 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.styleable#AndroidManifestUsesPermission <uses-permission>} 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * element in their own manifest to be able to start that activity. 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>See the <a href="{@docRoot}guide/topics/security/security.html">Security and Permissions</a> 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * document for more information on permissions and security in general. 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <a name="ProcessLifecycle"></a> 5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <h3>Process Lifecycle</h3> 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The Android system attempts to keep application process around for as 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * long as possible, but eventually will need to remove old processes when 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * memory runs low. As described in <a href="#ActivityLifecycle">Activity 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Lifecycle</a>, the decision about which process to remove is intimately 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * tied to the state of the user's interaction with it. In general, there 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are four states a process can be in based on the activities running in it, 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * listed here in order of importance. The system will kill less important 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * processes (the last ones) before it resorts to killing more important 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * processes (the first ones). 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ol> 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> <p>The <b>foreground activity</b> (the activity at the top of the screen 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that the user is currently interacting with) is considered the most important. 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Its process will only be killed as a last resort, if it uses more memory 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * than is available on the device. Generally at this point the device has 5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * reached a memory paging state, so this is required in order to keep the user 5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * interface responsive. 5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> <p>A <b>visible activity</b> (an activity that is visible to the user 5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * but not in the foreground, such as one sitting behind a foreground dialog) 5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is considered extremely important and will not be killed unless that is 5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * required to keep the foreground activity running. 5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> <p>A <b>background activity</b> (an activity that is not visible to 5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the user and has been paused) is no longer critical, so the system may 6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * safely kill its process to reclaim memory for other foreground or 6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * visible processes. If its process needs to be killed, when the user navigates 6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * back to the activity (making it visible on the screen again), its 6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onCreate} method will be called with the savedInstanceState it had previously 6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * supplied in {@link #onSaveInstanceState} so that it can restart itself in the same 6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * state as the user last left it. 6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> <p>An <b>empty process</b> is one hosting no activities or other 6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * application components (such as {@link Service} or 6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.content.BroadcastReceiver} classes). These are killed very 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * quickly by the system as memory becomes low. For this reason, any 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * background operation you do outside of an activity must be executed in the 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * context of an activity BroadcastReceiver or Service to ensure that the system 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * knows it needs to keep your process around. 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ol> 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Sometimes an Activity may need to do a long-running operation that exists 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * independently of the activity lifecycle itself. An example may be a camera 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * application that allows you to upload a picture to a web site. The upload 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * may take a long time, and the application should allow the user to leave 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the application will it is executing. To accomplish this, your Activity 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * should start a {@link Service} in which the upload takes place. This allows 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the system to properly prioritize your process (considering it to be more 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * important than other non-visible applications) for the duration of the 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * upload, independent of whether the original activity is paused, stopped, 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or finished. 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class Activity extends ContextThemeWrapper 627625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn implements LayoutInflater.Factory2, 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Window.Callback, KeyEvent.Callback, 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OnCreateContextMenuListener, ComponentCallbacks { 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String TAG = "Activity"; 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Standard activity result: operation canceled. */ 6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RESULT_CANCELED = 0; 6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Standard activity result: operation succeeded. */ 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RESULT_OK = -1; 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Start of user-defined activity results. */ 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RESULT_FIRST_USER = 1; 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String WINDOW_HIERARCHY_TAG = "android:viewHierarchyState"; 640b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn private static final String FRAGMENTS_TAG = "android:fragments"; 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String SAVED_DIALOG_IDS_KEY = "android:savedDialogIds"; 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String SAVED_DIALOGS_TAG = "android:savedDialogs"; 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String SAVED_DIALOG_KEY_PREFIX = "android:dialog_"; 6448ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn private static final String SAVED_DIALOG_ARGS_KEY_PREFIX = "android:dialog_args_"; 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6468ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn private static class ManagedDialog { 6478ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn Dialog mDialog; 6488ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn Bundle mArgs; 6498ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn } 6508ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn private SparseArray<ManagedDialog> mManagedDialogs; 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // set by the thread after the constructor and before onCreate(Bundle savedInstanceState) is called. 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Instrumentation mInstrumentation; 6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IBinder mToken; 655b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn private int mIdent; 6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ String mEmbeddedID; 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Application mApplication; 658b70f3dff01e7e1e85f77cf0b0b2eaba8200eb82cChristopher Tate /*package*/ Intent mIntent; 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ComponentName mComponent; 6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ ActivityInfo mActivityInfo; 6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ ActivityThread mMainThread; 6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Activity mParent; 6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean mCalled; 6645e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn boolean mCheckedForLoaderManager; 665fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn boolean mLoadersStarted; 66652d3203ef69d4babbc4dd030a15c08c0b8d1d226Jeff Hamilton /*package*/ boolean mResumed; 6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mStopped; 6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean mFinished; 6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean mStartedActivity; 670fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn /** true if the activity is going through a transient pause */ 671fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn /*package*/ boolean mTemporaryPause = false; 6723d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton /** true if the activity is being destroyed in order to recreate it with a new configuration */ 6733d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton /*package*/ boolean mChangingConfigurations = false; 6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ int mConfigChangeFlags; 6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ Configuration mCurrentConfig; 6768d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert private SearchManager mSearchManager; 67788ab69780f58e4b32d497266b2ad646a4d74827bAdam Powell private MenuInflater mMenuInflater; 6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 679b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn static final class NonConfigurationInstances { 680b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Object activity; 681b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn HashMap<String, Object> children; 682b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ArrayList<Fragment> fragments; 6834911b783aa9f4af5ac919db861751d350471f5efDianne Hackborn SparseArray<LoaderManagerImpl> loaders; 684b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 685b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn /* package */ NonConfigurationInstances mLastNonConfigurationInstances; 686b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Window mWindow; 6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private WindowManager mWindowManager; 6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ View mDecor = null; 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ boolean mWindowAdded = false; 6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ boolean mVisibleFromServer = false; 6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ boolean mVisibleFromClient = true; 694ac695c608ba620e2362f57126d7be453cf5b7e1bAdam Powell /*package*/ ActionBarImpl mActionBar = null; 6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private CharSequence mTitle; 6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mTitleColor = 0; 6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 699b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn final FragmentManagerImpl mFragments = new FragmentManagerImpl(); 7002dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 7014911b783aa9f4af5ac919db861751d350471f5efDianne Hackborn SparseArray<LoaderManagerImpl> mAllLoaderManagers; 7024911b783aa9f4af5ac919db861751d350471f5efDianne Hackborn LoaderManagerImpl mLoaderManager; 703c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn 7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final class ManagedCursor { 7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ManagedCursor(Cursor cursor) { 7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCursor = cursor; 7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mReleased = false; 7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mUpdated = false; 7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final Cursor mCursor; 7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mReleased; 7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mUpdated; 7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final ArrayList<ManagedCursor> mManagedCursors = 7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new ArrayList<ManagedCursor>(); 7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // protected by synchronized (this) 7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mResultCode = RESULT_CANCELED; 7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Intent mResultData = null; 7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mTitleReady = false; 7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mDefaultKeyMode = DEFAULT_KEYS_DISABLE; 7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private SpannableStringBuilder mDefaultKeySsb = null; 7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected static final int[] FOCUSED_STATE_SET = {com.android.internal.R.attr.state_focused}; 7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7297e442837702a6e026c73a01fedb62c222b63cfc9Jeff Brown private final Object mInstanceTracker = StrictMode.trackActivity(this); 7307e442837702a6e026c73a01fedb62c222b63cfc9Jeff Brown 7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Thread mUiThread; 732b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final Handler mHandler = new Handler(); 7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Return the intent that started this activity. */ 7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Intent getIntent() { 7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mIntent; 7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Change the intent returned by {@link #getIntent}. This holds a 7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * reference to the given intent; it does not copy it. Often used in 7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * conjunction with {@link #onNewIntent}. 7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param newIntent The new Intent object to return from getIntent 7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getIntent 7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onNewIntent 7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setIntent(Intent newIntent) { 7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIntent = newIntent; 7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Return the application that owns this activity. */ 7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final Application getApplication() { 7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mApplication; 7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Is this activity embedded inside of another activity? */ 7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean isChild() { 7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParent != null; 7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Return the parent activity if this view is an embedded child. */ 7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final Activity getParent() { 7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParent; 7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Retrieve the window manager for showing custom windows. */ 7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public WindowManager getWindowManager() { 7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mWindowManager; 7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the current {@link android.view.Window} for the activity. 7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This can be used to directly access parts of the Window API that 7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are not available through Activity/Screen. 7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Window The current window, or null if the activity is not 7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * visual. 7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Window getWindow() { 7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mWindow; 7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 786c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * Return the LoaderManager for this fragment, creating it if needed. 787c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn */ 788c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn public LoaderManager getLoaderManager() { 789c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn if (mLoaderManager != null) { 790c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn return mLoaderManager; 791c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn } 7925e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn mCheckedForLoaderManager = true; 793fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn mLoaderManager = getLoaderManager(-1, mLoadersStarted, true); 794c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn return mLoaderManager; 795c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn } 796c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn 7975e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn LoaderManagerImpl getLoaderManager(int index, boolean started, boolean create) { 798c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn if (mAllLoaderManagers == null) { 7994911b783aa9f4af5ac919db861751d350471f5efDianne Hackborn mAllLoaderManagers = new SparseArray<LoaderManagerImpl>(); 800c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn } 8014911b783aa9f4af5ac919db861751d350471f5efDianne Hackborn LoaderManagerImpl lm = mAllLoaderManagers.get(index); 802fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn if (lm == null) { 803fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn if (create) { 804fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn lm = new LoaderManagerImpl(this, started); 805fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn mAllLoaderManagers.put(index, lm); 806fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn } 807fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn } else { 808fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn lm.updateActivity(this); 809c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn } 810c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn return lm; 811c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn } 812c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn 813c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn /** 8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Calls {@link android.view.Window#getCurrentFocus} on the 8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Window of this Activity to return the currently focused view. 8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return View The current View with focus or null. 8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getWindow 8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.Window#getCurrentFocus 8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public View getCurrentFocus() { 8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mWindow != null ? mWindow.getCurrentFocus() : null; 8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when the activity is starting. This is where most initialization 8289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * should go: calling {@link #setContentView(int)} to inflate the 8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity's UI, using {@link #findViewById} to programmatically interact 8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with widgets in the UI, calling 8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #managedQuery(android.net.Uri , String[], String, String[], String)} to retrieve 8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * cursors for data being displayed, etc. 8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>You can call {@link #finish} from within this function, in 8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * which case onDestroy() will be immediately called without any of the rest 8369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of the activity lifecycle ({@link #onStart}, {@link #onResume}, 8379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onPause}, etc) executing. 8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param savedInstanceState If the activity is being re-initialized after 8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * previously being shut down then this Bundle contains the data it most 8459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * recently supplied in {@link #onSaveInstanceState}. <b><i>Note: Otherwise it is null.</i></b> 8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onStart 8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onSaveInstanceState 8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onRestoreInstanceState 8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPostCreate 8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onCreate(Bundle savedInstanceState) { 8532707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn if (mLastNonConfigurationInstances != null) { 8542707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn mAllLoaderManagers = mLastNonConfigurationInstances.loaders; 8552707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } 856b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (savedInstanceState != null) { 857b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Parcelable p = savedInstanceState.getParcelable(FRAGMENTS_TAG); 858b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mFragments.restoreAllState(p, mLastNonConfigurationInstances != null 859b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ? mLastNonConfigurationInstances.fragments : null); 860b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 861b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mFragments.dispatchCreate(); 8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The hook for {@link ActivityThread} to restore the state of this activity. 8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Calls {@link #onSaveInstanceState(android.os.Bundle)} and 8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #restoreManagedDialogs(android.os.Bundle)}. 8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param savedInstanceState contains the saved state 8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void performRestoreInstanceState(Bundle savedInstanceState) { 8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onRestoreInstanceState(savedInstanceState); 8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project restoreManagedDialogs(savedInstanceState); 8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This method is called after {@link #onStart} when the activity is 8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * being re-initialized from a previously saved state, given here in 881305de9dbda4e40d60ca99dda307ccd5e3c23e0a0Mike LeBeau * <var>savedInstanceState</var>. Most implementations will simply use {@link #onCreate} 8829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to restore their state, but it is sometimes convenient to do it here 8839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * after all of the initialization has been done or to allow subclasses to 8849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * decide whether to use your default implementation. The default 8859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method performs a restore of any view state that 8869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * had previously been frozen by {@link #onSaveInstanceState}. 8879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This method is called between {@link #onStart} and 8899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onPostCreate}. 8909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param savedInstanceState the data most recently supplied in {@link #onSaveInstanceState}. 8929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onCreate 8949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPostCreate 8959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onResume 8969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onSaveInstanceState 8979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onRestoreInstanceState(Bundle savedInstanceState) { 8999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mWindow != null) { 9009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bundle windowState = savedInstanceState.getBundle(WINDOW_HIERARCHY_TAG); 9019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (windowState != null) { 9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.restoreHierarchyState(windowState); 9039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Restore the state of any saved managed dialogs. 9099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param savedInstanceState The bundle to restore from. 9119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void restoreManagedDialogs(Bundle savedInstanceState) { 9139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Bundle b = savedInstanceState.getBundle(SAVED_DIALOGS_TAG); 9149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (b == null) { 9159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 9169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int[] ids = b.getIntArray(SAVED_DIALOG_IDS_KEY); 9199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int numDialogs = ids.length; 9208ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn mManagedDialogs = new SparseArray<ManagedDialog>(numDialogs); 9219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < numDialogs; i++) { 9229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Integer dialogId = ids[i]; 9239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bundle dialogState = b.getBundle(savedDialogKeyFor(dialogId)); 9249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (dialogState != null) { 925e35c23514592efe07d54fdbed7e7ec0b717e8bbeRomain Guy // Calling onRestoreInstanceState() below will invoke dispatchOnCreate 926e35c23514592efe07d54fdbed7e7ec0b717e8bbeRomain Guy // so tell createDialog() not to do it, otherwise we get an exception 9278ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn final ManagedDialog md = new ManagedDialog(); 9288ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md.mArgs = b.getBundle(savedDialogArgsKeyFor(dialogId)); 9298ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md.mDialog = createDialog(dialogId, dialogState, md.mArgs); 9308ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn if (md.mDialog != null) { 9318ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn mManagedDialogs.put(dialogId, md); 9328ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn onPrepareDialog(dialogId, md.mDialog, md.mArgs); 9338ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md.mDialog.onRestoreInstanceState(dialogState); 9348ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn } 9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9398ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn private Dialog createDialog(Integer dialogId, Bundle state, Bundle args) { 9408ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn final Dialog dialog = onCreateDialog(dialogId, args); 941764d5331d15c19162c938e617777b4bf15a6314dRomain Guy if (dialog == null) { 9428ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn return null; 943764d5331d15c19162c938e617777b4bf15a6314dRomain Guy } 9446de4aed1c67263269f83f579ec5b06263d173ef3Romain Guy dialog.dispatchOnCreate(state); 945764d5331d15c19162c938e617777b4bf15a6314dRomain Guy return dialog; 946764d5331d15c19162c938e617777b4bf15a6314dRomain Guy } 947764d5331d15c19162c938e617777b4bf15a6314dRomain Guy 9488ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn private static String savedDialogKeyFor(int key) { 9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return SAVED_DIALOG_KEY_PREFIX + key; 9509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9528ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn private static String savedDialogArgsKeyFor(int key) { 9538ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn return SAVED_DIALOG_ARGS_KEY_PREFIX + key; 9548ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn } 9559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when activity start-up is complete (after {@link #onStart} 9589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and {@link #onRestoreInstanceState} have been called). Applications will 9599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * generally not implement this method; it is intended for system 9609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * classes to do final initialization after application code has run. 9619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 9639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 9649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 9659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param savedInstanceState If the activity is being re-initialized after 9679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * previously being shut down then this Bundle contains the data it most 9689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * recently supplied in {@link #onSaveInstanceState}. <b><i>Note: Otherwise it is null.</i></b> 9699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onCreate 9709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onPostCreate(Bundle savedInstanceState) { 9729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!isChild()) { 9739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTitleReady = true; 9749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onTitleChanged(getTitle(), getTitleColor()); 9759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 9779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called after {@link #onCreate} — or after {@link #onRestart} when 9819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the activity had been stopped, but is now again being displayed to the 9829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * user. It will be followed by {@link #onResume}. 9839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onCreate 9899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onStop 9909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onResume 9919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onStart() { 9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 994fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn 995fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn if (!mLoadersStarted) { 996fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn mLoadersStarted = true; 997fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn if (mLoaderManager != null) { 998fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn mLoaderManager.doStart(); 999fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn } else if (!mCheckedForLoaderManager) { 1000fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn mLoaderManager = getLoaderManager(-1, mLoadersStarted, false); 1001fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn } 1002fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn mCheckedForLoaderManager = true; 10032707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } 10049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called after {@link #onStop} when the current activity is being 10089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * re-displayed to the user (the user has navigated back to it). It will 10099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be followed by {@link #onStart} and then {@link #onResume}. 10109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>For activities that are using raw {@link Cursor} objects (instead of 10129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * creating them through 10139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #managedQuery(android.net.Uri , String[], String, String[], String)}, 10149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this is usually the place 10159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * where the cursor should be requeried (because you had deactivated it in 10169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onStop}. 10179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 10199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 10209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 10219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onStop 10239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onStart 10249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onResume 10259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onRestart() { 10279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 10289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called after {@link #onRestoreInstanceState}, {@link #onRestart}, or 10329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onPause}, for your activity to start interacting with the user. 10339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is a good place to begin animations, open exclusive-access devices 10349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (such as the camera), etc. 10359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Keep in mind that onResume is not the best indicator that your activity 10379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is visible to the user; a system window such as the keyguard may be in 10389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * front. Use {@link #onWindowFocusChanged} to know for certain that your 10399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity is visible to the user (for example, to resume a game). 10409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 10429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 10439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 10449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onRestoreInstanceState 10469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onRestart 10479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPostResume 10489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPause 10499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onResume() { 10519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 10529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when activity resume is complete (after {@link #onResume} has 10569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * been called). Applications will generally not implement this method; 10579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it is intended for system classes to do final setup after application 10589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resume code has run. 10599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 10619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 10629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 10639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onResume 10659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onPostResume() { 10679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Window win = getWindow(); 10689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (win != null) win.makeActive(); 106950efbed668a9410cdec51f7c8604fa44ed267fedAdam Powell if (mActionBar != null) mActionBar.setShowHideAnimationEnabled(true); 10709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 10719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is called for activities that set launchMode to "singleTop" in 10759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * their package, or if a client used the {@link Intent#FLAG_ACTIVITY_SINGLE_TOP} 10769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * flag when calling {@link #startActivity}. In either case, when the 10779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity is re-launched while at the top of the activity stack instead 10789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of a new instance of the activity being started, onNewIntent() will be 10799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * called on the existing instance with the Intent that was used to 10809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * re-launch it. 10819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>An activity will always be paused before receiving a new intent, so 10839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you can count on {@link #onResume} being called after this method. 10849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note that {@link #getIntent} still returns the original Intent. You 10869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can use {@link #setIntent} to update it to this new Intent. 10879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param intent The new intent that was started for the activity. 10899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getIntent 10919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setIntent 10929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onResume 10939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onNewIntent(Intent intent) { 10959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The hook for {@link ActivityThread} to save the state of this activity. 10999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Calls {@link #onSaveInstanceState(android.os.Bundle)} 11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and {@link #saveManagedDialogs(android.os.Bundle)}. 11029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param outState The bundle to save the state to. 11049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void performSaveInstanceState(Bundle outState) { 11069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onSaveInstanceState(outState); 11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project saveManagedDialogs(outState); 11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called to retrieve per-instance state from an activity before being killed 11129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * so that the state can be restored in {@link #onCreate} or 11139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onRestoreInstanceState} (the {@link Bundle} populated by this method 11149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will be passed to both). 11159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This method is called before an activity may be killed so that when it 11179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * comes back some time in the future it can restore its state. For example, 11189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if activity B is launched in front of activity A, and at some point activity 11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A is killed to reclaim resources, activity A will have a chance to save the 11209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current state of its user interface via this method so that when the user 11219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returns to activity A, the state of the user interface can be restored 11229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * via {@link #onCreate} or {@link #onRestoreInstanceState}. 11239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Do not confuse this method with activity lifecycle callbacks such as 11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onPause}, which is always called when an activity is being placed 11269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in the background or on its way to destruction, or {@link #onStop} which 11279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is called before destruction. One example of when {@link #onPause} and 11289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onStop} is called and not this method is when a user navigates back 11299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from activity B to activity A: there is no need to call {@link #onSaveInstanceState} 11309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * on B because that particular instance will never be restored, so the 11319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * system avoids calling it. An example when {@link #onPause} is called and 11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not {@link #onSaveInstanceState} is when activity B is launched in front of activity A: 11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the system may avoid calling {@link #onSaveInstanceState} on activity A if it isn't 11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * killed during the lifetime of B since the state of the user interface of 11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A will stay intact. 11369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The default implementation takes care of most of the UI per-instance 11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * state for you by calling {@link android.view.View#onSaveInstanceState()} on each 11399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * view in the hierarchy that has an id, and by saving the id of the currently 11409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * focused view (all of which is restored by the default implementation of 11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onRestoreInstanceState}). If you override this method to save additional 11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * information not captured by each individual view, you will likely want to 11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * call through to the default implementation, otherwise be prepared to save 11449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * all of the state of each view yourself. 11459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>If called, this method will occur before {@link #onStop}. There are 11479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * no guarantees about whether it will occur before or after {@link #onPause}. 11489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param outState Bundle in which to place your saved state. 11509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onCreate 11529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onRestoreInstanceState 11539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPause 11549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onSaveInstanceState(Bundle outState) { 11569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project outState.putBundle(WINDOW_HIERARCHY_TAG, mWindow.saveHierarchyState()); 1157b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Parcelable p = mFragments.saveAllState(); 1158b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (p != null) { 1159b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn outState.putParcelable(FRAGMENTS_TAG, p); 1160b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 11619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Save the state of any managed dialogs. 11659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param outState place to store the saved state. 11679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void saveManagedDialogs(Bundle outState) { 11699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mManagedDialogs == null) { 11709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 11719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int numDialogs = mManagedDialogs.size(); 11749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (numDialogs == 0) { 11759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 11769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bundle dialogState = new Bundle(); 11799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] ids = new int[mManagedDialogs.size()]; 11819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // save each dialog's bundle, gather the ids 11839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < numDialogs; i++) { 11849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int key = mManagedDialogs.keyAt(i); 11859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ids[i] = key; 11868ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn final ManagedDialog md = mManagedDialogs.valueAt(i); 11878ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn dialogState.putBundle(savedDialogKeyFor(key), md.mDialog.onSaveInstanceState()); 11888ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn if (md.mArgs != null) { 11898ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn dialogState.putBundle(savedDialogArgsKeyFor(key), md.mArgs); 11908ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn } 11919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dialogState.putIntArray(SAVED_DIALOG_IDS_KEY, ids); 11949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project outState.putBundle(SAVED_DIALOGS_TAG, dialogState); 11959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called as part of the activity lifecycle when an activity is going into 12009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the background, but has not (yet) been killed. The counterpart to 12019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onResume}. 12029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>When activity B is launched in front of activity A, this callback will 12049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be invoked on A. B will not be created until A's {@link #onPause} returns, 12059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * so be sure to not do anything lengthy here. 12069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This callback is mostly used for saving any persistent state the 12089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity is editing, to present a "edit in place" model to the user and 12099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * making sure nothing is lost if there are not enough resources to start 12109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the new activity without first killing this one. This is also a good 12119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * place to do things like stop animations and other things that consume a 12129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * noticeable mount of CPU in order to make the switch to the next activity 12139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as fast as possible, or to close resources that are exclusive access 12149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * such as the camera. 12159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>In situations where the system needs more memory it may kill paused 12179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * processes to reclaim resources. Because of this, you should be sure 12189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that all of your state is saved by the time you return from 12199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this function. In general {@link #onSaveInstanceState} is used to save 12209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * per-instance state in the activity and this method is used to store 12219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * global persistent data (in content providers, files, etc.) 12229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>After receiving this call you will usually receive a following call 12249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to {@link #onStop} (after the next activity has been resumed and 12259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * displayed), however in some cases there will be a direct call back to 12269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onResume} without going through the stopped state. 12279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 12299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 12309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 12319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onResume 12339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onSaveInstanceState 12349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onStop 12359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onPause() { 12379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 12389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called as part of the activity lifecycle when an activity is about to go 12429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * into the background as the result of user choice. For example, when the 12439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * user presses the Home key, {@link #onUserLeaveHint} will be called, but 12449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * when an incoming phone call causes the in-call Activity to be automatically 12459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * brought to the foreground, {@link #onUserLeaveHint} will not be called on 12469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the activity being interrupted. In cases when it is invoked, this method 12479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is called right before the activity's {@link #onPause} callback. 12489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This callback and {@link #onUserInteraction} are intended to help 12509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activities manage status bar notifications intelligently; specifically, 12519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for helping activities determine the proper time to cancel a notfication. 12529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onUserInteraction() 12549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onUserLeaveHint() { 12569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Generate a new thumbnail for this activity. This method is called before 12609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * pausing the activity, and should draw into <var>outBitmap</var> the 12619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * imagery for the desired thumbnail in the dimensions of that bitmap. It 12629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can use the given <var>canvas</var>, which is configured to draw into the 12639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * bitmap, for rendering if desired. 12649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12650aae2d4e0075fd699cf40b26dca0eb2c3b3e37d2Dianne Hackborn * <p>The default implementation returns fails and does not draw a thumbnail; 12660aae2d4e0075fd699cf40b26dca0eb2c3b3e37d2Dianne Hackborn * this will result in the platform creating its own thumbnail if needed. 12679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param outBitmap The bitmap to contain the thumbnail. 12699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param canvas Can be used to render into the bitmap. 12709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Return true if you have drawn into the bitmap; otherwise after 12729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you return it will be filled with a default thumbnail. 12739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onCreateDescription 12759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onSaveInstanceState 12769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPause 12779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onCreateThumbnail(Bitmap outBitmap, Canvas canvas) { 12790aae2d4e0075fd699cf40b26dca0eb2c3b3e37d2Dianne Hackborn return false; 12809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Generate a new description for this activity. This method is called 12849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * before pausing the activity and can, if desired, return some textual 12859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * description of its current state to be displayed to the user. 12869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The default implementation returns null, which will cause you to 12889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * inherit the description from the previous activity. If all activities 12899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * return null, generally the label of the top activity will be used as the 12909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * description. 12919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A description of what the user is doing. It should be short and 12939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * sweet (only a few words). 12949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onCreateThumbnail 12969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onSaveInstanceState 12979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPause 12989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence onCreateDescription() { 13009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 13019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when you are no longer visible to the user. You will next 13059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * receive either {@link #onRestart}, {@link #onDestroy}, or nothing, 13069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * depending on later user activity. 13079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note that this method may never be called, in low memory situations 13099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * where the system does not have enough memory to keep your activity's 13109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * process running after its {@link #onPause} method is called. 13119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 13139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 13149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 13159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onRestart 13179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onResume 13189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onSaveInstanceState 13199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onDestroy 13209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onStop() { 132250efbed668a9410cdec51f7c8604fa44ed267fedAdam Powell if (mActionBar != null) mActionBar.setShowHideAnimationEnabled(false); 13239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 13249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Perform any final cleanup before an activity is destroyed. This can 13289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * happen either because the activity is finishing (someone called 13299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #finish} on it, or because the system is temporarily destroying 13309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this instance of the activity to save space. You can distinguish 13319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * between these two scenarios with the {@link #isFinishing} method. 13329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Note: do not count on this method being called as a place for 13349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * saving data! For example, if an activity is editing data in a content 13359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * provider, those edits should be committed in either {@link #onPause} or 13369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onSaveInstanceState}, not here.</em> This method is usually implemented to 13379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * free resources like threads that are associated with an activity, so 13389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that a destroyed activity does not leave such things around while the 13399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rest of its application is still running. There are situations where 13409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the system will simply kill the activity's hosting process without 13419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * calling this method (or any others) in it, so it should not be used to 13429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * do things that are intended to remain around after the process goes 13439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * away. 13449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 13469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 13479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 13489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPause 13509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onStop 13519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #finish 13529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #isFinishing 13539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onDestroy() { 13559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 13569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // dismiss any dialogs we are managing. 13589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mManagedDialogs != null) { 13599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int numDialogs = mManagedDialogs.size(); 13609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < numDialogs; i++) { 13618ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn final ManagedDialog md = mManagedDialogs.valueAt(i); 13628ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn if (md.mDialog.isShowing()) { 13638ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md.mDialog.dismiss(); 13649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13668ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn mManagedDialogs = null; 13679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // close any cursors we are managing. 13702f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki synchronized (mManagedCursors) { 13712f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki int numCursors = mManagedCursors.size(); 13722f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki for (int i = 0; i < numCursors; i++) { 13732f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki ManagedCursor c = mManagedCursors.get(i); 13742f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki if (c != null) { 13752f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki c.mCursor.close(); 13762f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki } 13779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13782f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki mManagedCursors.clear(); 13799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13804986044fd3bce877247e425374b47967775081a8Amith Yamasani 13814986044fd3bce877247e425374b47967775081a8Amith Yamasani // Close any open search dialog 13824986044fd3bce877247e425374b47967775081a8Amith Yamasani if (mSearchManager != null) { 13834986044fd3bce877247e425374b47967775081a8Amith Yamasani mSearchManager.stopSearch(); 13844986044fd3bce877247e425374b47967775081a8Amith Yamasani } 13859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called by the system when the device configuration changes while your 13899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity is running. Note that this will <em>only</em> be called if 13909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you have selected configurations you would like to handle with the 13919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.attr#configChanges} attribute in your manifest. If 13929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * any configuration change occurs that is not selected to be reported 13939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * by that attribute, then instead of reporting it the system will stop 13949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and restart the activity (to have it launched with the new 13959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * configuration). 13969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>At the time that this function has been called, your Resources 13989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * object will have been updated to return resource values matching the 13999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * new configuration. 14009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param newConfig The new device configuration. 14029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onConfigurationChanged(Configuration newConfig) { 14049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 1405444c727e0eecf83e9d0b9c4e7af5cbf5fc4135f8Bjorn Bringert 1406f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell if (mActionBar != null) { 1407f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell mActionBar.onConfigurationChanged(newConfig); 1408f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell } 1409f8ac6b7394cfd37f01471bb35475ff2930eee140Adam Powell 14109d0718042f7c0a50d825c621f82ce9a92071f07aDianne Hackborn mFragments.dispatchConfigurationChanged(newConfig); 14119d0718042f7c0a50d825c621f82ce9a92071f07aDianne Hackborn 14129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mWindow != null) { 14139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Pass the configuration changed event to the window 14149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.onConfigurationChanged(newConfig); 14159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If this activity is being destroyed because it can not handle a 14209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * configuration parameter being changed (and thus its 14219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onConfigurationChanged(Configuration)} method is 14229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <em>not</em> being called), then you can use this method to discover 14239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the set of changes that have occurred while in the process of being 14249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * destroyed. Note that there is no guarantee that these will be 14259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * accurate (other changes could have happened at any time), so you should 14269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * only use this as an optimization hint. 14279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a bit field of the configuration parameters that are 14299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * changing, as defined by the {@link android.content.res.Configuration} 14309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * class. 14319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getChangingConfigurations() { 14339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mConfigChangeFlags; 14349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14379567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * @deprecated Use the new {@link Fragment} API 14389567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * {@link Fragment#setRetainInstance(boolean)} instead; this is also 14399567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * available on older platforms through the Android compatibility package. 14409567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * 14419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the non-configuration instance data that was previously 14429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returned by {@link #onRetainNonConfigurationInstance()}. This will 14439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be available from the initial {@link #onCreate} and 14449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onStart} calls to the new instance, allowing you to extract 14459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * any useful dynamic state from the previous instance. 14469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note that the data you retrieve here should <em>only</em> be used 14489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as an optimization for handling configuration changes. You should always 14499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be able to handle getting a null pointer back, and an activity must 14509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * still be able to restore itself to its previous state (through the 14519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * normal {@link #onSaveInstanceState(Bundle)} mechanism) even if this 14529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * function returns null. 14539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the object previously returned by 14559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onRetainNonConfigurationInstance()}. 14569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14579567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn @Deprecated 14589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Object getLastNonConfigurationInstance() { 1459b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return mLastNonConfigurationInstances != null 1460b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ? mLastNonConfigurationInstances.activity : null; 14619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14649567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * @deprecated Use the new {@link Fragment} API 14659567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * {@link Fragment#setRetainInstance(boolean)} instead; this is also 14669567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * available on older platforms through the Android compatibility package. 14679567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * 14689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called by the system, as part of destroying an 14699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity due to a configuration change, when it is known that a new 14709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * instance will immediately be created for the new configuration. You 14719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can return any object you like here, including the activity instance 14729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * itself, which can later be retrieved by calling 14739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getLastNonConfigurationInstance()} in the new activity 14749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * instance. 14759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1476291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <em>If you are targeting {@link android.os.Build.VERSION_CODES#HONEYCOMB} 1477291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * or later, consider instead using a {@link Fragment} with 1478291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * {@link Fragment#setRetainInstance(boolean) 1479291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * Fragment.setRetainInstance(boolean}.</em> 1480291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 14819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This function is called purely as an optimization, and you must 14829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not rely on it being called. When it is called, a number of guarantees 14839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will be made to help optimize configuration switching: 14849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul> 14859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> The function will be called between {@link #onStop} and 14869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onDestroy}. 14879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> A new instance of the activity will <em>always</em> be immediately 1488ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn * created after this one's {@link #onDestroy()} is called. In particular, 1489ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn * <em>no</em> messages will be dispatched during this time (when the returned 1490ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn * object does not have an activity to be associated with). 14919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> The object you return here will <em>always</em> be available from 14929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the {@link #getLastNonConfigurationInstance()} method of the following 14939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity instance as described there. 14949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul> 14959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>These guarantees are designed so that an activity can use this API 14979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to propagate extensive state from the old to new activity instance, from 14989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * loaded bitmaps, to network connections, to evenly actively running 14999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * threads. Note that you should <em>not</em> propagate any data that 15009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * may change based on the configuration, including any data loaded from 15019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resources such as strings, layouts, or drawables. 15029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1503ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn * <p>The guarantee of no message handling during the switch to the next 1504ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn * activity simplifies use with active objects. For example if your retained 1505ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn * state is an {@link android.os.AsyncTask} you are guaranteed that its 1506ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn * call back functions (like {@link android.os.AsyncTask#onPostExecute}) will 1507ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn * not be called from the call here until you execute the next instance's 1508ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn * {@link #onCreate(Bundle)}. (Note however that there is of course no such 1509ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn * guarantee for {@link android.os.AsyncTask#doInBackground} since that is 1510ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn * running in a separate thread.) 1511ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn * 15129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Return any Object holding the desired state to propagate to the 15139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * next activity instance. 15149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Object onRetainNonConfigurationInstance() { 15169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 15179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the non-configuration instance data that was previously 15219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returned by {@link #onRetainNonConfigurationChildInstances()}. This will 15229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be available from the initial {@link #onCreate} and 15239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onStart} calls to the new instance, allowing you to extract 15249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * any useful dynamic state from the previous instance. 15259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 15269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note that the data you retrieve here should <em>only</em> be used 15279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as an optimization for handling configuration changes. You should always 15289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be able to handle getting a null pointer back, and an activity must 15299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * still be able to restore itself to its previous state (through the 15309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * normal {@link #onSaveInstanceState(Bundle)} mechanism) even if this 15319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * function returns null. 15329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 15339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the object previously returned by 15349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onRetainNonConfigurationChildInstances()} 15359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1536b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn HashMap<String, Object> getLastNonConfigurationChildInstances() { 1537b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return mLastNonConfigurationInstances != null 1538b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ? mLastNonConfigurationInstances.children : null; 15399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This method is similar to {@link #onRetainNonConfigurationInstance()} except that 15439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it should return either a mapping from child activity id strings to arbitrary objects, 15449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or null. This method is intended to be used by Activity framework subclasses that control a 15459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * set of child activities, such as ActivityGroup. The same guarantees and restrictions apply 15469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as for {@link #onRetainNonConfigurationInstance()}. The default implementation returns null. 15479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project HashMap<String,Object> onRetainNonConfigurationChildInstances() { 15499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 15509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1552b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn NonConfigurationInstances retainNonConfigurationInstances() { 1553b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Object activity = onRetainNonConfigurationInstance(); 1554b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn HashMap<String, Object> children = onRetainNonConfigurationChildInstances(); 1555b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ArrayList<Fragment> fragments = mFragments.retainNonConfig(); 15562707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn boolean retainLoaders = false; 15572707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn if (mAllLoaderManagers != null) { 15585e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn // prune out any loader managers that were already stopped and so 15592707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn // have nothing useful to retain. 15602707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn for (int i=mAllLoaderManagers.size()-1; i>=0; i--) { 15614911b783aa9f4af5ac919db861751d350471f5efDianne Hackborn LoaderManagerImpl lm = mAllLoaderManagers.valueAt(i); 15622707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn if (lm.mRetaining) { 15632707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn retainLoaders = true; 15642707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } else { 15655e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn lm.doDestroy(); 15662707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn mAllLoaderManagers.removeAt(i); 15672707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } 15682707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } 15692707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } 15702707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn if (activity == null && children == null && fragments == null && !retainLoaders) { 1571b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return null; 1572b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 1573b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 1574b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn NonConfigurationInstances nci = new NonConfigurationInstances(); 1575b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn nci.activity = activity; 1576b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn nci.children = children; 1577b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn nci.fragments = fragments; 15782707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn nci.loaders = mAllLoaderManagers; 1579b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return nci; 1580b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 1581b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 15829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onLowMemory() { 15839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 15849d0718042f7c0a50d825c621f82ce9a92071f07aDianne Hackborn mFragments.dispatchLowMemory(); 15859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1588b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn * Return the FragmentManager for interacting with fragments associated 1589b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn * with this activity. 1590b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn */ 1591b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn public FragmentManager getFragmentManager() { 1592b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn return mFragments; 1593b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn } 1594b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn 15959e14e9f33a66b864b98c6ff9517988bafbca3301Dianne Hackborn void invalidateFragmentIndex(int index) { 15965e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn //Log.v(TAG, "invalidateFragmentIndex: index=" + index); 15979e14e9f33a66b864b98c6ff9517988bafbca3301Dianne Hackborn if (mAllLoaderManagers != null) { 15985e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn LoaderManagerImpl lm = mAllLoaderManagers.get(index); 1599d04ad541def2bca8fc2d810514ee15ab97893d35Dianne Hackborn if (lm != null && !lm.mRetaining) { 16005e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn lm.doDestroy(); 1601d04ad541def2bca8fc2d810514ee15ab97893d35Dianne Hackborn mAllLoaderManagers.remove(index); 16025e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn } 16039e14e9f33a66b864b98c6ff9517988bafbca3301Dianne Hackborn } 16049e14e9f33a66b864b98c6ff9517988bafbca3301Dianne Hackborn } 16059e14e9f33a66b864b98c6ff9517988bafbca3301Dianne Hackborn 16062dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn /** 1607c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * Called when a Fragment is being attached to this activity, immediately 1608c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * after the call to its {@link Fragment#onAttach Fragment.onAttach()} 1609c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn * method and before {@link Fragment#onCreate Fragment.onCreate()}. 1610c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn */ 1611c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn public void onAttachFragment(Fragment fragment) { 1612c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn } 1613c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn 1614c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn /** 16159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Wrapper around 16169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link ContentResolver#query(android.net.Uri , String[], String, String[], String)} 16179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that gives the resulting {@link Cursor} to call 16189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #startManagingCursor} so that the activity will manage its 16199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * lifecycle for you. 16209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1621291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <em>If you are targeting {@link android.os.Build.VERSION_CODES#HONEYCOMB} 1622291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * or later, consider instead using {@link LoaderManager} instead, available 1623291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * via {@link #getLoaderManager()}.</em> 1624291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 16259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param uri The URI of the content provider to query. 16269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param projection List of columns to return. 16279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param selection SQL WHERE clause. 16289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param sortOrder SQL ORDER BY clause. 16299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 16309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The Cursor that was returned by query(). 16319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 16329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see ContentResolver#query(android.net.Uri , String[], String, String[], String) 16339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startManagingCursor 16349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 16356ed50de6d1e5e27d11304cce226fefeee3105bd7Jason parks * 16366ed50de6d1e5e27d11304cce226fefeee3105bd7Jason parks * @deprecated Use {@link CursorLoader} instead. 16379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16386ed50de6d1e5e27d11304cce226fefeee3105bd7Jason parks @Deprecated 1639291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn public final Cursor managedQuery(Uri uri, String[] projection, String selection, 1640291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn String sortOrder) { 16419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Cursor c = getContentResolver().query(uri, projection, selection, null, sortOrder); 16429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (c != null) { 16439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startManagingCursor(c); 16449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return c; 16469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Wrapper around 16509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link ContentResolver#query(android.net.Uri , String[], String, String[], String)} 16519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that gives the resulting {@link Cursor} to call 16529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #startManagingCursor} so that the activity will manage its 16539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * lifecycle for you. 16549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1655291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <em>If you are targeting {@link android.os.Build.VERSION_CODES#HONEYCOMB} 1656291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * or later, consider instead using {@link LoaderManager} instead, available 1657291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * via {@link #getLoaderManager()}.</em> 1658291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 16599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param uri The URI of the content provider to query. 16609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param projection List of columns to return. 16619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param selection SQL WHERE clause. 16629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param selectionArgs The arguments to selection, if any ?s are pesent 16639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param sortOrder SQL ORDER BY clause. 16649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 16659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The Cursor that was returned by query(). 16669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 16679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see ContentResolver#query(android.net.Uri , String[], String, String[], String) 16689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startManagingCursor 16696ed50de6d1e5e27d11304cce226fefeee3105bd7Jason parks * 16706ed50de6d1e5e27d11304cce226fefeee3105bd7Jason parks * @deprecated Use {@link CursorLoader} instead. 16719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16726ed50de6d1e5e27d11304cce226fefeee3105bd7Jason parks @Deprecated 1673291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn public final Cursor managedQuery(Uri uri, String[] projection, String selection, 1674291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn String[] selectionArgs, String sortOrder) { 16759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Cursor c = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder); 16769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (c != null) { 16779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startManagingCursor(c); 16789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return c; 16809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16839567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * @deprecated Use the new {@link android.content.CursorLoader} class with 16849567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * {@link LoaderManager} instead; this is also 16859567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * available on older platforms through the Android compatibility package. 16869567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * 16879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This method allows the activity to take care of managing the given 16889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Cursor}'s lifecycle for you based on the activity's lifecycle. 16899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * That is, when the activity is stopped it will automatically call 16909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Cursor#deactivate} on the given Cursor, and when it is later restarted 16919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it will call {@link Cursor#requery} for you. When the activity is 16929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * destroyed, all managed Cursors will be closed automatically. 16939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1694291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <em>If you are targeting {@link android.os.Build.VERSION_CODES#HONEYCOMB} 1695291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * or later, consider instead using {@link LoaderManager} instead, available 1696291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * via {@link #getLoaderManager()}.</em> 1697291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 16989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param c The Cursor to be managed. 16999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #managedQuery(android.net.Uri , String[], String, String[], String) 17019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #stopManagingCursor 17029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17036ed50de6d1e5e27d11304cce226fefeee3105bd7Jason parks @Deprecated 17049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void startManagingCursor(Cursor c) { 17059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mManagedCursors) { 17069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mManagedCursors.add(new ManagedCursor(c)); 17079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17119567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * @deprecated Use the new {@link android.content.CursorLoader} class with 17129567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * {@link LoaderManager} instead; this is also 17139567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * available on older platforms through the Android compatibility package. 17149567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * 17159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Given a Cursor that was previously given to 17169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #startManagingCursor}, stop the activity's management of that 17179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * cursor. 17189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param c The Cursor that was being managed. 17209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startManagingCursor 17229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17236ed50de6d1e5e27d11304cce226fefeee3105bd7Jason parks @Deprecated 17249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void stopManagingCursor(Cursor c) { 17259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mManagedCursors) { 17269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int N = mManagedCursors.size(); 17279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i=0; i<N; i++) { 17289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ManagedCursor mc = mManagedCursors.get(i); 17299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mc.mCursor == c) { 17309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mManagedCursors.remove(i); 17319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 17329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17383c4c2b7e6f0674068d13b42d4dcf0fd009df0c49Dianne Hackborn * @deprecated As of {@link android.os.Build.VERSION_CODES#GINGERBREAD} 17393c4c2b7e6f0674068d13b42d4dcf0fd009df0c49Dianne Hackborn * this is a no-op. 17404f3867e3ce92101224ad79b8f2ff446bb4f99108Dianne Hackborn * @hide 17419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1742d3efa3924407da6d38aa5931ac29aa088d9eb986Dianne Hackborn @Deprecated 17439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setPersistent(boolean isPersistent) { 17449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Finds a view that was identified by the id attribute from the XML that 17489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * was processed in {@link #onCreate}. 17499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The view if found or null otherwise. 17519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public View findViewById(int id) { 17539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getWindow().findViewById(id); 17549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 175533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell 175633b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell /** 175733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * Retrieve a reference to this activity's ActionBar. 175842c0fe86521af507f597af6159f63879cb5be73eAdam Powell * 175933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * @return The Activity's ActionBar, or null if it does not have one. 176033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell */ 176133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell public ActionBar getActionBar() { 176242c0fe86521af507f597af6159f63879cb5be73eAdam Powell initActionBar(); 176333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell return mActionBar; 176433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell } 176533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell 17669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 176733b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * Creates a new ActionBar, locates the inflated ActionBarView, 176833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell * initializes the ActionBar with the view, and sets mActionBar. 176933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell */ 177033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell private void initActionBar() { 177189e0645b4157961e8c465eb9c819f965fdb453d8Adam Powell Window window = getWindow(); 1772a593d9852f3807305763c3f1fe1ac5c59f1fef92Adam Powell 1773a593d9852f3807305763c3f1fe1ac5c59f1fef92Adam Powell // Initializing the window decor can change window feature flags. 1774a593d9852f3807305763c3f1fe1ac5c59f1fef92Adam Powell // Make sure that we have the correct set before performing the test below. 1775a593d9852f3807305763c3f1fe1ac5c59f1fef92Adam Powell window.getDecorView(); 1776a593d9852f3807305763c3f1fe1ac5c59f1fef92Adam Powell 17779b4c804b9856d732e461bc7505d40aa4ea1f7bf7Adam Powell if (isChild() || !window.hasFeature(Window.FEATURE_ACTION_BAR) || mActionBar != null) { 177833b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell return; 177933b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell } 178033b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell 1781661c908e4e26c99adc2cab7558a02129eaee059dAdam Powell mActionBar = new ActionBarImpl(this); 178233b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell } 178333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell 178433b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell /** 17859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the activity content from a layout resource. The resource will be 17869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * inflated, adding all top-level views to the activity. 1787482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * 17889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param layoutResID Resource ID to be inflated. 1789482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * 1790482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * @see #setContentView(android.view.View) 1791482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * @see #setContentView(android.view.View, android.view.ViewGroup.LayoutParams) 17929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setContentView(int layoutResID) { 17949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setContentView(layoutResID); 179533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell initActionBar(); 17969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the activity content to an explicit view. This view is placed 18009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * directly into the activity's view hierarchy. It can itself be a complex 1801482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * view hierarchy. When calling this method, the layout parameters of the 1802482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * specified view are ignored. Both the width and the height of the view are 1803482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * set by default to {@link ViewGroup.LayoutParams#MATCH_PARENT}. To use 1804482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * your own layout parameters, invoke 1805482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * {@link #setContentView(android.view.View, android.view.ViewGroup.LayoutParams)} 1806482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * instead. 18079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 18089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The desired content to display. 1809482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * 1810482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * @see #setContentView(int) 1811482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * @see #setContentView(android.view.View, android.view.ViewGroup.LayoutParams) 18129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setContentView(View view) { 18149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setContentView(view); 181533b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell initActionBar(); 18169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the activity content to an explicit view. This view is placed 18209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * directly into the activity's view hierarchy. It can itself be a complex 1821482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * view hierarchy. 18229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 18239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The desired content to display. 18249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param params Layout parameters for the view. 1825482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * 1826482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * @see #setContentView(android.view.View) 1827482b34a6f8aebe620cf815cdc689726ef5cf437eRomain Guy * @see #setContentView(int) 18289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setContentView(View view, ViewGroup.LayoutParams params) { 18309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setContentView(view, params); 183133b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell initActionBar(); 18329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Add an additional content view to the activity. Added after any existing 18369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ones in the activity -- existing views are NOT removed. 18379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 18389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The desired content to display. 18399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param params Layout parameters for the view. 18409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void addContentView(View view, ViewGroup.LayoutParams params) { 18429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().addContentView(view, params); 184333b974393b6fadcefc896ec4a0f9b66724f61e9fAdam Powell initActionBar(); 18449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1847cfaf8878de83b6bb7a24aee3c240259f428e6e4aDianne Hackborn * Sets whether this activity is finished when touched outside its window's 1848cfaf8878de83b6bb7a24aee3c240259f428e6e4aDianne Hackborn * bounds. 1849cfaf8878de83b6bb7a24aee3c240259f428e6e4aDianne Hackborn */ 1850cfaf8878de83b6bb7a24aee3c240259f428e6e4aDianne Hackborn public void setFinishOnTouchOutside(boolean finish) { 1851cfaf8878de83b6bb7a24aee3c240259f428e6e4aDianne Hackborn mWindow.setCloseOnTouchOutside(finish); 1852cfaf8878de83b6bb7a24aee3c240259f428e6e4aDianne Hackborn } 1853cfaf8878de83b6bb7a24aee3c240259f428e6e4aDianne Hackborn 1854cfaf8878de83b6bb7a24aee3c240259f428e6e4aDianne Hackborn /** 18559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setDefaultKeyMode} to turn off default handling of 18569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * keys. 18579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 18589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setDefaultKeyMode 18599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public final int DEFAULT_KEYS_DISABLE = 0; 18619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setDefaultKeyMode} to launch the dialer during default 18639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * key handling. 18649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 18659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setDefaultKeyMode 18669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public final int DEFAULT_KEYS_DIALER = 1; 18689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setDefaultKeyMode} to execute a menu shortcut in 18709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * default key handling. 18719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 18729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>That is, the user does not need to hold down the menu key to execute menu shortcuts. 18739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 18749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setDefaultKeyMode 18759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public final int DEFAULT_KEYS_SHORTCUT = 2; 18779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setDefaultKeyMode} to specify that unhandled keystrokes 18799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will start an application-defined search. (If the application or activity does not 18809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * actually define a search, the the keys will be ignored.) 18819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 18829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>See {@link android.app.SearchManager android.app.SearchManager} for more details. 18839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 18849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setDefaultKeyMode 18859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public final int DEFAULT_KEYS_SEARCH_LOCAL = 3; 18879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setDefaultKeyMode} to specify that unhandled keystrokes 18909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will start a global search (typically web search, but some platforms may define alternate 18919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * methods for global search) 18929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 18939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>See {@link android.app.SearchManager android.app.SearchManager} for more details. 18949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 18959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setDefaultKeyMode 18969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public final int DEFAULT_KEYS_SEARCH_GLOBAL = 4; 18989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 19009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Select the default key handling for this activity. This controls what 19019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will happen to key events that are not otherwise handled. The default 19029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * mode ({@link #DEFAULT_KEYS_DISABLE}) will simply drop them on the 19039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * floor. Other modes allow you to launch the dialer 19049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ({@link #DEFAULT_KEYS_DIALER}), execute a shortcut in your options 19059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * menu without requiring the menu key be held down 19069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ({@link #DEFAULT_KEYS_SHORTCUT}), or launch a search ({@link #DEFAULT_KEYS_SEARCH_LOCAL} 19079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and {@link #DEFAULT_KEYS_SEARCH_GLOBAL}). 19089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note that the mode selected here does not impact the default 19109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * handling of system keys, such as the "back" and "menu" keys, and your 19119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity and its views always get a first chance to receive and handle 19129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * all application keys. 19139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param mode The desired default key mode constant. 19159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #DEFAULT_KEYS_DISABLE 19179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #DEFAULT_KEYS_DIALER 19189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #DEFAULT_KEYS_SHORTCUT 19199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #DEFAULT_KEYS_SEARCH_LOCAL 19209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #DEFAULT_KEYS_SEARCH_GLOBAL 19219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onKeyDown 19229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setDefaultKeyMode(int mode) { 19249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDefaultKeyMode = mode; 19259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Some modes use a SpannableStringBuilder to track & dispatch input events 19279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // This list must remain in sync with the switch in onKeyDown() 19289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (mode) { 19299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEFAULT_KEYS_DISABLE: 19309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEFAULT_KEYS_SHORTCUT: 19319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDefaultKeySsb = null; // not used in these modes 19329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 19339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEFAULT_KEYS_DIALER: 19349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEFAULT_KEYS_SEARCH_LOCAL: 19359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEFAULT_KEYS_SEARCH_GLOBAL: 19369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDefaultKeySsb = new SpannableStringBuilder(); 19379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Selection.setSelection(mDefaultKeySsb,0); 19389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 19399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 19409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException(); 19419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 19459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when a key was pressed down and not handled by any of the views 19469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * inside of the activity. So, for example, key presses while the cursor 19479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is inside a TextView will not trigger the event (unless it is a navigation 19489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to another object) because TextView handles its own key presses. 19499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>If the focused view didn't want this event, this method is called. 19519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19528d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * <p>The default implementation takes care of {@link KeyEvent#KEYCODE_BACK} 19538d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * by calling {@link #onBackPressed()}, though the behavior varies based 19548d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * on the application compatibility mode: for 19558d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * {@link android.os.Build.VERSION_CODES#ECLAIR} or later applications, 19568d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * it will set up the dispatch to call {@link #onKeyUp} where the action 19578d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * will be performed; for earlier applications, it will perform the 19588d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * action immediately in on-down, as those versions of the platform 19598d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * behaved. 19608d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * 19618d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * <p>Other additional default key handling may be performed 196283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * if configured with {@link #setDefaultKeyMode}. 19639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Return <code>true</code> to prevent this event from being propagated 19659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * further, or <code>false</code> to indicate that you have not handled 19669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this event and it should continue to be propagated. 19679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onKeyUp 19689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.KeyEvent 19699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onKeyDown(int keyCode, KeyEvent event) { 197183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn if (keyCode == KeyEvent.KEYCODE_BACK) { 19728d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (getApplicationInfo().targetSdkVersion 19738d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn >= Build.VERSION_CODES.ECLAIR) { 19748d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn event.startTracking(); 19758d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn } else { 19768d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn onBackPressed(); 19778d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn } 19789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 19799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mDefaultKeyMode == DEFAULT_KEYS_DISABLE) { 19829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 19839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (mDefaultKeyMode == DEFAULT_KEYS_SHORTCUT) { 198483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn if (getWindow().performPanelShortcut(Window.FEATURE_OPTIONS_PANEL, 198583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn keyCode, event, Menu.FLAG_ALWAYS_PERFORM_CLOSE)) { 198683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn return true; 198783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 198883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn return false; 19899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 19909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Common code for DEFAULT_KEYS_DIALER & DEFAULT_KEYS_SEARCH_* 19919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean clearSpannable = false; 19929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean handled; 19939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((event.getRepeatCount() != 0) || event.isSystem()) { 19949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project clearSpannable = true; 19959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project handled = false; 19969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 199783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn handled = TextKeyListener.getInstance().onKeyDown( 199883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn null, mDefaultKeySsb, keyCode, event); 19999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (handled && mDefaultKeySsb.length() > 0) { 20009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // something useable has been typed - dispatch it now. 20019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 20029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final String str = mDefaultKeySsb.toString(); 20039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project clearSpannable = true; 20049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 20059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (mDefaultKeyMode) { 20069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEFAULT_KEYS_DIALER: 20079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + str)); 20089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 20099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startActivity(intent); 20109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 20119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEFAULT_KEYS_SEARCH_LOCAL: 20129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startSearch(str, false, null, false); 20139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 20149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEFAULT_KEYS_SEARCH_GLOBAL: 20159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startSearch(str, false, null, true); 20169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 20179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (clearSpannable) { 20219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDefaultKeySsb.clear(); 20229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDefaultKeySsb.clearSpans(); 20239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Selection.setSelection(mDefaultKeySsb,0); 20249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return handled; 20269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 20299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 203083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Default implementation of {@link KeyEvent.Callback#onKeyLongPress(int, KeyEvent) 203183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * KeyEvent.Callback.onKeyLongPress()}: always returns false (doesn't handle 203283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * the event). 203383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 203483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public boolean onKeyLongPress(int keyCode, KeyEvent event) { 203583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn return false; 203683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 203783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn 203883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 20399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when a key was released and not handled by any of the views 20409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * inside of the activity. So, for example, key presses while the cursor 20419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is inside a TextView will not trigger the event (unless it is a navigation 20429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to another object) because TextView handles its own key presses. 20439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 204483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * <p>The default implementation handles KEYCODE_BACK to stop the activity 204583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * and go back. 204683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * 20479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Return <code>true</code> to prevent this event from being propagated 20489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * further, or <code>false</code> to indicate that you have not handled 20499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this event and it should continue to be propagated. 20509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onKeyDown 20519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see KeyEvent 20529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 20539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onKeyUp(int keyCode, KeyEvent event) { 20548d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (getApplicationInfo().targetSdkVersion 20558d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn >= Build.VERSION_CODES.ECLAIR) { 20568d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking() 20578d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn && !event.isCanceled()) { 20588d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn onBackPressed(); 20598d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn return true; 20608d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn } 206183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 20629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 20639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 20659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 20669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Default implementation of {@link KeyEvent.Callback#onKeyMultiple(int, int, KeyEvent) 20679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * KeyEvent.Callback.onKeyMultiple()}: always returns false (doesn't handle 20689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the event). 20699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 20709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) { 20719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 20729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 20749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 207583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Called when the activity has detected the user's press of the back 207683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * key. The default implementation simply finishes the current activity, 207783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * but you can override this to do whatever you want. 207883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 207983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public void onBackPressed() { 20803a57fb9e9c4f205ca6bd4f036b3080f92588d16dDianne Hackborn if (!mFragments.popBackStackImmediate()) { 2081ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn finish(); 2082ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 208383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 208464da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown 208564da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown /** 208664da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * Called when a key shortcut event is not handled by any of the views in the Activity. 208764da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * Override this method to implement global key shortcuts for the Activity. 208864da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * Key shortcuts can also be implemented by setting the 208964da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * {@link MenuItem#setShortcut(char, char) shortcut} property of menu items. 209064da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * 209164da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * @param keyCode The value in event.getKeyCode(). 209264da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * @param event Description of the key event. 209364da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * @return True if the key shortcut was handled. 209464da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown */ 209564da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown public boolean onKeyShortcut(int keyCode, KeyEvent event) { 209664da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown return false; 209764da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown } 209864da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown 209983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 21009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when a touch screen event was not handled by any of the views 21019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * under it. This is most useful to process touch events that happen 21029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * outside of your window bounds, where there is no view to receive it. 21039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 21049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param event The touch screen event being processed. 21059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 21069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Return true if you have consumed the event, false if you haven't. 21079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default implementation always returns false. 21089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 21099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onTouchEvent(MotionEvent event) { 2110cfaf8878de83b6bb7a24aee3c240259f428e6e4aDianne Hackborn if (mWindow.shouldCloseOnTouch(this, event)) { 2111cfaf8878de83b6bb7a24aee3c240259f428e6e4aDianne Hackborn finish(); 2112cfaf8878de83b6bb7a24aee3c240259f428e6e4aDianne Hackborn return true; 2113cfaf8878de83b6bb7a24aee3c240259f428e6e4aDianne Hackborn } 2114cfaf8878de83b6bb7a24aee3c240259f428e6e4aDianne Hackborn 21159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 21169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 21199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when the trackball was moved and not handled by any of the 21209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * views inside of the activity. So, for example, if the trackball moves 21219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * while focus is on a button, you will receive a call here because 21229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * buttons do not normally do anything with trackball events. The call 21239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * here happens <em>before</em> trackball movements are converted to 21249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * DPAD key events, which then get sent back to the view hierarchy, and 21259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will be processed at the point for things like focus navigation. 21269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 21279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param event The trackball event being processed. 21289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 21299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Return true if you have consumed the event, false if you haven't. 21309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default implementation always returns false. 21319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 21329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onTrackballEvent(MotionEvent event) { 21339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 21349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2135cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 2136cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** 2137cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * Called when a generic motion event was not handled by any of the 2138cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * views inside of the activity. 2139cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * <p> 214033bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown * Generic motion events describe joystick movements, mouse hovers, track pad 214133bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown * touches, scroll wheel movements and other input events. The 2142cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * {@link MotionEvent#getSource() source} of the motion event specifies 2143cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * the class of input that was received. Implementations of this method 2144cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * must examine the bits in the source before processing the event. 2145cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * The following code example shows how this is done. 214633bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown * </p><p> 214733bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown * Generic motion events with source class 214833bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown * {@link android.view.InputDevice#SOURCE_CLASS_POINTER} 214933bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown * are delivered to the view under the pointer. All other generic motion events are 215033bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown * delivered to the focused view. 215133bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown * </p><p> 215233bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown * See {@link View#onGenericMotionEvent(MotionEvent)} for an example of how to 215333bbfd2232ea9eaae9a9d87a05a95a430f09bd83Jeff Brown * handle this event. 2154cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * </p> 2155cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 2156cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * @param event The generic motion event being processed. 2157cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 2158cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * @return Return true if you have consumed the event, false if you haven't. 2159cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * The default implementation always returns false. 2160cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown */ 2161cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public boolean onGenericMotionEvent(MotionEvent event) { 2162cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown return false; 2163cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown } 2164cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 21659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 21669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called whenever a key, touch, or trackball event is dispatched to the 21679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity. Implement this method if you wish to know that the user has 21689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * interacted with the device in some way while your activity is running. 21699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This callback and {@link #onUserLeaveHint} are intended to help 21709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activities manage status bar notifications intelligently; specifically, 21719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for helping activities determine the proper time to cancel a notfication. 21729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 21739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>All calls to your activity's {@link #onUserLeaveHint} callback will 21749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be accompanied by calls to {@link #onUserInteraction}. This 21759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ensures that your activity will be told of relevant user activity such 21769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as pulling down the notification pane and touching an item there. 21779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 21789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note that this callback will be invoked for the touch down action 21799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that begins a touch gesture, but may not be invoked for the touch-moved 21809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and touch-up actions that follow. 21819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 21829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onUserLeaveHint() 21839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 21849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onUserInteraction() { 21859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onWindowAttributesChanged(WindowManager.LayoutParams params) { 21889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Update window manager if: we have a view, that view is 21899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // attached to its parent (which will be a RootView), and 21909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // this activity is not embedded. 21919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 21929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project View decor = mDecor; 21939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (decor != null && decor.getParent() != null) { 21949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindowManager().updateViewLayout(decor, params); 21959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onContentChanged() { 22009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 22039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when the current {@link Window} of the activity gains or loses 22049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * focus. This is the best indicator of whether this activity is visible 220583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * to the user. The default implementation clears the key tracking 220683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * state, so should always be called. 22079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 220883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * <p>Note that this provides information about global focus state, which 22099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is managed independently of activity lifecycles. As such, while focus 22109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * changes will generally have some relation to lifecycle changes (an 22119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity that is stopped will not generally get window focus), you 22129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * should not rely on any particular order between the callbacks here and 22139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * those in the other lifecycle methods such as {@link #onResume}. 22149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>As a general rule, however, a resumed activity will have window 22169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * focus... unless it has displayed other dialogs or popups that take 22179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * input focus, in which case the activity itself will not have focus 22189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * when the other windows have it. Likewise, the system may display 22199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * system-level windows (such as the status bar notification panel or 22209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a system alert) which will temporarily take window input focus without 22219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * pausing the foreground activity. 22229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param hasFocus Whether the window of this activity has focus. 22249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #hasWindowFocus() 22269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onResume 22273be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * @see View#onWindowFocusChanged(boolean) 22289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 22299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onWindowFocusChanged(boolean hasFocus) { 22309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 22333be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * Called when the main window associated with the activity has been 22343be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * attached to the window manager. 22353be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * See {@link View#onAttachedToWindow() View.onAttachedToWindow()} 22363be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * for more information. 22373be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * @see View#onAttachedToWindow 22383be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn */ 22393be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn public void onAttachedToWindow() { 22403be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn } 22413be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn 22423be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn /** 22433be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * Called when the main window associated with the activity has been 22443be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * detached from the window manager. 22453be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * See {@link View#onDetachedFromWindow() View.onDetachedFromWindow()} 22463be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * for more information. 22473be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * @see View#onDetachedFromWindow 22483be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn */ 22493be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn public void onDetachedFromWindow() { 22503be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn } 22513be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn 22523be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn /** 22539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true if this activity's <em>main</em> window currently has window focus. 22549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Note that this is not the same as the view itself having focus. 22559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return True if this activity's main window currently has window focus. 22579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onWindowAttributesChanged(android.view.WindowManager.LayoutParams) 22599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 22609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean hasWindowFocus() { 22619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Window w = getWindow(); 22629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (w != null) { 22639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project View d = w.getDecorView(); 22649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (d != null) { 22659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return d.hasWindowFocus(); 22669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 22699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 22729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called to process key events. You can override this to intercept all 22739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * key events before they are dispatched to the window. Be sure to call 22749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this implementation for key events that should be handled normally. 22759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param event The key event. 22779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return boolean Return true if this event was consumed. 22799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 22809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean dispatchKeyEvent(KeyEvent event) { 22819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onUserInteraction(); 22828d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn Window win = getWindow(); 22838d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (win.superDispatchKeyEvent(event)) { 22849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 22859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22868d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn View decor = mDecor; 22878d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (decor == null) decor = win.getDecorView(); 22888d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn return event.dispatch(this, decor != null 22898d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn ? decor.getKeyDispatcherState() : null, this); 22909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 229364da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * Called to process a key shortcut event. 229464da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * You can override this to intercept all key shortcut events before they are 229564da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * dispatched to the window. Be sure to call this implementation for key shortcut 229664da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * events that should be handled normally. 229764da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * 229864da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * @param event The key shortcut event. 229964da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown * @return True if this event was consumed. 230064da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown */ 230164da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown public boolean dispatchKeyShortcutEvent(KeyEvent event) { 230264da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown onUserInteraction(); 230364da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown if (getWindow().superDispatchKeyShortcutEvent(event)) { 230464da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown return true; 230564da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown } 230664da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown return onKeyShortcut(event.getKeyCode(), event); 230764da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown } 230864da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown 230964da12ab1f472e01325b6c6d094153ac110eaf7bJeff Brown /** 23109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called to process touch screen events. You can override this to 23119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * intercept all touch screen events before they are dispatched to the 23129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * window. Be sure to call this implementation for touch screen events 23139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that should be handled normally. 23149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 23159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param ev The touch screen event. 23169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 23179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return boolean Return true if this event was consumed. 23189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 23199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean dispatchTouchEvent(MotionEvent ev) { 23209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ev.getAction() == MotionEvent.ACTION_DOWN) { 23219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onUserInteraction(); 23229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (getWindow().superDispatchTouchEvent(ev)) { 23249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 23259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return onTouchEvent(ev); 23279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 23309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called to process trackball events. You can override this to 23319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * intercept all trackball events before they are dispatched to the 23329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * window. Be sure to call this implementation for trackball events 23339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that should be handled normally. 23349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 23359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param ev The trackball event. 23369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 23379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return boolean Return true if this event was consumed. 23389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 23399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean dispatchTrackballEvent(MotionEvent ev) { 23409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onUserInteraction(); 23419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (getWindow().superDispatchTrackballEvent(ev)) { 23429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 23439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return onTrackballEvent(ev); 23459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 234675986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov 2347cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown /** 2348cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * Called to process generic motion events. You can override this to 2349cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * intercept all generic motion events before they are dispatched to the 2350cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * window. Be sure to call this implementation for generic motion events 2351cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * that should be handled normally. 2352cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 2353cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * @param ev The generic motion event. 2354cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * 2355cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown * @return boolean Return true if this event was consumed. 2356cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown */ 2357cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown public boolean dispatchGenericMotionEvent(MotionEvent ev) { 2358cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown onUserInteraction(); 2359cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown if (getWindow().superDispatchGenericMotionEvent(ev)) { 2360cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown return true; 2361cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown } 2362cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown return onGenericMotionEvent(ev); 2363cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown } 2364cb1404e45639d20439d7700b06d57ca1a1aad1faJeff Brown 236575986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { 236675986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov event.setClassName(getClass().getName()); 236775986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov event.setPackageName(getPackageName()); 236875986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov 236975986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov LayoutParams params = getWindow().getAttributes(); 2370980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy boolean isFullScreen = (params.width == LayoutParams.MATCH_PARENT) && 2371980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy (params.height == LayoutParams.MATCH_PARENT); 237275986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov event.setFullScreen(isFullScreen); 237375986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov 237475986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov CharSequence title = getTitle(); 237575986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov if (!TextUtils.isEmpty(title)) { 237675986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov event.getText().add(title); 237775986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov } 237875986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov 237975986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov return true; 238075986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov } 238175986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov 23829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 23839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Default implementation of 23849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window.Callback#onCreatePanelView} 23859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for activities. This 23869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * simply returns null so that all panel sub-windows will have the default 23879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * menu behavior. 23889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 23899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public View onCreatePanelView(int featureId) { 23909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 23919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 23949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Default implementation of 23959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window.Callback#onCreatePanelMenu} 23969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for activities. This calls through to the new 23979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onCreateOptionsMenu} method for the 23989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#FEATURE_OPTIONS_PANEL} panel, 23999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * so that subclasses of Activity don't need to deal with feature codes. 24009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 24019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onCreatePanelMenu(int featureId, Menu menu) { 24029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (featureId == Window.FEATURE_OPTIONS_PANEL) { 2403b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn boolean show = onCreateOptionsMenu(menu); 2404b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn show |= mFragments.dispatchCreateOptionsMenu(menu, getMenuInflater()); 2405b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn return show; 24069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 24089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 24119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Default implementation of 24129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window.Callback#onPreparePanel} 24139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for activities. This 24149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * calls through to the new {@link #onPrepareOptionsMenu} method for the 24159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#FEATURE_OPTIONS_PANEL} 24169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * panel, so that subclasses of 24179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Activity don't need to deal with feature codes. 24189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 24199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onPreparePanel(int featureId, View view, Menu menu) { 24209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (featureId == Window.FEATURE_OPTIONS_PANEL && menu != null) { 24219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean goforit = onPrepareOptionsMenu(menu); 2422b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn goforit |= mFragments.dispatchPrepareOptionsMenu(menu); 24239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return goforit && menu.hasVisibleItems(); 24249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 24269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 24299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 24309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 24319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The default implementation returns true. 24329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 24339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onMenuOpened(int featureId, Menu menu) { 24348515ee846bd76aee86ec5ddfcc4dd1e626dd999cAdam Powell if (featureId == Window.FEATURE_ACTION_BAR) { 2435763cbb134f40fa1e555c0a945a2a651f69193505Adam Powell initActionBar(); 2436049dd3d4a4869e0c65d370e2538fcfb55bacef52Adam Powell if (mActionBar != null) { 2437049dd3d4a4869e0c65d370e2538fcfb55bacef52Adam Powell mActionBar.dispatchMenuVisibilityChanged(true); 2438049dd3d4a4869e0c65d370e2538fcfb55bacef52Adam Powell } else { 2439049dd3d4a4869e0c65d370e2538fcfb55bacef52Adam Powell Log.e(TAG, "Tried to open action bar menu with no action bar"); 2440049dd3d4a4869e0c65d370e2538fcfb55bacef52Adam Powell } 24418515ee846bd76aee86ec5ddfcc4dd1e626dd999cAdam Powell } 24429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 24439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 24469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Default implementation of 24479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window.Callback#onMenuItemSelected} 24489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for activities. This calls through to the new 24499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onOptionsItemSelected} method for the 24509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#FEATURE_OPTIONS_PANEL} 24519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * panel, so that subclasses of 24529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Activity don't need to deal with feature codes. 24539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 24549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onMenuItemSelected(int featureId, MenuItem item) { 24559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (featureId) { 24569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case Window.FEATURE_OPTIONS_PANEL: 24579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Put event logging here so it gets called even if subclass 24589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // doesn't call through to superclass's implmeentation of each 24599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // of these methods below 24609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EventLog.writeEvent(50000, 0, item.getTitleCondensed()); 2461b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn if (onOptionsItemSelected(item)) { 2462b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn return true; 2463b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 2464b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn return mFragments.dispatchOptionsItemSelected(item); 24659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case Window.FEATURE_CONTEXT_MENU: 24679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EventLog.writeEvent(50000, 1, item.getTitleCondensed()); 24685ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn if (onContextItemSelected(item)) { 24695ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn return true; 24705ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn } 24715ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn return mFragments.dispatchContextItemSelected(item); 24728515ee846bd76aee86ec5ddfcc4dd1e626dd999cAdam Powell 24739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 24749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 24759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 24799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Default implementation of 24809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window.Callback#onPanelClosed(int, Menu)} for 24819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activities. This calls through to {@link #onOptionsMenuClosed(Menu)} 24829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * method for the {@link android.view.Window#FEATURE_OPTIONS_PANEL} panel, 24839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * so that subclasses of Activity don't need to deal with feature codes. 24849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * For context menus ({@link Window#FEATURE_CONTEXT_MENU}), the 24859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onContextMenuClosed(Menu)} will be called. 24869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 24879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onPanelClosed(int featureId, Menu menu) { 24889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (featureId) { 24899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case Window.FEATURE_OPTIONS_PANEL: 2490b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn mFragments.dispatchOptionsMenuClosed(menu); 24919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onOptionsMenuClosed(menu); 24929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 24939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case Window.FEATURE_CONTEXT_MENU: 24959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onContextMenuClosed(menu); 24969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 24978515ee846bd76aee86ec5ddfcc4dd1e626dd999cAdam Powell 24988515ee846bd76aee86ec5ddfcc4dd1e626dd999cAdam Powell case Window.FEATURE_ACTION_BAR: 24999b4bee0f14bbd137b0797127aff2df46a6321ec5Adam Powell initActionBar(); 25008515ee846bd76aee86ec5ddfcc4dd1e626dd999cAdam Powell mActionBar.dispatchMenuVisibilityChanged(false); 25018515ee846bd76aee86ec5ddfcc4dd1e626dd999cAdam Powell break; 25029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2506b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * Declare that the options menu has changed, so should be recreated. 2507b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * The {@link #onCreateOptionsMenu(Menu)} method will be called the next 2508b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn * time it needs to be displayed. 2509b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn */ 2510b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn public void invalidateOptionsMenu() { 2511b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn mWindow.invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL); 2512b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 2513b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn 2514b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn /** 25159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Initialize the contents of the Activity's standard options menu. You 25169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * should place your menu items in to <var>menu</var>. 25179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This is only called once, the first time the options menu is 25199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * displayed. To update the menu every time it is displayed, see 25209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onPrepareOptionsMenu}. 25219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The default implementation populates the menu with standard system 25239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * menu items. These are placed in the {@link Menu#CATEGORY_SYSTEM} group so that 25249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * they will be correctly ordered with application-defined menu items. 25259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Deriving classes should always call through to the base implementation. 25269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>You can safely hold on to <var>menu</var> (and any items created 25289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from it), making modifications to it as desired, until the next 25299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * time onCreateOptionsMenu() is called. 25309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>When you add items to the menu, you can implement the Activity's 25329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onOptionsItemSelected} method to handle them there. 25339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param menu The options menu in which you place your items. 25359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return You must return true for the menu to be displayed; 25379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if you return false it will not be shown. 25389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPrepareOptionsMenu 25409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onOptionsItemSelected 25419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 25429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onCreateOptionsMenu(Menu menu) { 25439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent != null) { 25449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParent.onCreateOptionsMenu(menu); 25459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 25479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 25509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Prepare the Screen's standard options menu to be displayed. This is 25519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * called right before the menu is shown, every time it is shown. You can 25529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * use this method to efficiently enable/disable items or otherwise 25539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * dynamically modify the contents. 25549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The default implementation updates the system menu items based on the 25569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity's state. Deriving classes should always call through to the 25579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * base class implementation. 25589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param menu The options menu as last shown or first initialized by 25609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onCreateOptionsMenu(). 25619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return You must return true for the menu to be displayed; 25639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if you return false it will not be shown. 25649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onCreateOptionsMenu 25669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 25679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onPrepareOptionsMenu(Menu menu) { 25689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent != null) { 25699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParent.onPrepareOptionsMenu(menu); 25709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 25729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 25759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This hook is called whenever an item in your options menu is selected. 25769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default implementation simply returns false to have the normal 25779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * processing happen (calling the item's Runnable or sending a message to 25789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * its Handler as appropriate). You can use this method for any items 25799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for which you would like to do processing without those other 25809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * facilities. 25819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Derived classes should call through to the base class for it to 25839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * perform the default menu handling. 25849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param item The menu item that was selected. 25869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return boolean Return false to allow normal menu processing to 25889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * proceed, true to consume it here. 25899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onCreateOptionsMenu 25919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 25929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onOptionsItemSelected(MenuItem item) { 25939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent != null) { 25949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParent.onOptionsItemSelected(item); 25959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 25979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 26009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This hook is called whenever the options menu is being closed (either by the user canceling 26019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the menu with the back/menu button, or when an item is selected). 26029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param menu The options menu as last shown or first initialized by 26049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onCreateOptionsMenu(). 26059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 26069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onOptionsMenuClosed(Menu menu) { 26079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent != null) { 26089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent.onOptionsMenuClosed(menu); 26099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 26129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 26139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Programmatically opens the options menu. If the options menu is already 26149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * open, this method does nothing. 26159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 26169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void openOptionsMenu() { 26179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.openPanel(Window.FEATURE_OPTIONS_PANEL, null); 26189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 26209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 26219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Progammatically closes the options menu. If the options menu is already 26229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * closed, this method does nothing. 26239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 26249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void closeOptionsMenu() { 26259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.closePanel(Window.FEATURE_OPTIONS_PANEL); 26269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 26289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 26299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when a context menu for the {@code view} is about to be shown. 26309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unlike {@link #onCreateOptionsMenu(Menu)}, this will be called every 26319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * time the context menu is about to be shown and should be populated for 26329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the view (or item inside the view for {@link AdapterView} subclasses, 26339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this can be found in the {@code menuInfo})). 26349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 26359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use {@link #onContextItemSelected(android.view.MenuItem)} to know when an 26369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * item has been selected. 26379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 26389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * It is not safe to hold onto the context menu after this method returns. 26399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 26409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 26419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 26429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 26449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 26459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Registers a context menu to be shown for the given view (multiple views 26469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can show the context menu). This method will set the 26479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link OnCreateContextMenuListener} on the view to this activity, so 26489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onCreateContextMenu(ContextMenu, View, ContextMenuInfo)} will be 26499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * called when it is time to show the context menu. 26509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #unregisterForContextMenu(View) 26529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The view that should show a context menu. 26539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 26549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void registerForContextMenu(View view) { 26559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project view.setOnCreateContextMenuListener(this); 26569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 26589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 26599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Prevents a context menu to be shown for the given view. This method will remove the 26609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link OnCreateContextMenuListener} on the view. 26619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #registerForContextMenu(View) 26639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The view that should stop showing a context menu. 26649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 26659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void unregisterForContextMenu(View view) { 26669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project view.setOnCreateContextMenuListener(null); 26679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 26699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 26709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Programmatically opens the context menu for a particular {@code view}. 26719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The {@code view} should have been added via 26729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #registerForContextMenu(View)}. 26739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The view to show the context menu for. 26759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 26769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void openContextMenu(View view) { 26779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project view.showContextMenu(); 26789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 26809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 26819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Programmatically closes the most recently opened context menu, if showing. 26829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 26839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void closeContextMenu() { 26849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.closePanel(Window.FEATURE_CONTEXT_MENU); 26859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 26879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 26889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This hook is called whenever an item in a context menu is selected. The 26899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * default implementation simply returns false to have the normal processing 26909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * happen (calling the item's Runnable or sending a message to its Handler 26919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as appropriate). You can use this method for any items for which you 26929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * would like to do processing without those other facilities. 26939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 26949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use {@link MenuItem#getMenuInfo()} to get extra information set by the 26959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * View that added this menu item. 26969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 26979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Derived classes should call through to the base class for it to perform 26989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the default menu handling. 26999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 27009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param item The context menu item that was selected. 27019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return boolean Return false to allow normal context menu processing to 27029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * proceed, true to consume it here. 27039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 27049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onContextItemSelected(MenuItem item) { 27059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent != null) { 27069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParent.onContextItemSelected(item); 27079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 27089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 27099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 27109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 27119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 27129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This hook is called whenever the context menu is being closed (either by 27139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the user canceling the menu with the back/menu button, or when an item is 27149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * selected). 27159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 27169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param menu The context menu that is being closed. 27179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 27189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onContextMenuClosed(Menu menu) { 27199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent != null) { 27209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent.onContextMenuClosed(menu); 27219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 27229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 27239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 27249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 27258ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @deprecated Old no-arguments version of {@link #onCreateDialog(int, Bundle)}. 27268ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn */ 27278ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn @Deprecated 27288ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn protected Dialog onCreateDialog(int id) { 27298ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn return null; 27308ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn } 27318ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn 27328ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn /** 27339567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * @deprecated Use the new {@link DialogFragment} class with 27349567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * {@link FragmentManager} instead; this is also 27359567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * available on older platforms through the Android compatibility package. 27369567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * 27379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Callback for creating dialogs that are managed (saved and restored) for you 27388ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * by the activity. The default implementation calls through to 27398ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * {@link #onCreateDialog(int)} for compatibility. 27409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2741291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <em>If you are targeting {@link android.os.Build.VERSION_CODES#HONEYCOMB} 2742291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * or later, consider instead using a {@link DialogFragment} instead.</em> 2743291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 27448ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * <p>If you use {@link #showDialog(int)}, the activity will call through to 27459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this method the first time, and hang onto it thereafter. Any dialog 27469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that is created by this method will automatically be saved and restored 27479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for you, including whether it is showing. 27489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 27498ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * <p>If you would like the activity to manage saving and restoring dialogs 27509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for you, you should override this method and handle any ids that are 27519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * passed to {@link #showDialog}. 27529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 27538ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * <p>If you would like an opportunity to prepare your dialog before it is shown, 27548ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * override {@link #onPrepareDialog(int, Dialog, Bundle)}. 27559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 27569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param id The id of the dialog. 27578ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @param args The dialog arguments provided to {@link #showDialog(int, Bundle)}. 27588ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @return The dialog. If you return null, the dialog will not be created. 27599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 27608ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #onPrepareDialog(int, Dialog, Bundle) 27618ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #showDialog(int, Bundle) 27629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #dismissDialog(int) 27639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #removeDialog(int) 27649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 27659567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn @Deprecated 27668ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn protected Dialog onCreateDialog(int id, Bundle args) { 27678ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn return onCreateDialog(id); 27688ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn } 27698ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn 27708ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn /** 27718ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @deprecated Old no-arguments version of 27728ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * {@link #onPrepareDialog(int, Dialog, Bundle)}. 27738ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn */ 27748ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn @Deprecated 27758ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn protected void onPrepareDialog(int id, Dialog dialog) { 27768ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn dialog.setOwnerActivity(this); 27779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 27789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 27799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 27809567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * @deprecated Use the new {@link DialogFragment} class with 27819567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * {@link FragmentManager} instead; this is also 27829567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * available on older platforms through the Android compatibility package. 27839567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * 27849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Provides an opportunity to prepare a managed dialog before it is being 27858ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * shown. The default implementation calls through to 27868ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * {@link #onPrepareDialog(int, Dialog)} for compatibility. 27878ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * 27889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 27899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Override this if you need to update a managed dialog based on the state 27909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of the application each time it is shown. For example, a time picker 27919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * dialog might want to be updated with the current time. You should call 27929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * through to the superclass's implementation. The default implementation 27939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will set this Activity as the owner activity on the Dialog. 27949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 27959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param id The id of the managed dialog. 27969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dialog The dialog. 27978ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @param args The dialog arguments provided to {@link #showDialog(int, Bundle)}. 27988ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #onCreateDialog(int, Bundle) 27999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #showDialog(int) 28009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #dismissDialog(int) 28019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #removeDialog(int) 28029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 28039567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn @Deprecated 28048ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn protected void onPrepareDialog(int id, Dialog dialog, Bundle args) { 28058ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn onPrepareDialog(id, dialog); 28069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 28099567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * @deprecated Use the new {@link DialogFragment} class with 28109567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * {@link FragmentManager} instead; this is also 28119567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * available on older platforms through the Android compatibility package. 28129567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * 28138ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * Simple version of {@link #showDialog(int, Bundle)} that does not 28148ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * take any arguments. Simply calls {@link #showDialog(int, Bundle)} 28158ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * with null arguments. 28168ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn */ 28179567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn @Deprecated 28188ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn public final void showDialog(int id) { 28198ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn showDialog(id, null); 28208ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn } 28218ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn 28228ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn /** 28239567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * @deprecated Use the new {@link DialogFragment} class with 28249567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * {@link FragmentManager} instead; this is also 28259567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * available on older platforms through the Android compatibility package. 28269567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * 28278ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * Show a dialog managed by this activity. A call to {@link #onCreateDialog(int, Bundle)} 28289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will be made with the same id the first time this is called for a given 28299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * id. From thereafter, the dialog will be automatically saved and restored. 28309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2831291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * <em>If you are targeting {@link android.os.Build.VERSION_CODES#HONEYCOMB} 2832291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * or later, consider instead using a {@link DialogFragment} instead.</em> 2833291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn * 28348ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * <p>Each time a dialog is shown, {@link #onPrepareDialog(int, Dialog, Bundle)} will 28359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be made to provide an opportunity to do any timely preparation. 28369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 28379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param id The id of the managed dialog. 28388ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @param args Arguments to pass through to the dialog. These will be saved 28398ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * and restored for you. Note that if the dialog is already created, 28408ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * {@link #onCreateDialog(int, Bundle)} will not be called with the new 28418ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * arguments but {@link #onPrepareDialog(int, Dialog, Bundle)} will be. 2842d47c6ed4a9f2b5bd31f6c806b74701428efe458bDianne Hackborn * If you need to rebuild the dialog, call {@link #removeDialog(int)} first. 28438ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @return Returns true if the Dialog was created; false is returned if 28448ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * it is not created because {@link #onCreateDialog(int, Bundle)} returns false. 28458ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * 284637296dc4edae8d1383179e956dff2ecf806ac166Joe Onorato * @see Dialog 28478ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #onCreateDialog(int, Bundle) 28488ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #onPrepareDialog(int, Dialog, Bundle) 28499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #dismissDialog(int) 28509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #removeDialog(int) 28519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 28529567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn @Deprecated 28538ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn public final boolean showDialog(int id, Bundle args) { 28549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mManagedDialogs == null) { 28558ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn mManagedDialogs = new SparseArray<ManagedDialog>(); 28569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28578ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn ManagedDialog md = mManagedDialogs.get(id); 28588ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn if (md == null) { 28598ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md = new ManagedDialog(); 28608ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md.mDialog = createDialog(id, null, args); 28618ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn if (md.mDialog == null) { 28628ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn return false; 28638ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn } 28648ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn mManagedDialogs.put(id, md); 28659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28678ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md.mArgs = args; 28688ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn onPrepareDialog(id, md.mDialog, args); 28698ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md.mDialog.show(); 28708ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn return true; 28719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 28749567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * @deprecated Use the new {@link DialogFragment} class with 28759567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * {@link FragmentManager} instead; this is also 28769567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * available on older platforms through the Android compatibility package. 28779567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * 28789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Dismiss a dialog that was previously shown via {@link #showDialog(int)}. 28799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 28809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param id The id of the managed dialog. 28819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 28829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws IllegalArgumentException if the id was not previously shown via 28839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #showDialog(int)}. 28849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 28858ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #onCreateDialog(int, Bundle) 28868ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #onPrepareDialog(int, Dialog, Bundle) 28879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #showDialog(int) 28889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #removeDialog(int) 28899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 28909567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn @Deprecated 28919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void dismissDialog(int id) { 28929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mManagedDialogs == null) { 28939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw missingDialog(id); 28949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28958ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn 28968ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn final ManagedDialog md = mManagedDialogs.get(id); 28978ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn if (md == null) { 28989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw missingDialog(id); 28999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 29008ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md.mDialog.dismiss(); 29019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 29029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 29039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 29049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Creates an exception to throw if a user passed in a dialog id that is 29059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * unexpected. 29069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 29079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IllegalArgumentException missingDialog(int id) { 29089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new IllegalArgumentException("no dialog with id " + id + " was ever " 29099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + "shown via Activity#showDialog"); 29109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 29119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 29129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 29139567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * @deprecated Use the new {@link DialogFragment} class with 29149567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * {@link FragmentManager} instead; this is also 29159567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * available on older platforms through the Android compatibility package. 29169567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn * 29179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Removes any internal references to a dialog managed by this Activity. 29189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If the dialog is showing, it will dismiss it as part of the clean up. 29199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 29208ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * <p>This can be useful if you know that you will never show a dialog again and 29219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * want to avoid the overhead of saving and restoring it in the future. 29229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2923d2ce8bbb84607b1f456b9af00d8d7b84a4610a79Dianne Hackborn * <p>As of {@link android.os.Build.VERSION_CODES#GINGERBREAD}, this function 2924d2ce8bbb84607b1f456b9af00d8d7b84a4610a79Dianne Hackborn * will not throw an exception if you try to remove an ID that does not 2925d2ce8bbb84607b1f456b9af00d8d7b84a4610a79Dianne Hackborn * currently have an associated dialog.</p> 2926d2ce8bbb84607b1f456b9af00d8d7b84a4610a79Dianne Hackborn * 29279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param id The id of the managed dialog. 29289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 29298ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #onCreateDialog(int, Bundle) 29308ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #onPrepareDialog(int, Dialog, Bundle) 29319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #showDialog(int) 29329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #dismissDialog(int) 29339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 29349567a66a5e6f49dd8495fb5f6e2efb9f32e84b35Dianne Hackborn @Deprecated 29359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void removeDialog(int id) { 2936d2ce8bbb84607b1f456b9af00d8d7b84a4610a79Dianne Hackborn if (mManagedDialogs != null) { 2937d2ce8bbb84607b1f456b9af00d8d7b84a4610a79Dianne Hackborn final ManagedDialog md = mManagedDialogs.get(id); 2938d2ce8bbb84607b1f456b9af00d8d7b84a4610a79Dianne Hackborn if (md != null) { 2939d2ce8bbb84607b1f456b9af00d8d7b84a4610a79Dianne Hackborn md.mDialog.dismiss(); 2940d2ce8bbb84607b1f456b9af00d8d7b84a4610a79Dianne Hackborn mManagedDialogs.remove(id); 2941d2ce8bbb84607b1f456b9af00d8d7b84a4610a79Dianne Hackborn } 29429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 29439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 29449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 29459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 29469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This hook is called when the user signals the desire to start a search. 29479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 29486266e40a754d82afa717ef068898c8418a0bb5c3Bjorn Bringert * <p>You can use this function as a simple way to launch the search UI, in response to a 29496266e40a754d82afa717ef068898c8418a0bb5c3Bjorn Bringert * menu item, search button, or other widgets within your activity. Unless overidden, 29506266e40a754d82afa717ef068898c8418a0bb5c3Bjorn Bringert * calling this function is the same as calling 29516266e40a754d82afa717ef068898c8418a0bb5c3Bjorn Bringert * {@link #startSearch startSearch(null, false, null, false)}, which launches 29526266e40a754d82afa717ef068898c8418a0bb5c3Bjorn Bringert * search for the current activity as specified in its manifest, see {@link SearchManager}. 29539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 29549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>You can override this function to force global search, e.g. in response to a dedicated 29559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * search key, or to block search entirely (by simply returning false). 29569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 29576266e40a754d82afa717ef068898c8418a0bb5c3Bjorn Bringert * @return Returns {@code true} if search launched, and {@code false} if activity blocks it. 29586266e40a754d82afa717ef068898c8418a0bb5c3Bjorn Bringert * The default implementation always returns {@code true}. 29599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 29609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.app.SearchManager 29619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 29629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onSearchRequested() { 29639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startSearch(null, false, null, false); 29649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 29659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 29669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 29679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 29689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This hook is called to launch the search UI. 29699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 29709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>It is typically called from onSearchRequested(), either directly from 29719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Activity.onSearchRequested() or from an overridden version in any given 29729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Activity. If your goal is simply to activate search, it is preferred to call 29739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onSearchRequested(), which may have been overriden elsewhere in your Activity. If your goal 29749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is to inject specific data such as context data, it is preferred to <i>override</i> 29759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onSearchRequested(), so that any callers to it will benefit from the override. 29769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 29779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param initialQuery Any non-null non-empty string will be inserted as 29789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * pre-entered text in the search query box. 29799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param selectInitialQuery If true, the intial query will be preselected, which means that 29809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * any further typing will replace it. This is useful for cases where an entire pre-formed 29819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * query is being inserted. If false, the selection point will be placed at the end of the 29829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * inserted query. This is useful when the inserted query is text that the user entered, 29839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and the user would expect to be able to keep typing. <i>This parameter is only meaningful 29849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if initialQuery is a non-empty string.</i> 29859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param appSearchData An application can insert application-specific 29869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * context here, in order to improve quality or specificity of its own 29879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * searches. This data will be returned with SEARCH intent(s). Null if 29889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * no extra data is required. 29899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param globalSearch If false, this will only launch the search that has been specifically 29909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * defined by the application (which is usually defined as a local search). If no default 2991cfa419b754332e12f8cd45244c2f3bee9d6a74bbMike LeBeau * search is defined in the current application or activity, global search will be launched. 29929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If true, this will always launch a platform-global (e.g. web-based) search instead. 29939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 29949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.app.SearchManager 29959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onSearchRequested 29969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 29979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void startSearch(String initialQuery, boolean selectInitialQuery, 29989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bundle appSearchData, boolean globalSearch) { 2999b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn ensureSearchManager(); 30008d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert mSearchManager.startSearch(initialQuery, selectInitialQuery, getComponentName(), 30019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project appSearchData, globalSearch); 30029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 30049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3005d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen * Similar to {@link #startSearch}, but actually fires off the search query after invoking 3006d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen * the search dialog. Made available for testing purposes. 3007d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen * 3008d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen * @param query The query to trigger. If empty, the request will be ignored. 3009d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen * @param appSearchData An application can insert application-specific 3010d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen * context here, in order to improve quality or specificity of its own 3011d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen * searches. This data will be returned with SEARCH intent(s). Null if 3012d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen * no extra data is required. 3013d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen */ 3014b782a2f4f0a3072f2677f6f10fb255c77468ae66Bjorn Bringert public void triggerSearch(String query, Bundle appSearchData) { 3015d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen ensureSearchManager(); 3016b782a2f4f0a3072f2677f6f10fb255c77468ae66Bjorn Bringert mSearchManager.triggerSearch(query, getComponentName(), appSearchData); 3017d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen } 3018d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen 3019d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen /** 30209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Request that key events come to this activity. Use this if your 30219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity has no views with focus, but the activity still wants 30229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a chance to process key events. 30239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 30249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.Window#takeKeyEvents 30259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 30269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void takeKeyEvents(boolean get) { 30279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().takeKeyEvents(get); 30289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 30309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 30319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Enable extended window features. This is a convenience for calling 30329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#requestFeature getWindow().requestFeature()}. 30339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 30349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param featureId The desired feature as defined in 30359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window}. 30369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns true if the requested feature is supported and now 30379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * enabled. 30389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 30399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.Window#requestFeature 30409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 30419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean requestWindowFeature(int featureId) { 30429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getWindow().requestFeature(featureId); 30439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 30459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 30469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convenience for calling 30479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#setFeatureDrawableResource}. 30489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 30499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setFeatureDrawableResource(int featureId, int resId) { 30509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureDrawableResource(featureId, resId); 30519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 30539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 30549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convenience for calling 30559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#setFeatureDrawableUri}. 30569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 30579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setFeatureDrawableUri(int featureId, Uri uri) { 30589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureDrawableUri(featureId, uri); 30599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 30619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 30629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convenience for calling 30639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#setFeatureDrawable(int, Drawable)}. 30649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 30659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setFeatureDrawable(int featureId, Drawable drawable) { 30669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureDrawable(featureId, drawable); 30679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 30699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 30709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convenience for calling 30719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#setFeatureDrawableAlpha}. 30729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 30739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setFeatureDrawableAlpha(int featureId, int alpha) { 30749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureDrawableAlpha(featureId, alpha); 30759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 30779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 30789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convenience for calling 30799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#getLayoutInflater}. 30809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 30819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public LayoutInflater getLayoutInflater() { 30829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getWindow().getLayoutInflater(); 30839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 30859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 30869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a {@link MenuInflater} with this context. 30879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 30889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public MenuInflater getMenuInflater() { 308988ab69780f58e4b32d497266b2ad646a4d74827bAdam Powell // Make sure that action views can get an appropriate theme. 309088ab69780f58e4b32d497266b2ad646a4d74827bAdam Powell if (mMenuInflater == null) { 309188ab69780f58e4b32d497266b2ad646a4d74827bAdam Powell initActionBar(); 309288ab69780f58e4b32d497266b2ad646a4d74827bAdam Powell if (mActionBar != null) { 309388ab69780f58e4b32d497266b2ad646a4d74827bAdam Powell mMenuInflater = new MenuInflater(mActionBar.getThemedContext()); 309488ab69780f58e4b32d497266b2ad646a4d74827bAdam Powell } else { 309588ab69780f58e4b32d497266b2ad646a4d74827bAdam Powell mMenuInflater = new MenuInflater(this); 309688ab69780f58e4b32d497266b2ad646a4d74827bAdam Powell } 309788ab69780f58e4b32d497266b2ad646a4d74827bAdam Powell } 309888ab69780f58e4b32d497266b2ad646a4d74827bAdam Powell return mMenuInflater; 30999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 31009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 31019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3102bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn protected void onApplyThemeResource(Resources.Theme theme, int resid, 3103bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn boolean first) { 31049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 31059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.onApplyThemeResource(theme, resid, first); 31069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 31079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 31089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project theme.setTo(mParent.getTheme()); 31099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (Exception e) { 31109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 31119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 31129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project theme.applyStyle(resid, false); 31139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 31149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 31159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 31169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 31179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Launch an activity for which you would like a result when it finished. 31189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When this activity exits, your 31199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onActivityResult() method will be called with the given requestCode. 31209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Using a negative requestCode is the same as calling 31219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #startActivity} (the activity is not launched as a sub-activity). 31229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 31239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note that this method should only be used with Intent protocols 31249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that are defined to return a result. In other protocols (such as 31259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Intent#ACTION_MAIN} or {@link Intent#ACTION_VIEW}), you may 31269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not get the result when you expect. For example, if the activity you 31279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are launching uses the singleTask launch mode, it will not run in your 31289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * task and thus you will immediately receive a cancel result. 31299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 31309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>As a special case, if you call startActivityForResult() with a requestCode 31319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * >= 0 during the initial onCreate(Bundle savedInstanceState)/onResume() of your 31329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity, then your window will not be displayed until a result is 31339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returned back from the started activity. This is to avoid visible 31349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * flickering when redirecting to another activity. 31359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 31369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This method throws {@link android.content.ActivityNotFoundException} 31379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if there was no Activity found to run the given Intent. 31389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 31399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param intent The intent to start. 31409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param requestCode If >= 0, this code will be returned in 31419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onActivityResult() when the activity exits. 31429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 31439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws android.content.ActivityNotFoundException 31449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 31459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startActivity 31469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 31479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void startActivityForResult(Intent intent, int requestCode) { 31489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 31499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Instrumentation.ActivityResult ar = 31509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentation.execStartActivity( 31519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this, mMainThread.getApplicationThread(), mToken, this, 31529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project intent, requestCode); 31539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ar != null) { 31549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMainThread.sendActivityResult( 31559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mToken, mEmbeddedID, requestCode, ar.getResultCode(), 31569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ar.getResultData()); 31579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 31589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (requestCode >= 0) { 31599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // If this start is requesting a result, we can avoid making 31609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // the activity visible until the result is received. Setting 31619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // this code during onCreate(Bundle savedInstanceState) or onResume() will keep the 31629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // activity hidden during this time, to avoid flickering. 31639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // This can only be done when a result is requested because 31649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // that guarantees we will get information back when the 31659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // activity is finished, no matter what happens to it. 31669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStartedActivity = true; 31679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 31689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 31699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent.startActivityFromChild(this, intent, requestCode); 31709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 31719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 31729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 31739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3174bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * Like {@link #startActivityForResult(Intent, int)}, but allowing you 3175fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * to use a IntentSender to describe the activity to be started. If 3176fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * the IntentSender is for an activity, that activity will be started 3177fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * as if you had called the regular {@link #startActivityForResult(Intent, int)} 3178fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * here; otherwise, its associated action will be executed (such as 3179fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * sending a broadcast) as if you had called 3180fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * {@link IntentSender#sendIntent IntentSender.sendIntent} on it. 3181fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * 3182fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * @param intent The IntentSender to launch. 3183bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * @param requestCode If >= 0, this code will be returned in 3184bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * onActivityResult() when the activity exits. 3185bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * @param fillInIntent If non-null, this will be provided as the 3186fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * intent parameter to {@link IntentSender#sendIntent}. 3187fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * @param flagsMask Intent flags in the original IntentSender that you 3188bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * would like to change. 3189bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * @param flagsValues Desired values for any bits set in 3190bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * <var>flagsMask</var> 3191fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * @param extraFlags Always set to 0. 3192bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn */ 3193fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn public void startIntentSenderForResult(IntentSender intent, int requestCode, 3194fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags) 3195fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn throws IntentSender.SendIntentException { 3196bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn if (mParent == null) { 3197fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn startIntentSenderForResultInner(intent, requestCode, fillInIntent, 3198bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn flagsMask, flagsValues, this); 3199bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } else { 3200fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn mParent.startIntentSenderFromChild(this, intent, requestCode, 3201fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn fillInIntent, flagsMask, flagsValues, extraFlags); 3202bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 3203bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 3204bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn 3205fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn private void startIntentSenderForResultInner(IntentSender intent, int requestCode, 3206bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn Intent fillInIntent, int flagsMask, int flagsValues, Activity activity) 3207fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn throws IntentSender.SendIntentException { 3208bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn try { 3209bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn String resolvedType = null; 3210bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn if (fillInIntent != null) { 3211bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn resolvedType = fillInIntent.resolveTypeIfNeeded(getContentResolver()); 3212bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 3213bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn int result = ActivityManagerNative.getDefault() 3214fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn .startActivityIntentSender(mMainThread.getApplicationThread(), intent, 3215bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn fillInIntent, resolvedType, mToken, activity.mEmbeddedID, 3216bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn requestCode, flagsMask, flagsValues); 3217bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn if (result == IActivityManager.START_CANCELED) { 3218fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn throw new IntentSender.SendIntentException(); 3219bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 3220bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn Instrumentation.checkStartActivityResult(result, null); 3221bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } catch (RemoteException e) { 3222bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 3223bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn if (requestCode >= 0) { 3224bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn // If this start is requesting a result, we can avoid making 3225bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn // the activity visible until the result is received. Setting 3226bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn // this code during onCreate(Bundle savedInstanceState) or onResume() will keep the 3227bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn // activity hidden during this time, to avoid flickering. 3228bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn // This can only be done when a result is requested because 3229bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn // that guarantees we will get information back when the 3230bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn // activity is finished, no matter what happens to it. 3231bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn mStartedActivity = true; 3232bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 3233bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 3234bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn 3235bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn /** 32369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Launch a new activity. You will not receive any information about when 32379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the activity exits. This implementation overrides the base version, 32389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * providing information about 32399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the activity performing the launch. Because of this additional 32409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * information, the {@link Intent#FLAG_ACTIVITY_NEW_TASK} launch flag is not 32419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * required; if not specified, the new activity will be added to the 32429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * task of the caller. 32439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 32449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This method throws {@link android.content.ActivityNotFoundException} 32459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if there was no Activity found to run the given Intent. 32469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 32479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param intent The intent to start. 32489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 32499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws android.content.ActivityNotFoundException 32509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 32519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startActivityForResult 32529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 32539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 32549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void startActivity(Intent intent) { 32559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startActivityForResult(intent, -1); 32569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 32579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 32589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3259621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * Launch a new activity. You will not receive any information about when 3260621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * the activity exits. This implementation overrides the base version, 3261621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * providing information about 3262621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * the activity performing the launch. Because of this additional 3263621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * information, the {@link Intent#FLAG_ACTIVITY_NEW_TASK} launch flag is not 3264621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * required; if not specified, the new activity will be added to the 3265621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * task of the caller. 3266621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * 3267621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * <p>This method throws {@link android.content.ActivityNotFoundException} 3268621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * if there was no Activity found to run the given Intent. 3269621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * 3270621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * @param intents The intents to start. 3271621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * 3272621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * @throws android.content.ActivityNotFoundException 3273621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * 3274621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn * @see #startActivityForResult 3275621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn */ 3276621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn @Override 3277621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn public void startActivities(Intent[] intents) { 3278621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn mInstrumentation.execStartActivities(this, mMainThread.getApplicationThread(), 3279621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn mToken, this, intents); 3280621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn } 3281621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn 3282621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn /** 3283fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * Like {@link #startActivity(Intent)}, but taking a IntentSender 3284bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * to start; see 3285ae22c05b91d1e7a458066792eb5cfc0974c1be9eDianne Hackborn * {@link #startIntentSenderForResult(IntentSender, int, Intent, int, int, int)} 3286bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * for more information. 3287bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * 3288fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * @param intent The IntentSender to launch. 3289bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * @param fillInIntent If non-null, this will be provided as the 3290fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * intent parameter to {@link IntentSender#sendIntent}. 3291fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * @param flagsMask Intent flags in the original IntentSender that you 3292bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * would like to change. 3293bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * @param flagsValues Desired values for any bits set in 3294bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * <var>flagsMask</var> 3295fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * @param extraFlags Always set to 0. 3296bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn */ 3297fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn public void startIntentSender(IntentSender intent, 3298fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags) 3299fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn throws IntentSender.SendIntentException { 3300fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn startIntentSenderForResult(intent, -1, fillInIntent, flagsMask, 3301fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn flagsValues, extraFlags); 3302bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 3303bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn 3304bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn /** 33059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A special variation to launch an activity only if a new activity 33069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * instance is needed to handle the given Intent. In other words, this is 33079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * just like {@link #startActivityForResult(Intent, int)} except: if you are 33089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * using the {@link Intent#FLAG_ACTIVITY_SINGLE_TOP} flag, or 33099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * singleTask or singleTop 33109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.styleable#AndroidManifestActivity_launchMode launchMode}, 33119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and the activity 33129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that handles <var>intent</var> is the same as your currently running 33139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity, then a new instance is not needed. In this case, instead of 33149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the normal behavior of calling {@link #onNewIntent} this function will 33159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * return and you can handle the Intent yourself. 33169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 33179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This function can only be called from a top-level activity; if it is 33189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * called from a child activity, a runtime exception will be thrown. 33199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 33209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param intent The intent to start. 33219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param requestCode If >= 0, this code will be returned in 33229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onActivityResult() when the activity exits, as described in 33239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #startActivityForResult}. 33249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 33259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return If a new activity was launched then true is returned; otherwise 33269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * false is returned and you must handle the Intent yourself. 33279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 33289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startActivity 33299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startActivityForResult 33309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 33319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean startActivityIfNeeded(Intent intent, int requestCode) { 33329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 33339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int result = IActivityManager.START_RETURN_INTENT_TO_CALLER; 33349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 33359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = ActivityManagerNative.getDefault() 33369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .startActivity(mMainThread.getApplicationThread(), 33379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project intent, intent.resolveTypeIfNeeded( 33389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getContentResolver()), 33399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project null, 0, 33409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mToken, mEmbeddedID, requestCode, true, false); 33419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 33429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 33439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 33459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Instrumentation.checkStartActivityResult(result, intent); 33469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 33479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (requestCode >= 0) { 33489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // If this start is requesting a result, we can avoid making 33499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // the activity visible until the result is received. Setting 33509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // this code during onCreate(Bundle savedInstanceState) or onResume() will keep the 33519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // activity hidden during this time, to avoid flickering. 33529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // This can only be done when a result is requested because 33539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // that guarantees we will get information back when the 33549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // activity is finished, no matter what happens to it. 33559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStartedActivity = true; 33569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return result != IActivityManager.START_RETURN_INTENT_TO_CALLER; 33589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 33609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new UnsupportedOperationException( 33619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "startActivityIfNeeded can only be called from a top-level activity"); 33629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 33649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 33659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Special version of starting an activity, for use when you are replacing 33669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * other activity components. You can use this to hand the Intent off 33679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the next Activity that can handle it. You typically call this in 33689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onCreate} with the Intent returned by {@link #getIntent}. 33699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 33709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param intent The intent to dispatch to the next activity. For 33719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * correct behavior, this must be the same as the Intent that started 33729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * your own activity; the only changes you can make are to the extras 33739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * inside of it. 33749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 33759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a boolean indicating whether there was another Activity 33769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to start: true if there was a next activity to start, false if there 33779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * wasn't. In general, if true is returned you will then want to call 33789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * finish() on yourself. 33799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 33809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean startNextMatchingActivity(Intent intent) { 33819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 33829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 33839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault() 33849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .startNextMatchingActivity(mToken, intent); 33859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 33869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 33879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 33899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 33919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new UnsupportedOperationException( 33929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "startNextMatchingActivity can only be called from a top-level activity"); 33939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 33959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 33969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is called when a child activity of this one calls its 33979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #startActivity} or {@link #startActivityForResult} method. 33989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 33999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This method throws {@link android.content.ActivityNotFoundException} 34009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if there was no Activity found to run the given Intent. 34019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 34029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param child The activity making the call. 34039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param intent The intent to start. 34049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param requestCode Reply request code. < 0 if reply is not requested. 34059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 34069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws android.content.ActivityNotFoundException 34079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 34089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startActivity 34099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startActivityForResult 34109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 34119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void startActivityFromChild(Activity child, Intent intent, 34129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int requestCode) { 34139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Instrumentation.ActivityResult ar = 34149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentation.execStartActivity( 34159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this, mMainThread.getApplicationThread(), mToken, child, 34169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project intent, requestCode); 34179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ar != null) { 34189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMainThread.sendActivityResult( 34199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mToken, child.mEmbeddedID, requestCode, 34209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ar.getResultCode(), ar.getResultData()); 34219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 34249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 34256e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * This is called when a Fragment in this activity calls its 34266e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * {@link Fragment#startActivity} or {@link Fragment#startActivityForResult} 34276e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * method. 34286e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * 34296e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * <p>This method throws {@link android.content.ActivityNotFoundException} 34306e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * if there was no Activity found to run the given Intent. 34316e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * 34326e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * @param fragment The fragment making the call. 34336e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * @param intent The intent to start. 34346e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * @param requestCode Reply request code. < 0 if reply is not requested. 34356e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * 34366e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * @throws android.content.ActivityNotFoundException 34376e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * 34386e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * @see Fragment#startActivity 34396e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn * @see Fragment#startActivityForResult 34406e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn */ 34416e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn public void startActivityFromFragment(Fragment fragment, Intent intent, 34426e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn int requestCode) { 34436e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn Instrumentation.ActivityResult ar = 34446e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mInstrumentation.execStartActivity( 34456e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn this, mMainThread.getApplicationThread(), mToken, fragment, 34466e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn intent, requestCode); 34476e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (ar != null) { 34486e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mMainThread.sendActivityResult( 34496e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mToken, fragment.mWho, requestCode, 34506e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn ar.getResultCode(), ar.getResultData()); 34516e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 34526e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 34536e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 34546e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn /** 3455bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * Like {@link #startActivityFromChild(Activity, Intent, int)}, but 3456fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * taking a IntentSender; see 3457ae22c05b91d1e7a458066792eb5cfc0974c1be9eDianne Hackborn * {@link #startIntentSenderForResult(IntentSender, int, Intent, int, int, int)} 3458bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * for more information. 3459bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn */ 3460fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn public void startIntentSenderFromChild(Activity child, IntentSender intent, 3461fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn int requestCode, Intent fillInIntent, int flagsMask, int flagsValues, 3462fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn int extraFlags) 3463fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn throws IntentSender.SendIntentException { 3464fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn startIntentSenderForResultInner(intent, requestCode, fillInIntent, 3465bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn flagsMask, flagsValues, child); 3466bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 3467bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn 3468bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn /** 34693b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn * Call immediately after one of the flavors of {@link #startActivity(Intent)} 34703b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn * or {@link #finish} to specify an explicit transition animation to 34713b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn * perform next. 34723b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn * @param enterAnim A resource ID of the animation resource to use for 34738b571a817cc953ce96750f440645f104c7f55157Dianne Hackborn * the incoming activity. Use 0 for no animation. 34743b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn * @param exitAnim A resource ID of the animation resource to use for 34758b571a817cc953ce96750f440645f104c7f55157Dianne Hackborn * the outgoing activity. Use 0 for no animation. 34763b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn */ 34773b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn public void overridePendingTransition(int enterAnim, int exitAnim) { 34783b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn try { 34793b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn ActivityManagerNative.getDefault().overridePendingTransition( 34803b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn mToken, getPackageName(), enterAnim, exitAnim); 34813b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn } catch (RemoteException e) { 34823b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn } 34833b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn } 34843b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn 34853b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn /** 34869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Call this to set the result that your activity will return to its 34879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * caller. 34889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 34899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param resultCode The result code to propagate back to the originating 34909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity, often RESULT_CANCELED or RESULT_OK 34919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 34929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #RESULT_CANCELED 34939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #RESULT_OK 34949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #RESULT_FIRST_USER 34959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setResult(int, Intent) 34969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 34979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setResult(int resultCode) { 34989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (this) { 34999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mResultCode = resultCode; 35009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mResultData = null; 35019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 35049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 35059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Call this to set the result that your activity will return to its 35069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * caller. 35079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 35089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param resultCode The result code to propagate back to the originating 35099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity, often RESULT_CANCELED or RESULT_OK 35109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param data The data to propagate back to the originating activity. 35119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 35129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #RESULT_CANCELED 35139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #RESULT_OK 35149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #RESULT_FIRST_USER 35159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setResult(int) 35169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 35179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setResult(int resultCode, Intent data) { 35189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (this) { 35199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mResultCode = resultCode; 35209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mResultData = data; 35219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 35249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 35259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the name of the package that invoked this activity. This is who 35269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the data in {@link #setResult setResult()} will be sent to. You can 35279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * use this information to validate that the recipient is allowed to 35289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * receive the data. 35299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 35309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note: if the calling activity is not expecting a result (that is it 35319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * did not use the {@link #startActivityForResult} 35329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * form that includes a request code), then the calling package will be 35339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * null. 35349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 35359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The package of the activity that will receive your 35369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * reply, or null if none. 35379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 35389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getCallingPackage() { 35399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 35409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault().getCallingPackage(mToken); 35419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 35429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 35439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 35469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 35479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the name of the activity that invoked this activity. This is 35489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * who the data in {@link #setResult setResult()} will be sent to. You 35499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can use this information to validate that the recipient is allowed to 35509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * receive the data. 35519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 35529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note: if the calling activity is not expecting a result (that is it 35539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * did not use the {@link #startActivityForResult} 35549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * form that includes a request code), then the calling package will be 35559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * null. 35569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 35579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return String The full name of the activity that will receive your 35589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * reply, or null if none. 35599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 35609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ComponentName getCallingActivity() { 35619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 35629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault().getCallingActivity(mToken); 35639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 35649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 35659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 35689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 35699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Control whether this activity's main window is visible. This is intended 35709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * only for the special case of an activity that is not going to show a 35719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * UI itself, but can't just finish prior to onResume() because it needs 35729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to wait for a service binding or such. Setting this to false allows 35739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you to prevent your UI from being shown during that time. 35749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 35759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The default value for this is taken from the 35769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.attr#windowNoDisplay} attribute of the activity's theme. 35779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 35789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setVisible(boolean visible) { 35799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mVisibleFromClient != visible) { 35809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mVisibleFromClient = visible; 35819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mVisibleFromServer) { 35829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (visible) makeVisible(); 35839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else mDecor.setVisibility(View.INVISIBLE); 35849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 35889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void makeVisible() { 35899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mWindowAdded) { 35909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ViewManager wm = getWindowManager(); 35919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wm.addView(mDecor, getWindow().getAttributes()); 35929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindowAdded = true; 35939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDecor.setVisibility(View.VISIBLE); 35959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 35979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 35989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Check to see whether this activity is in the process of finishing, 35999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * either because you called {@link #finish} on it or someone else 36009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * has requested that it finished. This is often used in 36019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onPause} to determine whether the activity is simply pausing or 36029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * completely finishing. 36039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 36049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return If the activity is finishing, returns true; else returns false. 36059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 36069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #finish 36079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 36089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isFinishing() { 36099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mFinished; 36109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 36119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 36129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 36133d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton * Check to see whether this activity is in the process of being destroyed in order to be 36143d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton * recreated with a new configuration. This is often used in 36153d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton * {@link #onStop} to determine whether the state needs to be cleaned up or will be passed 36163d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton * on to the next instance of the activity via {@link #onRetainNonConfigurationInstance()}. 36173d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton * 36183d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton * @return If the activity is being torn down in order to be recreated with a new configuration, 36193d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton * returns true; else returns false. 36203d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton */ 36213d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton public boolean isChangingConfigurations() { 36223d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton return mChangingConfigurations; 36233d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton } 36243d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton 36253d32f6e5228e5dfbfe88b24f6df64406628a3e0cJeff Hamilton /** 362630c9bd89556137157b2f686637ece961454ccabeDianne Hackborn * Cause this Activity to be recreated with a new instance. This results 362730c9bd89556137157b2f686637ece961454ccabeDianne Hackborn * in essentially the same flow as when the Activity is created due to 362830c9bd89556137157b2f686637ece961454ccabeDianne Hackborn * a configuration change -- the current instance will go through its 362930c9bd89556137157b2f686637ece961454ccabeDianne Hackborn * lifecycle to {@link #onDestroy} and a new instance then created after it. 363030c9bd89556137157b2f686637ece961454ccabeDianne Hackborn */ 363130c9bd89556137157b2f686637ece961454ccabeDianne Hackborn public void recreate() { 363230c9bd89556137157b2f686637ece961454ccabeDianne Hackborn if (mParent != null) { 363330c9bd89556137157b2f686637ece961454ccabeDianne Hackborn throw new IllegalStateException("Can only be called on top-level activity"); 363430c9bd89556137157b2f686637ece961454ccabeDianne Hackborn } 363530c9bd89556137157b2f686637ece961454ccabeDianne Hackborn if (Looper.myLooper() != mMainThread.getLooper()) { 363630c9bd89556137157b2f686637ece961454ccabeDianne Hackborn throw new IllegalStateException("Must be called from main thread"); 363730c9bd89556137157b2f686637ece961454ccabeDianne Hackborn } 363830c9bd89556137157b2f686637ece961454ccabeDianne Hackborn mMainThread.requestRelaunchActivity(mToken, null, null, 0, false, null, false); 363930c9bd89556137157b2f686637ece961454ccabeDianne Hackborn } 364030c9bd89556137157b2f686637ece961454ccabeDianne Hackborn 364130c9bd89556137157b2f686637ece961454ccabeDianne Hackborn /** 36429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Call this when your activity is done and should be closed. The 36439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ActivityResult is propagated back to whoever launched you via 36449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onActivityResult(). 36459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 36469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void finish() { 36479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 36489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int resultCode; 36499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Intent resultData; 36509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (this) { 36519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resultCode = mResultCode; 36529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resultData = mResultData; 36539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 365443a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato if (false) Log.v(TAG, "Finishing self: token=" + mToken); 36559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 36569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ActivityManagerNative.getDefault() 36579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .finishActivity(mToken, resultCode, resultData)) { 36589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFinished = true; 36599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 36609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 36619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 36629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 36639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 36649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent.finishFromChild(this); 36659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 36669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 36679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 36689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 36699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is called when a child activity of this one calls its 36709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #finish} method. The default implementation simply calls 36719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * finish() on this activity (the parent), finishing the entire group. 36729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 36739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param child The activity making the call. 36749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 36759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #finish 36769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 36779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void finishFromChild(Activity child) { 36789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project finish(); 36799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 36809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 36819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 36829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Force finish another activity that you had previously started with 36839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #startActivityForResult}. 36849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 36859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param requestCode The request code of the activity that you had 36869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * given to startActivityForResult(). If there are multiple 36879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activities started with this request code, they 36889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will all be finished. 36899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 36909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void finishActivity(int requestCode) { 36919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 36929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 36939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ActivityManagerNative.getDefault() 36949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .finishSubActivity(mToken, mEmbeddedID, requestCode); 36959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 36969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 36979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 36989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 36999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent.finishActivityFromChild(this, requestCode); 37009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 37019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 37029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 37039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 37049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is called when a child activity of this one calls its 37059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * finishActivity(). 37069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 37079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param child The activity making the call. 37089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param requestCode Request code that had been used to start the 37099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity. 37109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 37119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void finishActivityFromChild(Activity child, int requestCode) { 37129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 37139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ActivityManagerNative.getDefault() 37149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .finishSubActivity(mToken, child.mEmbeddedID, requestCode); 37159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 37169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 37179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 37189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 37199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 37209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 37219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when an activity you launched exits, giving you the requestCode 37229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you started it with, the resultCode it returned, and any additional 37239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * data from it. The <var>resultCode</var> will be 37249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #RESULT_CANCELED} if the activity explicitly returned that, 37259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * didn't return any result, or crashed during its operation. 37269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 37279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>You will receive this call immediately before onResume() when your 37289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity is re-starting. 37299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 37309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param requestCode The integer request code originally supplied to 37319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * startActivityForResult(), allowing you to identify who this 37329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * result came from. 37339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param resultCode The integer result code returned by the child activity 37349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * through its setResult(). 37359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param data An Intent, which can return result data to the caller 37369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (various data can be attached to Intent "extras"). 37379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 37389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startActivityForResult 37399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #createPendingResult 37409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setResult(int) 37419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 37426e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn protected void onActivityResult(int requestCode, int resultCode, Intent data) { 37439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 37449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 37459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 37469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new PendingIntent object which you can hand to others 37479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for them to use to send result data back to your 37489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onActivityResult} callback. The created object will be either 37499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * one-shot (becoming invalid after a result is sent back) or multiple 37509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (allowing any number of results to be sent through it). 37519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 37529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param requestCode Private request code for the sender that will be 37539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associated with the result data when it is returned. The sender can not 37549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * modify this value, allowing you to identify incoming results. 37559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param data Default data to supply in the result, which may be modified 37569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * by the sender. 37579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param flags May be {@link PendingIntent#FLAG_ONE_SHOT PendingIntent.FLAG_ONE_SHOT}, 37589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PendingIntent#FLAG_NO_CREATE PendingIntent.FLAG_NO_CREATE}, 37599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PendingIntent#FLAG_CANCEL_CURRENT PendingIntent.FLAG_CANCEL_CURRENT}, 37609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PendingIntent#FLAG_UPDATE_CURRENT PendingIntent.FLAG_UPDATE_CURRENT}, 37619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or any of the flags as supported by 37629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Intent#fillIn Intent.fillIn()} to control which unspecified parts 37639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of the intent that can be supplied when the actual send happens. 37649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 37659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns an existing or new PendingIntent matching the given 37669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * parameters. May return null only if 37679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PendingIntent#FLAG_NO_CREATE PendingIntent.FLAG_NO_CREATE} has been 37689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * supplied. 37699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 37709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see PendingIntent 37719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 37729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PendingIntent createPendingResult(int requestCode, Intent data, 37739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int flags) { 37749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String packageName = getPackageName(); 37759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 37769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IIntentSender target = 37779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ActivityManagerNative.getDefault().getIntentSender( 37789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IActivityManager.INTENT_SENDER_ACTIVITY_RESULT, packageName, 37799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent == null ? mToken : mParent.mToken, 3780621e17de87f18003aba2dedb719a2941020a7902Dianne Hackborn mEmbeddedID, requestCode, new Intent[] { data }, null, flags); 37819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return target != null ? new PendingIntent(target) : null; 37829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 37839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 37849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 37859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 37869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 37879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 37889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 37899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Change the desired orientation of this activity. If the activity 37909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is currently in the foreground or otherwise impacting the screen 37919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * orientation, the screen will immediately be changed (possibly causing 37929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the activity to be restarted). Otherwise, this will be used the next 37939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * time the activity is visible. 37949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 37959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param requestedOrientation An orientation constant as used in 37969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link ActivityInfo#screenOrientation ActivityInfo.screenOrientation}. 37979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 37989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setRequestedOrientation(int requestedOrientation) { 37999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 38009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 38019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ActivityManagerNative.getDefault().setRequestedOrientation( 38029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mToken, requestedOrientation); 38039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 38049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 38059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 38079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent.setRequestedOrientation(requestedOrientation); 38089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 38119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 38129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the current requested orientation of the activity. This will 38139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * either be the orientation requested in its component's manifest, or 38149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the last requested orientation given to 38159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setRequestedOrientation(int)}. 38169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 38179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns an orientation constant as used in 38189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link ActivityInfo#screenOrientation ActivityInfo.screenOrientation}. 38199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 38209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getRequestedOrientation() { 38219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 38229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 38239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault() 38249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .getRequestedOrientation(mToken); 38259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 38269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 38279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 38299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParent.getRequestedOrientation(); 38309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; 38329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 38349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 38359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the identifier of the task this activity is in. This identifier 38369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will remain the same for the lifetime of the activity. 38379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 38389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Task identifier, an opaque integer. 38399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 38409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getTaskId() { 38419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 38429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault() 38439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .getTaskForActivity(mToken, false); 38449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 38459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return -1; 38469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 38499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 38509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return whether this activity is the root of a task. The root is the 38519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * first activity in a task. 38529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 38539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return True if this is the root activity, else false. 38549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 38559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isTaskRoot() { 38569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 38579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault() 38589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .getTaskForActivity(mToken, true) >= 0; 38599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 38609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 38619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 38649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 38659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Move the task containing this activity to the back of the activity 38669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * stack. The activity's order within the task is unchanged. 38679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 38689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param nonRoot If false then this only works if the activity is the root 38699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of a task; if true it will work for any activity in 38709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a task. 38719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 38729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return If the task was moved (or it was already at the 38739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * back) true is returned, else false. 38749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 38759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean moveTaskToBack(boolean nonRoot) { 38769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 38779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault().moveActivityTaskToBack( 38789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mToken, nonRoot); 38799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 38809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 38819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 38839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 38859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 38869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns class name for this activity with the package prefix removed. 38879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is the default name used to read and write settings. 38889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 38899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The local class name. 38909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 38919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getLocalClassName() { 38929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final String pkg = getPackageName(); 38939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final String cls = mComponent.getClassName(); 38949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int packageLen = pkg.length(); 38959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!cls.startsWith(pkg) || cls.length() <= packageLen 38969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || cls.charAt(packageLen) != '.') { 38979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return cls; 38989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return cls.substring(packageLen+1); 39009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 39039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns complete component name of this activity. 39049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 39059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the complete component name for this activity 39069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 39079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ComponentName getComponentName() 39089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 39099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mComponent; 39109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 39139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve a {@link SharedPreferences} object for accessing preferences 39149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that are private to this activity. This simply calls the underlying 39159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getSharedPreferences(String, int)} method by passing in this activity's 39169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * class name as the preferences name. 39179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 39189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param mode Operating mode. Use {@link #MODE_PRIVATE} for the default 39199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * operation, {@link #MODE_WORLD_READABLE} and 39209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #MODE_WORLD_WRITEABLE} to control permissions. 39219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 39229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the single SharedPreferences instance that can be used 39239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to retrieve and modify the preference values. 39249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 39259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public SharedPreferences getPreferences(int mode) { 39269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getSharedPreferences(getLocalClassName(), mode); 39279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3929b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn private void ensureSearchManager() { 3930b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn if (mSearchManager != null) { 3931b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn return; 3932b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn } 3933b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn 3934e9ce3f01d42769f03f10e70c3244500e92d7eee1Amith Yamasani mSearchManager = new SearchManager(this, null); 3935b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn } 3936b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn 39379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 39389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Object getSystemService(String name) { 39399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (getBaseContext() == null) { 39409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalStateException( 39419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "System services not available to Activities before onCreate()"); 39429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (WINDOW_SERVICE.equals(name)) { 39459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mWindowManager; 39468d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert } else if (SEARCH_SERVICE.equals(name)) { 3947b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn ensureSearchManager(); 39488d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert return mSearchManager; 39499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return super.getSystemService(name); 39519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 39549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Change the title associated with this activity. If this is a 39559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * top-level activity, the title for its window will change. If it 39569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is an embedded activity, the parent can do whatever it wants 39579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with it. 39589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 39599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setTitle(CharSequence title) { 39609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTitle = title; 39619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onTitleChanged(title, mTitleColor); 39629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent != null) { 39649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent.onChildTitleChanged(this, title); 39659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 39699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Change the title associated with this activity. If this is a 39709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * top-level activity, the title for its window will change. If it 39719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is an embedded activity, the parent can do whatever it wants 39729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with it. 39739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 39749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setTitle(int titleId) { 39759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setTitle(getText(titleId)); 39769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setTitleColor(int textColor) { 39799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTitleColor = textColor; 39809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onTitleChanged(mTitle, textColor); 39819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final CharSequence getTitle() { 39849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mTitle; 39859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getTitleColor() { 39889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mTitleColor; 39899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onTitleChanged(CharSequence title, int color) { 39929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mTitleReady) { 39939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Window win = getWindow(); 39949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (win != null) { 39959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project win.setTitle(title); 39969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (color != 0) { 39979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project win.setTitleColor(color); 39989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 40009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 40019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 40029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 40039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onChildTitleChanged(Activity childActivity, CharSequence title) { 40049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 40059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 40069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 40079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the visibility of the progress bar in the title. 40089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 40099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In order for the progress bar to be shown, the feature must be requested 40109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * via {@link #requestWindowFeature(int)}. 40119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 40129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param visible Whether to show the progress bars in the title. 40139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 40149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setProgressBarVisibility(boolean visible) { 40159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureInt(Window.FEATURE_PROGRESS, visible ? Window.PROGRESS_VISIBILITY_ON : 40169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Window.PROGRESS_VISIBILITY_OFF); 40179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 40189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 40199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 40209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the visibility of the indeterminate progress bar in the title. 40219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 40229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In order for the progress bar to be shown, the feature must be requested 40239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * via {@link #requestWindowFeature(int)}. 40249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 40259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param visible Whether to show the progress bars in the title. 40269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 40279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setProgressBarIndeterminateVisibility(boolean visible) { 40289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureInt(Window.FEATURE_INDETERMINATE_PROGRESS, 40299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project visible ? Window.PROGRESS_VISIBILITY_ON : Window.PROGRESS_VISIBILITY_OFF); 40309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 40319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 40329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 40339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets whether the horizontal progress bar in the title should be indeterminate (the circular 40349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is always indeterminate). 40359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 40369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In order for the progress bar to be shown, the feature must be requested 40379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * via {@link #requestWindowFeature(int)}. 40389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 40399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param indeterminate Whether the horizontal progress bar should be indeterminate. 40409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 40419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setProgressBarIndeterminate(boolean indeterminate) { 40429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureInt(Window.FEATURE_PROGRESS, 40439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project indeterminate ? Window.PROGRESS_INDETERMINATE_ON : Window.PROGRESS_INDETERMINATE_OFF); 40449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 40459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 40469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 40479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the progress for the progress bars in the title. 40489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 40499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In order for the progress bar to be shown, the feature must be requested 40509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * via {@link #requestWindowFeature(int)}. 40519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 40529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param progress The progress for the progress bar. Valid ranges are from 40539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 0 to 10000 (both inclusive). If 10000 is given, the progress 40549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * bar will be completely filled and will fade out. 40559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 40569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setProgress(int progress) { 40579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureInt(Window.FEATURE_PROGRESS, progress + Window.PROGRESS_START); 40589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 40599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 40609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 40619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the secondary progress for the progress bar in the title. This 40629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * progress is drawn between the primary progress (set via 40639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setProgress(int)} and the background. It can be ideal for media 40649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * scenarios such as showing the buffering progress while the default 40659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * progress shows the play progress. 40669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 40679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In order for the progress bar to be shown, the feature must be requested 40689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * via {@link #requestWindowFeature(int)}. 40699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 40709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param secondaryProgress The secondary progress for the progress bar. Valid ranges are from 40719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 0 to 10000 (both inclusive). 40729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 40739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setSecondaryProgress(int secondaryProgress) { 40749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureInt(Window.FEATURE_PROGRESS, 40759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project secondaryProgress + Window.PROGRESS_SECONDARY_START); 40769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 40779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 40789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 40799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Suggests an audio stream whose volume should be changed by the hardware 40809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * volume controls. 40819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 40829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The suggested audio stream will be tied to the window of this Activity. 40839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If the Activity is switched, the stream set here is no longer the 40849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * suggested stream. The client does not need to save and restore the old 40859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * suggested stream value in onPause and onResume. 40869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 40879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param streamType The type of the audio stream whose volume should be 40889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * changed by the hardware volume controls. It is not guaranteed that 40899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the hardware volume controls will always change this stream's 40909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * volume (for example, if a call is in progress, its stream's volume 40919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * may be changed instead). To reset back to the default, use 40929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link AudioManager#USE_DEFAULT_STREAM_TYPE}. 40939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 40949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setVolumeControlStream(int streamType) { 40959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setVolumeControlStream(streamType); 40969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 40979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 40989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 40999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the suggested audio stream whose volume should be changed by the 41009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * harwdare volume controls. 41019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 41029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The suggested audio stream type whose volume should be changed by 41039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the hardware volume controls. 41049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setVolumeControlStream(int) 41059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 41069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getVolumeControlStream() { 41079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getWindow().getVolumeControlStream(); 41089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 41099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 41109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 41119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Runs the specified action on the UI thread. If the current thread is the UI 41129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thread, then the action is executed immediately. If the current thread is 41139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not the UI thread, the action is posted to the event queue of the UI thread. 41149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 41159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param action the action to run on the UI thread 41169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 41179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void runOnUiThread(Runnable action) { 41189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (Thread.currentThread() != mUiThread) { 41199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHandler.post(action); 41209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 41219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project action.run(); 41229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 41239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 41249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 41259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4126ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn * Standard implementation of 4127ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn * {@link android.view.LayoutInflater.Factory#onCreateView} used when 4128ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn * inflating with the LayoutInflater returned by {@link #getSystemService}. 4129625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * This implementation does nothing and is for 4130625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * pre-{@link android.os.Build.VERSION_CODES#HONEYCOMB} apps. Newer apps 4131625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * should use {@link #onCreateView(View, String, Context, AttributeSet)}. 4132625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * 4133625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * @see android.view.LayoutInflater#createView 4134625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * @see android.view.Window#getLayoutInflater 4135625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn */ 4136625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn public View onCreateView(String name, Context context, AttributeSet attrs) { 4137625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn return null; 4138625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn } 4139625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn 4140625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn /** 4141625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * Standard implementation of 4142625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * {@link android.view.LayoutInflater.Factory2#onCreateView(View, String, Context, AttributeSet)} 4143625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * used when inflating with the LayoutInflater returned by {@link #getSystemService}. 4144ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn * This implementation handles <fragment> tags to embed fragments inside 4145ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn * of the activity. 41469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 41479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.LayoutInflater#createView 41489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.Window#getLayoutInflater 41499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4150625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn public View onCreateView(View parent, String name, Context context, AttributeSet attrs) { 4151ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn if (!"fragment".equals(name)) { 4152625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn return onCreateView(name, context, attrs); 4153ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 4154ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn 4155def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn String fname = attrs.getAttributeValue(null, "class"); 4156ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn TypedArray a = 4157ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.Fragment); 4158def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn if (fname == null) { 4159def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn fname = a.getString(com.android.internal.R.styleable.Fragment_name); 4160def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn } 4161625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn int id = a.getResourceId(com.android.internal.R.styleable.Fragment_id, View.NO_ID); 4162ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn String tag = a.getString(com.android.internal.R.styleable.Fragment_tag); 4163ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn a.recycle(); 4164ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn 4165625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn int containerId = parent != null ? parent.getId() : 0; 4166625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn if (containerId == View.NO_ID && id == View.NO_ID && tag == null) { 4167b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn throw new IllegalArgumentException(attrs.getPositionDescription() 4168625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn + ": Must specify unique android:id, android:tag, or have a parent with an id for " + fname); 4169b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 4170625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn 4171b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn // If we restored from a previous state, we may already have 4172b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn // instantiated this fragment from the state and should use 4173b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn // that instance instead of making a new one. 4174625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn Fragment fragment = id != View.NO_ID ? mFragments.findFragmentById(id) : null; 4175625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn if (fragment == null && tag != null) { 4176625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn fragment = mFragments.findFragmentByTag(tag); 4177625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn } 4178625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn if (fragment == null && containerId != View.NO_ID) { 4179625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn fragment = mFragments.findFragmentById(containerId); 4180625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn } 4181625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn 4182b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn if (FragmentManagerImpl.DEBUG) Log.v(TAG, "onCreateView: id=0x" 4183b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn + Integer.toHexString(id) + " fname=" + fname 4184b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn + " existing=" + fragment); 4185b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn if (fragment == null) { 4186b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn fragment = Fragment.instantiate(this, fname); 4187b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn fragment.mFromLayout = true; 4188625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn fragment.mFragmentId = id != 0 ? id : containerId; 4189625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn fragment.mContainerId = containerId; 4190b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn fragment.mTag = tag; 4191625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn fragment.mInLayout = true; 4192b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn fragment.mImmediateActivity = this; 41933e449ce00ed2d3b271e50bc7a52798f630973bf1Dianne Hackborn fragment.mFragmentManager = mFragments; 4194e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn fragment.onInflate(this, attrs, fragment.mSavedFragmentState); 4195625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn mFragments.addFragment(fragment, true); 4196625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn 4197625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn } else if (fragment.mInLayout) { 4198625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn // A fragment already exists and it is not one we restored from 4199625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn // previous state. 4200625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn throw new IllegalArgumentException(attrs.getPositionDescription() 4201625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn + ": Duplicate id 0x" + Integer.toHexString(id) 4202625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn + ", tag " + tag + ", or parent id 0x" + Integer.toHexString(containerId) 4203625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn + " with another fragment for " + fname); 4204625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn } else { 4205625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn // This fragment was retained from a previous instance; get it 4206625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn // going now. 4207625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn fragment.mInLayout = true; 4208625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn fragment.mImmediateActivity = this; 4209def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn // If this fragment is newly instantiated (either right now, or 4210def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn // from last saved state), then give it the attributes to 4211def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn // initialize itself. 4212def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn if (!fragment.mRetaining) { 4213e3a7f628c6d9fef42be24999b3137ebe5c6f3525Dianne Hackborn fragment.onInflate(this, attrs, fragment.mSavedFragmentState); 4214def1537e9e8d0dd190cde5310ddae8b921088c9bDianne Hackborn } 4215625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn mFragments.moveToState(fragment); 4216b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn } 4217625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn 4218b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn if (fragment.mView == null) { 4219b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn throw new IllegalStateException("Fragment " + fname 4220b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn + " did not create a view."); 4221b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn } 4222625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn if (id != 0) { 4223625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn fragment.mView.setId(id); 4224625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn } 4225b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn if (fragment.mView.getTag() == null) { 4226b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn fragment.mView.setTag(tag); 4227b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn } 4228b7a2e4772220c4b41df1260cedaf8912f4b07547Dianne Hackborn return fragment.mView; 42299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 42309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 423169a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler /** 4232625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * Print the Activity's state into the given stream. This gets invoked if 423330d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn * you run "adb shell dumpsys activity <activity_component_name>". 4234625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * 423530d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn * @param prefix Desired prefix to prepend at each line of output. 4236625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * @param fd The raw file descriptor that the dump is being sent to. 4237625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * @param writer The PrintWriter to which you should dump your state. This will be 4238625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * closed for you after you return. 4239625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn * @param args additional arguments to the dump request. 4240625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn */ 424130d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { 424230d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.print(prefix); writer.print("Local Activity "); 424330d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.print(Integer.toHexString(System.identityHashCode(this))); 424430d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.println(" State:"); 424530d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn String innerPrefix = prefix + " "; 424630d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.print(innerPrefix); writer.print("mResumed="); 424730d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.print(mResumed); writer.print(" mStopped="); 424830d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.print(mStopped); writer.print(" mFinished="); 424930d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.println(mFinished); 425030d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.print(innerPrefix); writer.print("mLoadersStarted="); 425130d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.println(mLoadersStarted); 425230d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.print(innerPrefix); writer.print("mChangingConfigurations="); 425330d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.println(mChangingConfigurations); 425430d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.print(innerPrefix); writer.print("mCurrentConfig="); 425530d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.println(mCurrentConfig); 425630d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn if (mLoaderManager != null) { 425730d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.print(prefix); writer.print("Loader Manager "); 425830d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.print(Integer.toHexString(System.identityHashCode(mLoaderManager))); 425930d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn writer.println(":"); 426030d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn mLoaderManager.dump(prefix + " ", fd, writer, args); 426130d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn } 426230d7189067524000c738c188c4ff91f84f474d25Dianne Hackborn mFragments.dump(prefix, fd, writer, args); 4263625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn } 4264625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn 4265625ac271f80777668f832a344486a6fcdc06d0aeDianne Hackborn /** 426669a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * Bit indicating that this activity is "immersive" and should not be 426769a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * interrupted by notifications if possible. 426869a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * 426969a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * This value is initially set by the manifest property 427069a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * <code>android:immersive</code> but may be changed at runtime by 427169a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * {@link #setImmersive}. 427269a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * 427369a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * @see android.content.pm.ActivityInfo#FLAG_IMMERSIVE 427402486b1327e3007c62d253dd89ba9db1852b87f8Dianne Hackborn * @hide 427569a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler */ 427669a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler public boolean isImmersive() { 427769a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler try { 427869a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler return ActivityManagerNative.getDefault().isImmersive(mToken); 427969a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler } catch (RemoteException e) { 428069a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler return false; 428169a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler } 428269a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler } 428369a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler 428469a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler /** 428569a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * Adjust the current immersive mode setting. 428669a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * 428769a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * Note that changing this value will have no effect on the activity's 428869a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * {@link android.content.pm.ActivityInfo} structure; that is, if 428969a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * <code>android:immersive</code> is set to <code>true</code> 429069a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * in the application's manifest entry for this activity, the {@link 429169a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * android.content.pm.ActivityInfo#flags ActivityInfo.flags} member will 429269a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * always have its {@link android.content.pm.ActivityInfo#FLAG_IMMERSIVE 429369a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * FLAG_IMMERSIVE} bit set. 429469a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * 429569a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * @see #isImmersive 429669a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * @see android.content.pm.ActivityInfo#FLAG_IMMERSIVE 429702486b1327e3007c62d253dd89ba9db1852b87f8Dianne Hackborn * @hide 429869a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler */ 429969a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler public void setImmersive(boolean i) { 430069a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler try { 430169a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler ActivityManagerNative.getDefault().setImmersive(mToken, i); 430269a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler } catch (RemoteException e) { 430369a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler // pass 430469a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler } 430569a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler } 430669a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler 43076e34636749217654f43221885afb7a29bb5ca96aAdam Powell /** 4308debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * Start an action mode. 43096e34636749217654f43221885afb7a29bb5ca96aAdam Powell * 43106e34636749217654f43221885afb7a29bb5ca96aAdam Powell * @param callback Callback that will manage lifecycle events for this context mode 43116e34636749217654f43221885afb7a29bb5ca96aAdam Powell * @return The ContextMode that was started, or null if it was canceled 43126e34636749217654f43221885afb7a29bb5ca96aAdam Powell * 43136e34636749217654f43221885afb7a29bb5ca96aAdam Powell * @see ActionMode 43146e34636749217654f43221885afb7a29bb5ca96aAdam Powell */ 43155d27977f9da482627ceb19317a2cd70467aff046Adam Powell public ActionMode startActionMode(ActionMode.Callback callback) { 43166e34636749217654f43221885afb7a29bb5ca96aAdam Powell return mWindow.getDecorView().startActionMode(callback); 43176e34636749217654f43221885afb7a29bb5ca96aAdam Powell } 43186e34636749217654f43221885afb7a29bb5ca96aAdam Powell 4319debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell /** 4320debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * Give the Activity a chance to control the UI for an action mode requested 4321debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * by the system. 4322debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * 4323debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * <p>Note: If you are looking for a notification callback that an action mode 4324debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * has been started for this activity, see {@link #onActionModeStarted(ActionMode)}.</p> 4325debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * 4326debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * @param callback The callback that should control the new action mode 4327debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * @return The new action mode, or <code>null</code> if the activity does not want to 4328debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * provide special handling for this action mode. (It will be handled by the system.) 4329debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell */ 4330debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell public ActionMode onWindowStartingActionMode(ActionMode.Callback callback) { 433142c0fe86521af507f597af6159f63879cb5be73eAdam Powell initActionBar(); 43326e34636749217654f43221885afb7a29bb5ca96aAdam Powell if (mActionBar != null) { 43335d27977f9da482627ceb19317a2cd70467aff046Adam Powell return mActionBar.startActionMode(callback); 43346e34636749217654f43221885afb7a29bb5ca96aAdam Powell } 43356e34636749217654f43221885afb7a29bb5ca96aAdam Powell return null; 43366e34636749217654f43221885afb7a29bb5ca96aAdam Powell } 43376e34636749217654f43221885afb7a29bb5ca96aAdam Powell 4338debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell /** 4339debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * Notifies the Activity that an action mode has been started. 4340debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * Activity subclasses overriding this method should call the superclass implementation. 4341debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * 4342debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * @param mode The new action mode. 4343debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell */ 4344debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell public void onActionModeStarted(ActionMode mode) { 4345debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell } 4346debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell 4347debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell /** 4348debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * Notifies the activity that an action mode has finished. 4349debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * Activity subclasses overriding this method should call the superclass implementation. 4350debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * 4351debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell * @param mode The action mode that just finished. 4352debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell */ 4353debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell public void onActionModeFinished(ActionMode mode) { 4354debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell } 4355debf3bed9ea913ac55c80e1f9f7f33217054a943Adam Powell 43569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // ------------------ Internal API ------------------ 43579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 43589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void setParent(Activity parent) { 43599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent = parent; 43609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 43619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 43629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void attach(Context context, ActivityThread aThread, Instrumentation instr, IBinder token, 43639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Application application, Intent intent, ActivityInfo info, CharSequence title, 4364b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Activity parent, String id, NonConfigurationInstances lastNonConfigurationInstances, 43659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Configuration config) { 4366b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn attach(context, aThread, instr, token, 0, application, intent, info, title, parent, id, 4367b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn lastNonConfigurationInstances, config); 43689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 43699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4370b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn final void attach(Context context, ActivityThread aThread, 4371b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn Instrumentation instr, IBinder token, int ident, 4372b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn Application application, Intent intent, ActivityInfo info, 4373b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn CharSequence title, Activity parent, String id, 4374b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn NonConfigurationInstances lastNonConfigurationInstances, 4375b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn Configuration config) { 43769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project attachBaseContext(context); 43779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 43782dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mFragments.attachActivity(this); 43792dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 43809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow = PolicyManager.makeNewWindow(this); 43819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.setCallback(this); 4382420829ef78c5d86e470fc445279c7c10be6b5dbeDianne Hackborn mWindow.getLayoutInflater().setPrivateFactory(this); 43839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (info.softInputMode != WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED) { 43849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.setSoftInputMode(info.softInputMode); 43859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 43869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mUiThread = Thread.currentThread(); 4387529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy 43889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMainThread = aThread; 43899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentation = instr; 43909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mToken = token; 4391b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn mIdent = ident; 43929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mApplication = application; 43939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIntent = intent; 43949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mComponent = intent.getComponent(); 43959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mActivityInfo = info; 43969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTitle = title; 43979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent = parent; 43989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEmbeddedID = id; 4399b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mLastNonConfigurationInstances = lastNonConfigurationInstances; 44009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4401529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy mWindow.setWindowManager(null, mToken, mComponent.flattenToString(), 4402529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy (info.flags & ActivityInfo.FLAG_HARDWARE_ACCELERATED) != 0); 44039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent != null) { 44049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.setContainer(mParent.getWindow()); 44059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindowManager = mWindow.getWindowManager(); 44079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCurrentConfig = config; 44089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 44109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final IBinder getActivityToken() { 44119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParent != null ? mParent.getActivityToken() : mToken; 44129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 44142dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn final void performCreate(Bundle icicle) { 44152dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn onCreate(icicle); 441630c9bd89556137157b2f686637ece961454ccabeDianne Hackborn mVisibleFromClient = !mWindow.getWindowStyle().getBoolean( 441730c9bd89556137157b2f686637ece961454ccabeDianne Hackborn com.android.internal.R.styleable.Window_windowNoDisplay, false); 4418c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn mFragments.dispatchActivityCreated(); 44192dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 44202dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 44219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void performStart() { 4422fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn mFragments.noteStateNotSaved(); 44239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = false; 4424445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn mFragments.execPendingActions(); 44259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentation.callActivityOnStart(this); 44269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mCalled) { 44279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new SuperNotCalledException( 44289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Activity " + mComponent.toShortString() + 44299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " did not call through to super.onStart()"); 44309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44312dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mFragments.dispatchStart(); 44322707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn if (mAllLoaderManagers != null) { 44332707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn for (int i=mAllLoaderManagers.size()-1; i>=0; i--) { 4434afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn LoaderManagerImpl lm = mAllLoaderManagers.valueAt(i); 4435afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn lm.finishRetain(); 4436afc4b283fdaedec9bf32492a019b43cc33edc9b6Dianne Hackborn lm.doReportStart(); 44372707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } 44382707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } 44399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 44419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void performRestart() { 4442fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn mFragments.noteStateNotSaved(); 4443a21e3da55940e239addd80bf379091a1d85d006fDianne Hackborn 44449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mStopped) { 44459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStopped = false; 4446ce418e661ab52a08a2a2c3b2f10a4dd9adf33305Dianne Hackborn if (mToken != null && mParent == null) { 4447ce418e661ab52a08a2a2c3b2f10a4dd9adf33305Dianne Hackborn WindowManagerImpl.getDefault().setStoppedState(mToken, false); 4448ce418e661ab52a08a2a2c3b2f10a4dd9adf33305Dianne Hackborn } 4449185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn 4450185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn synchronized (mManagedCursors) { 4451185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn final int N = mManagedCursors.size(); 4452185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn for (int i=0; i<N; i++) { 4453185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn ManagedCursor mc = mManagedCursors.get(i); 4454185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn if (mc.mReleased || mc.mUpdated) { 4455185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn if (!mc.mCursor.requery()) { 4456185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn throw new IllegalStateException( 4457185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn "trying to requery an already closed cursor " 4458185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn + mc.mCursor); 4459185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn } 4460185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn mc.mReleased = false; 4461185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn mc.mUpdated = false; 4462185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn } 4463185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn } 4464185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn } 4465185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn 4466185e3e243ee1da136bcace854026b8abaf0c4c86Dianne Hackborn mCalled = false; 44679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentation.callActivityOnRestart(this); 44689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mCalled) { 44699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new SuperNotCalledException( 44709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Activity " + mComponent.toShortString() + 44719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " did not call through to super.onRestart()"); 44729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project performStart(); 44749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 44779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void performResume() { 44789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project performRestart(); 44799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4480445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn mFragments.execPendingActions(); 4481445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn 4482b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mLastNonConfigurationInstances = null; 44839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 44849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = false; 448552d3203ef69d4babbc4dd030a15c08c0b8d1d226Jeff Hamilton // mResumed is set by the instrumentation 44869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentation.callActivityOnResume(this); 44879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mCalled) { 44889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new SuperNotCalledException( 44899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Activity " + mComponent.toShortString() + 44909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " did not call through to super.onResume()"); 44919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 44939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Now really resume, and install the current status bar and menu. 44949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = false; 44952dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 44962dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mFragments.dispatchResume(); 4497445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn mFragments.execPendingActions(); 44982dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 44999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onPostResume(); 45009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mCalled) { 45019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new SuperNotCalledException( 45029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Activity " + mComponent.toShortString() + 45039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " did not call through to super.onPostResume()"); 45049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 45059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 45069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 45079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void performPause() { 45082dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mFragments.dispatchPause(); 4509e794e9f9b7599c1ad6b8760e601c81b19ecc80c6Dianne Hackborn mCalled = false; 45109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onPause(); 45114eba96bb314d8ff773ea33d6cb3179f25751ecceDianne Hackborn mResumed = false; 4512e794e9f9b7599c1ad6b8760e601c81b19ecc80c6Dianne Hackborn if (!mCalled && getApplicationInfo().targetSdkVersion 4513e794e9f9b7599c1ad6b8760e601c81b19ecc80c6Dianne Hackborn >= android.os.Build.VERSION_CODES.GINGERBREAD) { 4514e794e9f9b7599c1ad6b8760e601c81b19ecc80c6Dianne Hackborn throw new SuperNotCalledException( 4515e794e9f9b7599c1ad6b8760e601c81b19ecc80c6Dianne Hackborn "Activity " + mComponent.toShortString() + 4516e794e9f9b7599c1ad6b8760e601c81b19ecc80c6Dianne Hackborn " did not call through to super.onPause()"); 4517e794e9f9b7599c1ad6b8760e601c81b19ecc80c6Dianne Hackborn } 451852d3203ef69d4babbc4dd030a15c08c0b8d1d226Jeff Hamilton mResumed = false; 45199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 45209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 45219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void performUserLeaving() { 45229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onUserInteraction(); 45239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onUserLeaveHint(); 45249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 45259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 45269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void performStop() { 4527fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn if (mLoadersStarted) { 4528fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn mLoadersStarted = false; 45292707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn if (mLoaderManager != null) { 45302707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn if (!mChangingConfigurations) { 45312707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn mLoaderManager.doStop(); 45322707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } else { 45332707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn mLoaderManager.doRetain(); 45342707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } 45352707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } 45362707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn } 45372707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn 45389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mStopped) { 45399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mWindow != null) { 45409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.closeAllPanels(); 45419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 45429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4543ce418e661ab52a08a2a2c3b2f10a4dd9adf33305Dianne Hackborn if (mToken != null && mParent == null) { 4544ce418e661ab52a08a2a2c3b2f10a4dd9adf33305Dianne Hackborn WindowManagerImpl.getDefault().setStoppedState(mToken, true); 4545ce418e661ab52a08a2a2c3b2f10a4dd9adf33305Dianne Hackborn } 4546ce418e661ab52a08a2a2c3b2f10a4dd9adf33305Dianne Hackborn 45472dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mFragments.dispatchStop(); 45482dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 45499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = false; 45509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentation.callActivityOnStop(this); 45519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mCalled) { 45529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new SuperNotCalledException( 45539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Activity " + mComponent.toShortString() + 45549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " did not call through to super.onStop()"); 45559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 45569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 45572f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki synchronized (mManagedCursors) { 45582f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki final int N = mManagedCursors.size(); 45592f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki for (int i=0; i<N; i++) { 45602f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki ManagedCursor mc = mManagedCursors.get(i); 45612f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki if (!mc.mReleased) { 45622f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki mc.mCursor.deactivate(); 45632f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki mc.mReleased = true; 45642f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki } 45659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 45669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 45679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 45689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStopped = true; 45699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 45709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mResumed = false; 45719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 45729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 45732dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn final void performDestroy() { 4574291905e34a7f0ae03c68fb2c1b8c34b92d447fbfDianne Hackborn mWindow.destroy(); 45752dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mFragments.dispatchDestroy(); 45762dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn onDestroy(); 45775e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn if (mLoaderManager != null) { 45785e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn mLoaderManager.doDestroy(); 45795e0d59547c4042037e23a42ba4e2521721e9c7d3Dianne Hackborn } 45802dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 45812dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 458252d3203ef69d4babbc4dd030a15c08c0b8d1d226Jeff Hamilton /** 458352d3203ef69d4babbc4dd030a15c08c0b8d1d226Jeff Hamilton * @hide 458452d3203ef69d4babbc4dd030a15c08c0b8d1d226Jeff Hamilton */ 458552d3203ef69d4babbc4dd030a15c08c0b8d1d226Jeff Hamilton public final boolean isResumed() { 45869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mResumed; 45879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 45889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 45899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void dispatchActivityResult(String who, int requestCode, 45909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int resultCode, Intent data) { 459143a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato if (false) Log.v( 45929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TAG, "Dispatching result: who=" + who + ", reqCode=" + requestCode 45939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + ", resCode=" + resultCode + ", data=" + data); 4594fb3cffeb35368da22f99b85d45039c4e6e471c06Dianne Hackborn mFragments.noteStateNotSaved(); 45959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (who == null) { 45969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onActivityResult(requestCode, resultCode, data); 45976e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } else { 45986e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn Fragment frag = mFragments.findFragmentByWho(who); 45996e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (frag != null) { 46006e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn frag.onActivityResult(requestCode, resultCode, data); 46016e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 46029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 46039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 46049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4605