Activity.java revision 0b2a6d0773211449fbde9d2706388714beeffebb
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 1975986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganovimport com.android.internal.policy.PolicyManager; 2075986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ComponentCallbacks; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ComponentName; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentResolver; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Intent; 261ccac75e1f1b97eccb916a8de04fc1012b30f6e5Suchi Amalapurapuimport android.content.IIntentSender; 27fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackbornimport android.content.IntentSender; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.SharedPreferences; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.pm.ActivityInfo; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.Configuration; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.Resources; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.Cursor; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Bitmap; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Canvas; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.drawable.Drawable; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.media.AudioManager; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri; 388d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackbornimport android.os.Build; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Bundle; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Handler; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.IBinder; 4275986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganovimport android.os.RemoteException; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.Selection; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.SpannableStringBuilder; 4575986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganovimport android.text.TextUtils; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.method.TextKeyListener; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Config; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.EventLog; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.SparseArray; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.ContextMenu; 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.ContextThemeWrapper; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.KeyEvent; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.LayoutInflater; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.Menu; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.MenuInflater; 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.MenuItem; 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.MotionEvent; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.ViewGroup; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.ViewManager; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.Window; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.WindowManager; 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.ContextMenu.ContextMenuInfo; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View.OnCreateContextMenuListener; 6775986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganovimport android.view.ViewGroup.LayoutParams; 6875986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganovimport android.view.accessibility.AccessibilityEvent; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.AdapterView; 700b2a6d0773211449fbde9d2706388714beeffebbJim Millerimport android.widget.FrameLayout; 710b2a6d0773211449fbde9d2706388714beeffebbJim Millerimport android.widget.LinearLayout; 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.ArrayList; 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.HashMap; 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * An activity is a single, focused thing that the user can do. Almost all 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activities interact with the user, so the Activity class takes care of 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * creating a window for you in which you can place your UI with 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setContentView}. While activities are often presented to the user 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as full-screen windows, they can also be used in other ways: as floating 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * windows (via a theme with {@link android.R.attr#windowIsFloating} set) 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or embedded inside of another activity (using {@link ActivityGroup}). 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * There are two methods almost all subclasses of Activity will implement: 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul> 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> {@link #onCreate} is where you initialize your activity. Most 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * importantly, here you will usually call {@link #setContentView(int)} 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with a layout resource defining your UI, and using {@link #findViewById} 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to retrieve the widgets in that UI that you need to interact with 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * programmatically. 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> {@link #onPause} is where you deal with the user leaving your 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity. Most importantly, any changes made by the user should at this 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * point be committed (usually to the 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.content.ContentProvider} holding the data). 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul> 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>To be of use with {@link android.content.Context#startActivity Context.startActivity()}, all 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity classes must have a corresponding 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.styleable#AndroidManifestActivity <activity>} 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * declaration in their package's <code>AndroidManifest.xml</code>.</p> 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The Activity class is an important part of an application's overall lifecycle, 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and the way activities are launched and put together is a fundamental 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * part of the platform's application model. For a detailed perspective on the structure of 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Android applications and lifecycles, please read the <em>Dev Guide</em> document on 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <a href="{@docRoot}guide/topics/fundamentals.html">Application Fundamentals</a>.</p> 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Topics covered here: 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ol> 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><a href="#ActivityLifecycle">Activity Lifecycle</a> 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><a href="#ConfigurationChanges">Configuration Changes</a> 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><a href="#StartingActivities">Starting Activities and Getting Results</a> 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><a href="#SavingPersistentState">Saving Persistent State</a> 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><a href="#Permissions">Permissions</a> 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li><a href="#ProcessLifecycle">Process Lifecycle</a> 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ol> 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <a name="ActivityLifecycle"></a> 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <h3>Activity Lifecycle</h3> 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Activities in the system are managed as an <em>activity stack</em>. 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When a new activity is started, it is placed on the top of the stack 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and becomes the running activity -- the previous activity always remains 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * below it in the stack, and will not come to the foreground again until 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the new activity exits.</p> 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>An activity has essentially four states:</p> 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul> 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> If an activity in the foreground of the screen (at the top of 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the stack), 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it is <em>active</em> or <em>running</em>. </li> 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>If an activity has lost focus but is still visible (that is, a new non-full-sized 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or transparent activity has focus on top of your activity), it 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is <em>paused</em>. A paused activity is completely alive (it 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * maintains all state and member information and remains attached to 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the window manager), but can be killed by the system in extreme 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * low memory situations. 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>If an activity is completely obscured by another activity, 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it is <em>stopped</em>. It still retains all state and member information, 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * however, it is no longer visible to the user so its window is hidden 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and it will often be killed by the system when memory is needed 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * elsewhere.</li> 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>If an activity is paused or stopped, the system can drop the activity 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from memory by either asking it to finish, or simply killing its 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * process. When it is displayed again to the user, it must be 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * completely restarted and restored to its previous state.</li> 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul> 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The following diagram shows the important state paths of an Activity. 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The square rectangles represent callback methods you can implement to 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * perform operations when the Activity moves between states. The colored 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ovals are major states the Activity can be in.</p> 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><img src="../../../images/activity_lifecycle.png" 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * alt="State diagram for an Android Activity Lifecycle." border="0" /></p> 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>There are three key loops you may be interested in monitoring within your 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity: 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul> 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>The <b>entire lifetime</b> of an activity happens between the first call 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to {@link android.app.Activity#onCreate} through to a single final call 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to {@link android.app.Activity#onDestroy}. An activity will do all setup 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of "global" state in onCreate(), and release all remaining resources in 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onDestroy(). For example, if it has a thread running in the background 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to download data from the network, it may create that thread in onCreate() 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and then stop the thread in onDestroy(). 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>The <b>visible lifetime</b> of an activity happens between a call to 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.app.Activity#onStart} until a corresponding call to 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.app.Activity#onStop}. During this time the user can see the 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity on-screen, though it may not be in the foreground and interacting 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with the user. Between these two methods you can maintain resources that 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are needed to show the activity to the user. For example, you can register 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a {@link android.content.BroadcastReceiver} in onStart() to monitor for changes 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that impact your UI, and unregister it in onStop() when the user an no 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * longer see what you are displaying. The onStart() and onStop() methods 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can be called multiple times, as the activity becomes visible and hidden 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the user. 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li>The <b>foreground lifetime</b> of an activity happens between a call to 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.app.Activity#onResume} until a corresponding call to 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.app.Activity#onPause}. During this time the activity is 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in front of all other activities and interacting with the user. An activity 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can frequently go between the resumed and paused states -- for example when 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the device goes to sleep, when an activity result is delivered, when a new 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * intent is delivered -- so the code in these methods should be fairly 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * lightweight. 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul> 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The entire lifecycle of an activity is defined by the following 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Activity methods. All of these are hooks that you can override 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to do appropriate work when the activity changes state. All 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activities will implement {@link android.app.Activity#onCreate} 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to do their initial setup; many will also implement 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.app.Activity#onPause} to commit changes to data and 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * otherwise prepare to stop interacting with the user. You should always 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * call up to your superclass when implementing these methods.</p> 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p> 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <pre class="prettyprint"> 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * public class Activity extends ApplicationContext { 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onCreate(Bundle savedInstanceState); 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onStart(); 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onRestart(); 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onResume(); 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onPause(); 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onStop(); 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onDestroy(); 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </pre> 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>In general the movement through an activity's lifecycle looks like 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this:</p> 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <table border="2" width="85%" align="center" frame="hsides" rules="rows"> 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <colgroup align="left" span="3" /> 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <colgroup align="left" /> 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <colgroup align="center" /> 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <colgroup align="center" /> 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <thead> 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><th colspan="3">Method</th> <th>Description</th> <th>Killable?</th> <th>Next</th></tr> 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </thead> 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tbody> 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><th colspan="3" align="left" border="0">{@link android.app.Activity#onCreate onCreate()}</th> 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>Called when the activity is first created. 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is where you should do all of your normal static set up: 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * create views, bind data to lists, etc. This method also 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * provides you with a Bundle containing the activity's previously 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * frozen state, if there was one. 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Always followed by <code>onStart()</code>.</td> 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center">No</td> 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><code>onStart()</code></td> 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td rowspan="5" style="border-left: none; border-right: none;"> </td> 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <th colspan="2" align="left" border="0">{@link android.app.Activity#onRestart onRestart()}</th> 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>Called after your activity has been stopped, prior to it being 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * started again. 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Always followed by <code>onStart()</code></td> 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center">No</td> 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><code>onStart()</code></td> 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><th colspan="2" align="left" border="0">{@link android.app.Activity#onStart onStart()}</th> 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>Called when the activity is becoming visible to the user. 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Followed by <code>onResume()</code> if the activity comes 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the foreground, or <code>onStop()</code> if it becomes hidden.</td> 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center">No</td> 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><code>onResume()</code> or <code>onStop()</code></td> 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><td rowspan="2" style="border-left: none;"> </td> 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <th align="left" border="0">{@link android.app.Activity#onResume onResume()}</th> 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>Called when the activity will start 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * interacting with the user. At this point your activity is at 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the top of the activity stack, with user input going to it. 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Always followed by <code>onPause()</code>.</td> 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center">No</td> 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><code>onPause()</code></td> 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><th align="left" border="0">{@link android.app.Activity#onPause onPause()}</th> 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>Called when the system is about to start resuming a previous 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity. This is typically used to commit unsaved changes to 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * persistent data, stop animations and other things that may be consuming 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * CPU, etc. Implementations of this method must be very quick because 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the next activity will not be resumed until this method returns. 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Followed by either <code>onResume()</code> if the activity 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returns back to the front, or <code>onStop()</code> if it becomes 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * invisible to the user.</td> 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><font color="#800000"><strong>Yes</strong></font></td> 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><code>onResume()</code> or<br> 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>onStop()</code></td> 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><th colspan="2" align="left" border="0">{@link android.app.Activity#onStop onStop()}</th> 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>Called when the activity is no longer visible to the user, because 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * another activity has been resumed and is covering this one. This 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * may happen either because a new activity is being started, an existing 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * one is being brought in front of this one, or this one is being 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * destroyed. 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Followed by either <code>onRestart()</code> if 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this activity is coming back to interact with the user, or 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>onDestroy()</code> if this activity is going away.</td> 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><font color="#800000"><strong>Yes</strong></font></td> 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><code>onRestart()</code> or<br> 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>onDestroy()</code></td> 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <tr><th colspan="3" align="left" border="0">{@link android.app.Activity#onDestroy onDestroy()}</th> 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td>The final call you receive before your 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity is destroyed. This can happen either because the 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity is finishing (someone called {@link Activity#finish} on 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it, or because the system is temporarily destroying this 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * instance of the activity to save space. You can distinguish 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * between these two scenarios with the {@link 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Activity#isFinishing} method.</td> 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><font color="#800000"><strong>Yes</strong></font></td> 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <td align="center"><em>nothing</em></td> 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tr> 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </tbody> 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </table> 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note the "Killable" column in the above table -- for those methods that 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are marked as being killable, after that method returns the process hosting the 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity may killed by the system <em>at any time</em> without another line 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of its code being executed. Because of this, you should use the 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onPause} method to write any persistent data (such as user edits) 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to storage. In addition, the method 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onSaveInstanceState(Bundle)} is called before placing the activity 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in such a background state, allowing you to save away any dynamic instance 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * state in your activity into the given Bundle, to be later received in 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onCreate} if the activity needs to be re-created. 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the <a href="#ProcessLifecycle">Process Lifecycle</a> 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * section for more information on how the lifecycle of a process is tied 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the activities it is hosting. Note that it is important to save 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * persistent data in {@link #onPause} instead of {@link #onSaveInstanceState} 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * because the later is not part of the lifecycle callbacks, so will not 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be called in every situation as described in its documentation.</p> 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>For those methods that are not marked as being killable, the activity's 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * process will not be killed by the system starting from the time the method 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is called and continuing after it returns. Thus an activity is in the killable 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * state, for example, between after <code>onPause()</code> to the start of 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>onResume()</code>.</p> 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <a name="ConfigurationChanges"></a> 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <h3>Configuration Changes</h3> 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>If the configuration of the device (as defined by the 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Configuration Resources.Configuration} class) changes, 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * then anything displaying a user interface will need to update to match that 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * configuration. Because Activity is the primary mechanism for interacting 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with the user, it includes special support for handling configuration 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * changes.</p> 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Unless you specify otherwise, a configuration change (such as a change 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in screen orientation, language, input devices, etc) will cause your 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current activity to be <em>destroyed</em>, going through the normal activity 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * lifecycle process of {@link #onPause}, 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onStop}, and {@link #onDestroy} as appropriate. If the activity 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * had been in the foreground or visible to the user, once {@link #onDestroy} is 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * called in that instance then a new instance of the activity will be 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * created, with whatever savedInstanceState the previous instance had generated 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from {@link #onSaveInstanceState}.</p> 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This is done because any application resource, 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * including layout files, can change based on any configuration value. Thus 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the only safe way to handle a configuration change is to re-retrieve all 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resources, including layouts, drawables, and strings. Because activities 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * must already know how to save their state and re-create themselves from 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that state, this is a convenient way to have an activity restart itself 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with a new configuration.</p> 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>In some special cases, you may want to bypass restarting of your 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity based on one or more types of configuration changes. This is 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * done with the {@link android.R.attr#configChanges android:configChanges} 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * attribute in its manifest. For any types of configuration changes you say 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that you handle there, you will receive a call to your current activity's 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onConfigurationChanged} method instead of being restarted. If 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a configuration change involves any that you do not handle, however, the 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity will still be restarted and {@link #onConfigurationChanged} 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will not be called.</p> 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <a name="StartingActivities"></a> 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <h3>Starting Activities and Getting Results</h3> 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The {@link android.app.Activity#startActivity} 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * method is used to start a 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * new activity, which will be placed at the top of the activity stack. It 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * takes a single argument, an {@link android.content.Intent Intent}, 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * which describes the activity 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to be executed.</p> 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Sometimes you want to get a result back from an activity when it 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ends. For example, you may start an activity that lets the user pick 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a person in a list of contacts; when it ends, it returns the person 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that was selected. To do this, you call the 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.app.Activity#startActivityForResult(Intent, int)} 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * version with a second integer parameter identifying the call. The result 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will come back through your {@link android.app.Activity#onActivityResult} 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * method.</p> 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>When an activity exits, it can call 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.app.Activity#setResult(int)} 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to return data back to its parent. It must always supply a result code, 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * which can be the standard results RESULT_CANCELED, RESULT_OK, or any 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * custom values starting at RESULT_FIRST_USER. In addition, it can optionally 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * return back an Intent containing any additional data it wants. All of this 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * information appears back on the 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * parent's <code>Activity.onActivityResult()</code>, along with the integer 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * identifier it originally supplied.</p> 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>If a child activity fails for any reason (such as crashing), the parent 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity will receive a result with the code RESULT_CANCELED.</p> 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <pre class="prettyprint"> 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * public class MyActivity extends Activity { 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ... 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * static final int PICK_CONTACT_REQUEST = 0; 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected boolean onKeyDown(int keyCode, KeyEvent event) { 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // When the user center presses, let them pick a contact. 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * startActivityForResult( 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * new Intent(Intent.ACTION_PICK, 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * new Uri("content://contacts")), 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * PICK_CONTACT_REQUEST); 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * return true; 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * return false; 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onActivityResult(int requestCode, int resultCode, 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Intent data) { 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if (requestCode == PICK_CONTACT_REQUEST) { 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if (resultCode == RESULT_OK) { 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // A contact was picked. Here we will just display it 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // to the user. 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * startActivity(new Intent(Intent.ACTION_VIEW, data)); 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </pre> 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <a name="SavingPersistentState"></a> 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <h3>Saving Persistent State</h3> 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>There are generally two kinds of persistent state than an activity 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will deal with: shared document-like data (typically stored in a SQLite 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * database using a {@linkplain android.content.ContentProvider content provider}) 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and internal state such as user preferences.</p> 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>For content provider data, we suggest that activities use a 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * "edit in place" user model. That is, any edits a user makes are effectively 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * made immediately without requiring an additional confirmation step. 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Supporting this model is generally a simple matter of following two rules:</p> 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul> 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> <p>When creating a new document, the backing database entry or file for 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it is created immediately. For example, if the user chooses to write 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a new e-mail, a new entry for that e-mail is created as soon as they 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * start entering data, so that if they go to any other activity after 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that point this e-mail will now appear in the list of drafts.</p> 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> <p>When an activity's <code>onPause()</code> method is called, it should 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * commit to the backing content provider or file any changes the user 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * has made. This ensures that those changes will be seen by any other 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity that is about to run. You will probably want to commit 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * your data even more aggressively at key times during your 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity's lifecycle: for example before starting a new 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity, before finishing your own activity, when the user 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * switches between input fields, etc.</p> 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul> 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This model is designed to prevent data loss when a user is navigating 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * between activities, and allows the system to safely kill an activity (because 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * system resources are needed somewhere else) at any time after it has been 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * paused. Note this implies 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that the user pressing BACK from your activity does <em>not</em> 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * mean "cancel" -- it means to leave the activity with its current contents 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * saved away. Cancelling edits in an activity must be provided through 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * some other mechanism, such as an explicit "revert" or "undo" option.</p> 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>See the {@linkplain android.content.ContentProvider content package} for 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * more information about content providers. These are a key aspect of how 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * different activities invoke and propagate data between themselves.</p> 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The Activity class also provides an API for managing internal persistent state 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associated with an activity. This can be used, for example, to remember 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the user's preferred initial display in a calendar (day view or week view) 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or the user's default home page in a web browser.</p> 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Activity persistent state is managed 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with the method {@link #getPreferences}, 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * allowing you to retrieve and 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * modify a set of name/value pairs associated with the activity. To use 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * preferences that are shared across multiple application components 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (activities, receivers, services, providers), you can use the underlying 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Context#getSharedPreferences Context.getSharedPreferences()} method 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to retrieve a preferences 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * object stored under a specific name. 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (Note that it is not possible to share settings data across application 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * packages -- for that you will need a content provider.)</p> 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Here is an excerpt from a calendar activity that stores the user's 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * preferred view mode in its persistent settings:</p> 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <pre class="prettyprint"> 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * public class CalendarActivity extends Activity { 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ... 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * static final int DAY_VIEW_MODE = 0; 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * static final int WEEK_VIEW_MODE = 1; 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * private SharedPreferences mPrefs; 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * private int mCurViewMode; 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onCreate(Bundle savedInstanceState) { 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * super.onCreate(savedInstanceState); 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * SharedPreferences mPrefs = getSharedPreferences(); 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * mCurViewMode = mPrefs.getInt("view_mode" DAY_VIEW_MODE); 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onPause() { 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * super.onPause(); 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * SharedPreferences.Editor ed = mPrefs.edit(); 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ed.putInt("view_mode", mCurViewMode); 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ed.commit(); 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </pre> 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <a name="Permissions"></a> 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <h3>Permissions</h3> 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The ability to start a particular Activity can be enforced when it is 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * declared in its 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * manifest's {@link android.R.styleable#AndroidManifestActivity <activity>} 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * tag. By doing so, other applications will need to declare a corresponding 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.styleable#AndroidManifestUsesPermission <uses-permission>} 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * element in their own manifest to be able to start that activity. 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>See the <a href="{@docRoot}guide/topics/security/security.html">Security and Permissions</a> 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * document for more information on permissions and security in general. 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <a name="ProcessLifecycle"></a> 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <h3>Process Lifecycle</h3> 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The Android system attempts to keep application process around for as 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * long as possible, but eventually will need to remove old processes when 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * memory runs low. As described in <a href="#ActivityLifecycle">Activity 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Lifecycle</a>, the decision about which process to remove is intimately 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * tied to the state of the user's interaction with it. In general, there 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are four states a process can be in based on the activities running in it, 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * listed here in order of importance. The system will kill less important 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * processes (the last ones) before it resorts to killing more important 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * processes (the first ones). 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ol> 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> <p>The <b>foreground activity</b> (the activity at the top of the screen 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that the user is currently interacting with) is considered the most important. 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Its process will only be killed as a last resort, if it uses more memory 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * than is available on the device. Generally at this point the device has 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * reached a memory paging state, so this is required in order to keep the user 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * interface responsive. 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> <p>A <b>visible activity</b> (an activity that is visible to the user 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * but not in the foreground, such as one sitting behind a foreground dialog) 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is considered extremely important and will not be killed unless that is 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * required to keep the foreground activity running. 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> <p>A <b>background activity</b> (an activity that is not visible to 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the user and has been paused) is no longer critical, so the system may 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * safely kill its process to reclaim memory for other foreground or 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * visible processes. If its process needs to be killed, when the user navigates 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * back to the activity (making it visible on the screen again), its 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onCreate} method will be called with the savedInstanceState it had previously 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * supplied in {@link #onSaveInstanceState} so that it can restart itself in the same 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * state as the user last left it. 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> <p>An <b>empty process</b> is one hosting no activities or other 5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * application components (such as {@link Service} or 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.content.BroadcastReceiver} classes). These are killed very 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * quickly by the system as memory becomes low. For this reason, any 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * background operation you do outside of an activity must be executed in the 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * context of an activity BroadcastReceiver or Service to ensure that the system 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * knows it needs to keep your process around. 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ol> 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Sometimes an Activity may need to do a long-running operation that exists 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * independently of the activity lifecycle itself. An example may be a camera 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * application that allows you to upload a picture to a web site. The upload 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * may take a long time, and the application should allow the user to leave 5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the application will it is executing. To accomplish this, your Activity 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * should start a {@link Service} in which the upload takes place. This allows 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the system to properly prioritize your process (considering it to be more 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * important than other non-visible applications) for the duration of the 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * upload, independent of whether the original activity is paused, stopped, 5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or finished. 5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class Activity extends ContextThemeWrapper 5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project implements LayoutInflater.Factory, 5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Window.Callback, KeyEvent.Callback, 5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OnCreateContextMenuListener, ComponentCallbacks { 5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String TAG = "Activity"; 5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Standard activity result: operation canceled. */ 6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RESULT_CANCELED = 0; 6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Standard activity result: operation succeeded. */ 6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RESULT_OK = -1; 6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Start of user-defined activity results. */ 6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int RESULT_FIRST_USER = 1; 6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static long sInstanceCount = 0; 6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String WINDOW_HIERARCHY_TAG = "android:viewHierarchyState"; 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String SAVED_DIALOG_IDS_KEY = "android:savedDialogIds"; 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String SAVED_DIALOGS_TAG = "android:savedDialogs"; 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String SAVED_DIALOG_KEY_PREFIX = "android:dialog_"; 6138ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn private static final String SAVED_DIALOG_ARGS_KEY_PREFIX = "android:dialog_args_"; 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6158ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn private static class ManagedDialog { 6168ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn Dialog mDialog; 6178ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn Bundle mArgs; 6188ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn } 6198ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn private SparseArray<ManagedDialog> mManagedDialogs; 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // set by the thread after the constructor and before onCreate(Bundle savedInstanceState) is called. 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Instrumentation mInstrumentation; 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IBinder mToken; 624b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn private int mIdent; 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ String mEmbeddedID; 6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Application mApplication; 627b70f3dff01e7e1e85f77cf0b0b2eaba8200eb82cChristopher Tate /*package*/ Intent mIntent; 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ComponentName mComponent; 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ ActivityInfo mActivityInfo; 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ ActivityThread mMainThread; 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ Object mLastNonConfigurationInstance; 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ HashMap<String,Object> mLastNonConfigurationChildInstances; 6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Activity mParent; 6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean mCalled; 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mResumed; 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mStopped; 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean mFinished; 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean mStartedActivity; 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ int mConfigChangeFlags; 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ Configuration mCurrentConfig; 6418d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert private SearchManager mSearchManager; 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Window mWindow; 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private WindowManager mWindowManager; 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ View mDecor = null; 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ boolean mWindowAdded = false; 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ boolean mVisibleFromServer = false; 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /*package*/ boolean mVisibleFromClient = true; 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private CharSequence mTitle; 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mTitleColor = 0; 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final class ManagedCursor { 6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ManagedCursor(Cursor cursor) { 6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCursor = cursor; 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mReleased = false; 6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mUpdated = false; 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final Cursor mCursor; 6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mReleased; 6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mUpdated; 6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final ArrayList<ManagedCursor> mManagedCursors = 6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new ArrayList<ManagedCursor>(); 6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // protected by synchronized (this) 6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mResultCode = RESULT_CANCELED; 6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Intent mResultData = null; 6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mTitleReady = false; 6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mDefaultKeyMode = DEFAULT_KEYS_DISABLE; 6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private SpannableStringBuilder mDefaultKeySsb = null; 6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected static final int[] FOCUSED_STATE_SET = {com.android.internal.R.attr.state_focused}; 6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Thread mUiThread; 6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final Handler mHandler = new Handler(); 6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 68282fe564267f276151063b2aa0d26075c3210d75fCarl Shapiro // Used for debug only 68382fe564267f276151063b2aa0d26075c3210d75fCarl Shapiro /* 6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Activity() { 6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ++sInstanceCount; 6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void finalize() throws Throwable { 6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.finalize(); 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project --sInstanceCount; 6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 69382fe564267f276151063b2aa0d26075c3210d75fCarl Shapiro */ 69482fe564267f276151063b2aa0d26075c3210d75fCarl Shapiro 6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static long getInstanceCount() { 6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sInstanceCount; 6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Return the intent that started this activity. */ 7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Intent getIntent() { 7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mIntent; 7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Change the intent returned by {@link #getIntent}. This holds a 7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * reference to the given intent; it does not copy it. Often used in 7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * conjunction with {@link #onNewIntent}. 7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param newIntent The new Intent object to return from getIntent 7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getIntent 7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onNewIntent 7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setIntent(Intent newIntent) { 7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIntent = newIntent; 7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Return the application that owns this activity. */ 7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final Application getApplication() { 7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mApplication; 7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Is this activity embedded inside of another activity? */ 7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean isChild() { 7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParent != null; 7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Return the parent activity if this view is an embedded child. */ 7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final Activity getParent() { 7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParent; 7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Retrieve the window manager for showing custom windows. */ 7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public WindowManager getWindowManager() { 7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mWindowManager; 7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the current {@link android.view.Window} for the activity. 7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This can be used to directly access parts of the Window API that 7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are not available through Activity/Screen. 7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Window The current window, or null if the activity is not 7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * visual. 7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Window getWindow() { 7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mWindow; 7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Calls {@link android.view.Window#getCurrentFocus} on the 7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Window of this Activity to return the currently focused view. 7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return View The current View with focus or null. 7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getWindow 7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.Window#getCurrentFocus 7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public View getCurrentFocus() { 7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mWindow != null ? mWindow.getCurrentFocus() : null; 7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getWallpaperDesiredMinimumWidth() { 7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int width = super.getWallpaperDesiredMinimumWidth(); 7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return width <= 0 ? getWindowManager().getDefaultDisplay().getWidth() : width; 7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getWallpaperDesiredMinimumHeight() { 7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int height = super.getWallpaperDesiredMinimumHeight(); 7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return height <= 0 ? getWindowManager().getDefaultDisplay().getHeight() : height; 7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when the activity is starting. This is where most initialization 7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * should go: calling {@link #setContentView(int)} to inflate the 7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity's UI, using {@link #findViewById} to programmatically interact 7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with widgets in the UI, calling 7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #managedQuery(android.net.Uri , String[], String, String[], String)} to retrieve 7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * cursors for data being displayed, etc. 7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>You can call {@link #finish} from within this function, in 7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * which case onDestroy() will be immediately called without any of the rest 7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of the activity lifecycle ({@link #onStart}, {@link #onResume}, 7869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onPause}, etc) executing. 7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 7909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param savedInstanceState If the activity is being re-initialized after 7939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * previously being shut down then this Bundle contains the data it most 7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * recently supplied in {@link #onSaveInstanceState}. <b><i>Note: Otherwise it is null.</i></b> 7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onStart 7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onSaveInstanceState 7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onRestoreInstanceState 7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPostCreate 8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onCreate(Bundle savedInstanceState) { 802bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn mVisibleFromClient = !mWindow.getWindowStyle().getBoolean( 803bfe319e06aa56c081d0d94d64a8181291d7f7388Dianne Hackborn com.android.internal.R.styleable.Window_windowNoDisplay, false); 8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The hook for {@link ActivityThread} to restore the state of this activity. 8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Calls {@link #onSaveInstanceState(android.os.Bundle)} and 8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #restoreManagedDialogs(android.os.Bundle)}. 8129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param savedInstanceState contains the saved state 8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void performRestoreInstanceState(Bundle savedInstanceState) { 8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onRestoreInstanceState(savedInstanceState); 8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project restoreManagedDialogs(savedInstanceState); 8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This method is called after {@link #onStart} when the activity is 8229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * being re-initialized from a previously saved state, given here in 823305de9dbda4e40d60ca99dda307ccd5e3c23e0a0Mike LeBeau * <var>savedInstanceState</var>. Most implementations will simply use {@link #onCreate} 8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to restore their state, but it is sometimes convenient to do it here 8259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * after all of the initialization has been done or to allow subclasses to 8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * decide whether to use your default implementation. The default 8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method performs a restore of any view state that 8289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * had previously been frozen by {@link #onSaveInstanceState}. 8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This method is called between {@link #onStart} and 8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onPostCreate}. 8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param savedInstanceState the data most recently supplied in {@link #onSaveInstanceState}. 8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onCreate 8369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPostCreate 8379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onResume 8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onSaveInstanceState 8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onRestoreInstanceState(Bundle savedInstanceState) { 8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mWindow != null) { 8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bundle windowState = savedInstanceState.getBundle(WINDOW_HIERARCHY_TAG); 8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (windowState != null) { 8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.restoreHierarchyState(windowState); 8459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Restore the state of any saved managed dialogs. 8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param savedInstanceState The bundle to restore from. 8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void restoreManagedDialogs(Bundle savedInstanceState) { 8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Bundle b = savedInstanceState.getBundle(SAVED_DIALOGS_TAG); 8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (b == null) { 8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int[] ids = b.getIntArray(SAVED_DIALOG_IDS_KEY); 8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int numDialogs = ids.length; 8628ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn mManagedDialogs = new SparseArray<ManagedDialog>(numDialogs); 8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < numDialogs; i++) { 8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Integer dialogId = ids[i]; 8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bundle dialogState = b.getBundle(savedDialogKeyFor(dialogId)); 8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (dialogState != null) { 867e35c23514592efe07d54fdbed7e7ec0b717e8bbeRomain Guy // Calling onRestoreInstanceState() below will invoke dispatchOnCreate 868e35c23514592efe07d54fdbed7e7ec0b717e8bbeRomain Guy // so tell createDialog() not to do it, otherwise we get an exception 8698ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn final ManagedDialog md = new ManagedDialog(); 8708ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md.mArgs = b.getBundle(savedDialogArgsKeyFor(dialogId)); 8718ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md.mDialog = createDialog(dialogId, dialogState, md.mArgs); 8728ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn if (md.mDialog != null) { 8738ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn mManagedDialogs.put(dialogId, md); 8748ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn onPrepareDialog(dialogId, md.mDialog, md.mArgs); 8758ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md.mDialog.onRestoreInstanceState(dialogState); 8768ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn } 8779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8818ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn private Dialog createDialog(Integer dialogId, Bundle state, Bundle args) { 8828ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn final Dialog dialog = onCreateDialog(dialogId, args); 883764d5331d15c19162c938e617777b4bf15a6314dRomain Guy if (dialog == null) { 8848ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn return null; 885764d5331d15c19162c938e617777b4bf15a6314dRomain Guy } 8866de4aed1c67263269f83f579ec5b06263d173ef3Romain Guy dialog.dispatchOnCreate(state); 887764d5331d15c19162c938e617777b4bf15a6314dRomain Guy return dialog; 888764d5331d15c19162c938e617777b4bf15a6314dRomain Guy } 889764d5331d15c19162c938e617777b4bf15a6314dRomain Guy 8908ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn private static String savedDialogKeyFor(int key) { 8919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return SAVED_DIALOG_KEY_PREFIX + key; 8929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8948ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn private static String savedDialogArgsKeyFor(int key) { 8958ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn return SAVED_DIALOG_ARGS_KEY_PREFIX + key; 8968ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn } 8979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when activity start-up is complete (after {@link #onStart} 9009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and {@link #onRestoreInstanceState} have been called). Applications will 9019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * generally not implement this method; it is intended for system 9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * classes to do final initialization after application code has run. 9039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 9059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 9069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 9079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param savedInstanceState If the activity is being re-initialized after 9099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * previously being shut down then this Bundle contains the data it most 9109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * recently supplied in {@link #onSaveInstanceState}. <b><i>Note: Otherwise it is null.</i></b> 9119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onCreate 9129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onPostCreate(Bundle savedInstanceState) { 9149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!isChild()) { 9159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTitleReady = true; 9169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onTitleChanged(getTitle(), getTitleColor()); 9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 9199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called after {@link #onCreate} — or after {@link #onRestart} when 9239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the activity had been stopped, but is now again being displayed to the 9249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * user. It will be followed by {@link #onResume}. 9259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 9279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 9299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onCreate 9319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onStop 9329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onResume 9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onStart() { 9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called after {@link #onStop} when the current activity is being 9409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * re-displayed to the user (the user has navigated back to it). It will 9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be followed by {@link #onStart} and then {@link #onResume}. 9429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>For activities that are using raw {@link Cursor} objects (instead of 9449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * creating them through 9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #managedQuery(android.net.Uri , String[], String, String[], String)}, 9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this is usually the place 9479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * where the cursor should be requeried (because you had deactivated it in 9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onStop}. 9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 9519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 9529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 9539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onStop 9559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onStart 9569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onResume 9579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onRestart() { 9599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 9609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called after {@link #onRestoreInstanceState}, {@link #onRestart}, or 9649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onPause}, for your activity to start interacting with the user. 9659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is a good place to begin animations, open exclusive-access devices 9669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (such as the camera), etc. 9679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Keep in mind that onResume is not the best indicator that your activity 9699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is visible to the user; a system window such as the keyguard may be in 9709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * front. Use {@link #onWindowFocusChanged} to know for certain that your 9719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity is visible to the user (for example, to resume a game). 9729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 9749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 9759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 9769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onRestoreInstanceState 9789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onRestart 9799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPostResume 9809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPause 9819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onResume() { 9839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 9849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when activity resume is complete (after {@link #onResume} has 9889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * been called). Applications will generally not implement this method; 9899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it is intended for system classes to do final setup after application 9909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resume code has run. 9919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 9949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 9959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onResume 9979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onPostResume() { 9999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Window win = getWindow(); 10009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (win != null) win.makeActive(); 10019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 10029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is called for activities that set launchMode to "singleTop" in 10069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * their package, or if a client used the {@link Intent#FLAG_ACTIVITY_SINGLE_TOP} 10079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * flag when calling {@link #startActivity}. In either case, when the 10089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity is re-launched while at the top of the activity stack instead 10099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of a new instance of the activity being started, onNewIntent() will be 10109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * called on the existing instance with the Intent that was used to 10119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * re-launch it. 10129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>An activity will always be paused before receiving a new intent, so 10149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you can count on {@link #onResume} being called after this method. 10159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note that {@link #getIntent} still returns the original Intent. You 10179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can use {@link #setIntent} to update it to this new Intent. 10189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param intent The new intent that was started for the activity. 10209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #getIntent 10229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setIntent 10239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onResume 10249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onNewIntent(Intent intent) { 10269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The hook for {@link ActivityThread} to save the state of this activity. 10309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Calls {@link #onSaveInstanceState(android.os.Bundle)} 10329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and {@link #saveManagedDialogs(android.os.Bundle)}. 10339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param outState The bundle to save the state to. 10359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void performSaveInstanceState(Bundle outState) { 10379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onSaveInstanceState(outState); 10389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project saveManagedDialogs(outState); 10399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called to retrieve per-instance state from an activity before being killed 10439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * so that the state can be restored in {@link #onCreate} or 10449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onRestoreInstanceState} (the {@link Bundle} populated by this method 10459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will be passed to both). 10469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This method is called before an activity may be killed so that when it 10489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * comes back some time in the future it can restore its state. For example, 10499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if activity B is launched in front of activity A, and at some point activity 10509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A is killed to reclaim resources, activity A will have a chance to save the 10519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * current state of its user interface via this method so that when the user 10529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returns to activity A, the state of the user interface can be restored 10539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * via {@link #onCreate} or {@link #onRestoreInstanceState}. 10549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Do not confuse this method with activity lifecycle callbacks such as 10569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onPause}, which is always called when an activity is being placed 10579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in the background or on its way to destruction, or {@link #onStop} which 10589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is called before destruction. One example of when {@link #onPause} and 10599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onStop} is called and not this method is when a user navigates back 10609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from activity B to activity A: there is no need to call {@link #onSaveInstanceState} 10619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * on B because that particular instance will never be restored, so the 10629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * system avoids calling it. An example when {@link #onPause} is called and 10639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not {@link #onSaveInstanceState} is when activity B is launched in front of activity A: 10649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the system may avoid calling {@link #onSaveInstanceState} on activity A if it isn't 10659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * killed during the lifetime of B since the state of the user interface of 10669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A will stay intact. 10679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The default implementation takes care of most of the UI per-instance 10699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * state for you by calling {@link android.view.View#onSaveInstanceState()} on each 10709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * view in the hierarchy that has an id, and by saving the id of the currently 10719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * focused view (all of which is restored by the default implementation of 10729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onRestoreInstanceState}). If you override this method to save additional 10739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * information not captured by each individual view, you will likely want to 10749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * call through to the default implementation, otherwise be prepared to save 10759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * all of the state of each view yourself. 10769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>If called, this method will occur before {@link #onStop}. There are 10789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * no guarantees about whether it will occur before or after {@link #onPause}. 10799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param outState Bundle in which to place your saved state. 10819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onCreate 10839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onRestoreInstanceState 10849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPause 10859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onSaveInstanceState(Bundle outState) { 10879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project outState.putBundle(WINDOW_HIERARCHY_TAG, mWindow.saveHierarchyState()); 10889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 10919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Save the state of any managed dialogs. 10929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param outState place to store the saved state. 10949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void saveManagedDialogs(Bundle outState) { 10969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mManagedDialogs == null) { 10979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 10989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int numDialogs = mManagedDialogs.size(); 11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (numDialogs == 0) { 11029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 11039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bundle dialogState = new Bundle(); 11069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] ids = new int[mManagedDialogs.size()]; 11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // save each dialog's bundle, gather the ids 11109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < numDialogs; i++) { 11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int key = mManagedDialogs.keyAt(i); 11129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ids[i] = key; 11138ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn final ManagedDialog md = mManagedDialogs.valueAt(i); 11148ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn dialogState.putBundle(savedDialogKeyFor(key), md.mDialog.onSaveInstanceState()); 11158ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn if (md.mArgs != null) { 11168ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn dialogState.putBundle(savedDialogArgsKeyFor(key), md.mArgs); 11178ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn } 11189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dialogState.putIntArray(SAVED_DIALOG_IDS_KEY, ids); 11219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project outState.putBundle(SAVED_DIALOGS_TAG, dialogState); 11229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called as part of the activity lifecycle when an activity is going into 11279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the background, but has not (yet) been killed. The counterpart to 11289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onResume}. 11299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>When activity B is launched in front of activity A, this callback will 11319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be invoked on A. B will not be created until A's {@link #onPause} returns, 11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * so be sure to not do anything lengthy here. 11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This callback is mostly used for saving any persistent state the 11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity is editing, to present a "edit in place" model to the user and 11369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * making sure nothing is lost if there are not enough resources to start 11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the new activity without first killing this one. This is also a good 11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * place to do things like stop animations and other things that consume a 11399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * noticeable mount of CPU in order to make the switch to the next activity 11409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as fast as possible, or to close resources that are exclusive access 11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * such as the camera. 11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>In situations where the system needs more memory it may kill paused 11449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * processes to reclaim resources. Because of this, you should be sure 11459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that all of your state is saved by the time you return from 11469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this function. In general {@link #onSaveInstanceState} is used to save 11479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * per-instance state in the activity and this method is used to store 11489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * global persistent data (in content providers, files, etc.) 11499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>After receiving this call you will usually receive a following call 11519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to {@link #onStop} (after the next activity has been resumed and 11529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * displayed), however in some cases there will be a direct call back to 11539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onResume} without going through the stopped state. 11549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 11569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 11579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 11589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onResume 11609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onSaveInstanceState 11619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onStop 11629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onPause() { 11649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 11659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called as part of the activity lifecycle when an activity is about to go 11699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * into the background as the result of user choice. For example, when the 11709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * user presses the Home key, {@link #onUserLeaveHint} will be called, but 11719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * when an incoming phone call causes the in-call Activity to be automatically 11729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * brought to the foreground, {@link #onUserLeaveHint} will not be called on 11739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the activity being interrupted. In cases when it is invoked, this method 11749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is called right before the activity's {@link #onPause} callback. 11759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This callback and {@link #onUserInteraction} are intended to help 11779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activities manage status bar notifications intelligently; specifically, 11789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for helping activities determine the proper time to cancel a notfication. 11799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onUserInteraction() 11819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 11829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onUserLeaveHint() { 11839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 11869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Generate a new thumbnail for this activity. This method is called before 11879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * pausing the activity, and should draw into <var>outBitmap</var> the 11889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * imagery for the desired thumbnail in the dimensions of that bitmap. It 11899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can use the given <var>canvas</var>, which is configured to draw into the 11909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * bitmap, for rendering if desired. 11919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The default implementation renders the Screen's current view 11939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * hierarchy into the canvas to generate a thumbnail. 11949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>If you return false, the bitmap will be filled with a default 11969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thumbnail. 11979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param outBitmap The bitmap to contain the thumbnail. 11999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param canvas Can be used to render into the bitmap. 12009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Return true if you have drawn into the bitmap; otherwise after 12029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you return it will be filled with a default thumbnail. 12039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onCreateDescription 12059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onSaveInstanceState 12069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPause 12079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onCreateThumbnail(Bitmap outBitmap, Canvas canvas) { 12090b2a6d0773211449fbde9d2706388714beeffebbJim Miller if (mDecor == null) { 12109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 12119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12130b2a6d0773211449fbde9d2706388714beeffebbJim Miller int paddingLeft = 0; 12140b2a6d0773211449fbde9d2706388714beeffebbJim Miller int paddingRight = 0; 12150b2a6d0773211449fbde9d2706388714beeffebbJim Miller int paddingTop = 0; 12160b2a6d0773211449fbde9d2706388714beeffebbJim Miller int paddingBottom = 0; 12170b2a6d0773211449fbde9d2706388714beeffebbJim Miller 12180b2a6d0773211449fbde9d2706388714beeffebbJim Miller // Find System window and use padding so we ignore space reserved for decorations 12190b2a6d0773211449fbde9d2706388714beeffebbJim Miller // like the status bar and such. 12200b2a6d0773211449fbde9d2706388714beeffebbJim Miller final FrameLayout top = (FrameLayout) mDecor; 12210b2a6d0773211449fbde9d2706388714beeffebbJim Miller for (int i = 0; i < top.getChildCount(); i++) { 12220b2a6d0773211449fbde9d2706388714beeffebbJim Miller View child = top.getChildAt(i); 12230b2a6d0773211449fbde9d2706388714beeffebbJim Miller if (child.isFitsSystemWindowsFlagSet()) { 12240b2a6d0773211449fbde9d2706388714beeffebbJim Miller paddingLeft = child.getPaddingLeft(); 12250b2a6d0773211449fbde9d2706388714beeffebbJim Miller paddingRight = child.getPaddingRight(); 12260b2a6d0773211449fbde9d2706388714beeffebbJim Miller paddingTop = child.getPaddingTop(); 12270b2a6d0773211449fbde9d2706388714beeffebbJim Miller paddingBottom = child.getPaddingBottom(); 12280b2a6d0773211449fbde9d2706388714beeffebbJim Miller break; 12290b2a6d0773211449fbde9d2706388714beeffebbJim Miller } 12300b2a6d0773211449fbde9d2706388714beeffebbJim Miller } 12310b2a6d0773211449fbde9d2706388714beeffebbJim Miller 12320b2a6d0773211449fbde9d2706388714beeffebbJim Miller final int visibleWidth = mDecor.getWidth() - paddingLeft - paddingRight; 12330b2a6d0773211449fbde9d2706388714beeffebbJim Miller final int visibleHeight = mDecor.getHeight() - paddingTop - paddingBottom; 12349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project canvas.save(); 12360b2a6d0773211449fbde9d2706388714beeffebbJim Miller canvas.scale( (float) outBitmap.getWidth() / visibleWidth, 12370b2a6d0773211449fbde9d2706388714beeffebbJim Miller (float) outBitmap.getHeight() / visibleHeight); 12380b2a6d0773211449fbde9d2706388714beeffebbJim Miller canvas.translate(-paddingLeft, -paddingTop); 12390b2a6d0773211449fbde9d2706388714beeffebbJim Miller mDecor.draw(canvas); 12409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project canvas.restore(); 12419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 12439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Generate a new description for this activity. This method is called 12479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * before pausing the activity and can, if desired, return some textual 12489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * description of its current state to be displayed to the user. 12499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The default implementation returns null, which will cause you to 12519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * inherit the description from the previous activity. If all activities 12529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * return null, generally the label of the top activity will be used as the 12539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * description. 12549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A description of what the user is doing. It should be short and 12569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * sweet (only a few words). 12579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onCreateThumbnail 12599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onSaveInstanceState 12609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPause 12619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence onCreateDescription() { 12639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 12649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when you are no longer visible to the user. You will next 12689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * receive either {@link #onRestart}, {@link #onDestroy}, or nothing, 12699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * depending on later user activity. 12709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note that this method may never be called, in low memory situations 12729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * where the system does not have enough memory to keep your activity's 12739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * process running after its {@link #onPause} method is called. 12749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 12769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 12779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 12789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onRestart 12809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onResume 12819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onSaveInstanceState 12829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onDestroy 12839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 12849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onStop() { 12859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 12869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 12899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Perform any final cleanup before an activity is destroyed. This can 12909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * happen either because the activity is finishing (someone called 12919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #finish} on it, or because the system is temporarily destroying 12929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this instance of the activity to save space. You can distinguish 12939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * between these two scenarios with the {@link #isFinishing} method. 12949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 12959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Note: do not count on this method being called as a place for 12969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * saving data! For example, if an activity is editing data in a content 12979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * provider, those edits should be committed in either {@link #onPause} or 12989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onSaveInstanceState}, not here.</em> This method is usually implemented to 12999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * free resources like threads that are associated with an activity, so 13009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that a destroyed activity does not leave such things around while the 13019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rest of its application is still running. There are situations where 13029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the system will simply kill the activity's hosting process without 13039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * calling this method (or any others) in it, so it should not be used to 13049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * do things that are intended to remain around after the process goes 13059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * away. 13069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>Derived classes must call through to the super class's 13089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation of this method. If they do not, an exception will be 13099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thrown.</em></p> 13109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPause 13129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onStop 13139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #finish 13149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #isFinishing 13159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onDestroy() { 13179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 13189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // dismiss any dialogs we are managing. 13209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mManagedDialogs != null) { 13219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int numDialogs = mManagedDialogs.size(); 13229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < numDialogs; i++) { 13238ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn final ManagedDialog md = mManagedDialogs.valueAt(i); 13248ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn if (md.mDialog.isShowing()) { 13258ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md.mDialog.dismiss(); 13269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13288ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn mManagedDialogs = null; 13299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // close any cursors we are managing. 13322f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki synchronized (mManagedCursors) { 13332f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki int numCursors = mManagedCursors.size(); 13342f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki for (int i = 0; i < numCursors; i++) { 13352f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki ManagedCursor c = mManagedCursors.get(i); 13362f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki if (c != null) { 13372f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki c.mCursor.close(); 13382f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki } 13399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13402f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki mManagedCursors.clear(); 13419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13424986044fd3bce877247e425374b47967775081a8Amith Yamasani 13434986044fd3bce877247e425374b47967775081a8Amith Yamasani // Close any open search dialog 13444986044fd3bce877247e425374b47967775081a8Amith Yamasani if (mSearchManager != null) { 13454986044fd3bce877247e425374b47967775081a8Amith Yamasani mSearchManager.stopSearch(); 13464986044fd3bce877247e425374b47967775081a8Amith Yamasani } 13479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called by the system when the device configuration changes while your 13519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity is running. Note that this will <em>only</em> be called if 13529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you have selected configurations you would like to handle with the 13539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.attr#configChanges} attribute in your manifest. If 13549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * any configuration change occurs that is not selected to be reported 13559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * by that attribute, then instead of reporting it the system will stop 13569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and restart the activity (to have it launched with the new 13579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * configuration). 13589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>At the time that this function has been called, your Resources 13609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * object will have been updated to return resource values matching the 13619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * new configuration. 13629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param newConfig The new device configuration. 13649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onConfigurationChanged(Configuration newConfig) { 13669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 1367444c727e0eecf83e9d0b9c4e7af5cbf5fc4135f8Bjorn Bringert 13689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mWindow != null) { 13699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Pass the configuration changed event to the window 13709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.onConfigurationChanged(newConfig); 13719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If this activity is being destroyed because it can not handle a 13769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * configuration parameter being changed (and thus its 13779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onConfigurationChanged(Configuration)} method is 13789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <em>not</em> being called), then you can use this method to discover 13799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the set of changes that have occurred while in the process of being 13809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * destroyed. Note that there is no guarantee that these will be 13819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * accurate (other changes could have happened at any time), so you should 13829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * only use this as an optimization hint. 13839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a bit field of the configuration parameters that are 13859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * changing, as defined by the {@link android.content.res.Configuration} 13869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * class. 13879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getChangingConfigurations() { 13899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mConfigChangeFlags; 13909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the non-configuration instance data that was previously 13949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returned by {@link #onRetainNonConfigurationInstance()}. This will 13959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be available from the initial {@link #onCreate} and 13969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onStart} calls to the new instance, allowing you to extract 13979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * any useful dynamic state from the previous instance. 13989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note that the data you retrieve here should <em>only</em> be used 14009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as an optimization for handling configuration changes. You should always 14019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be able to handle getting a null pointer back, and an activity must 14029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * still be able to restore itself to its previous state (through the 14039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * normal {@link #onSaveInstanceState(Bundle)} mechanism) even if this 14049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * function returns null. 14059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the object previously returned by 14079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onRetainNonConfigurationInstance()}. 14089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Object getLastNonConfigurationInstance() { 14109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mLastNonConfigurationInstance; 14119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called by the system, as part of destroying an 14159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity due to a configuration change, when it is known that a new 14169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * instance will immediately be created for the new configuration. You 14179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can return any object you like here, including the activity instance 14189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * itself, which can later be retrieved by calling 14199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getLastNonConfigurationInstance()} in the new activity 14209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * instance. 14219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This function is called purely as an optimization, and you must 14239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not rely on it being called. When it is called, a number of guarantees 14249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will be made to help optimize configuration switching: 14259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <ul> 14269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> The function will be called between {@link #onStop} and 14279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onDestroy}. 14289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> A new instance of the activity will <em>always</em> be immediately 14299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * created after this one's {@link #onDestroy()} is called. 14309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <li> The object you return here will <em>always</em> be available from 14319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the {@link #getLastNonConfigurationInstance()} method of the following 14329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity instance as described there. 14339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </ul> 14349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>These guarantees are designed so that an activity can use this API 14369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to propagate extensive state from the old to new activity instance, from 14379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * loaded bitmaps, to network connections, to evenly actively running 14389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * threads. Note that you should <em>not</em> propagate any data that 14399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * may change based on the configuration, including any data loaded from 14409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resources such as strings, layouts, or drawables. 14419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Return any Object holding the desired state to propagate to the 14439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * next activity instance. 14449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Object onRetainNonConfigurationInstance() { 14469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 14479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve the non-configuration instance data that was previously 14519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returned by {@link #onRetainNonConfigurationChildInstances()}. This will 14529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be available from the initial {@link #onCreate} and 14539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onStart} calls to the new instance, allowing you to extract 14549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * any useful dynamic state from the previous instance. 14559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note that the data you retrieve here should <em>only</em> be used 14579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as an optimization for handling configuration changes. You should always 14589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be able to handle getting a null pointer back, and an activity must 14599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * still be able to restore itself to its previous state (through the 14609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * normal {@link #onSaveInstanceState(Bundle)} mechanism) even if this 14619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * function returns null. 14629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the object previously returned by 14649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onRetainNonConfigurationChildInstances()} 14659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project HashMap<String,Object> getLastNonConfigurationChildInstances() { 14679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mLastNonConfigurationChildInstances; 14689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This method is similar to {@link #onRetainNonConfigurationInstance()} except that 14729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it should return either a mapping from child activity id strings to arbitrary objects, 14739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or null. This method is intended to be used by Activity framework subclasses that control a 14749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * set of child activities, such as ActivityGroup. The same guarantees and restrictions apply 14759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as for {@link #onRetainNonConfigurationInstance()}. The default implementation returns null. 14769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project HashMap<String,Object> onRetainNonConfigurationChildInstances() { 14789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 14799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onLowMemory() { 14829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = true; 14839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Wrapper around 14879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link ContentResolver#query(android.net.Uri , String[], String, String[], String)} 14889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that gives the resulting {@link Cursor} to call 14899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #startManagingCursor} so that the activity will manage its 14909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * lifecycle for you. 14919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param uri The URI of the content provider to query. 14939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param projection List of columns to return. 14949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param selection SQL WHERE clause. 14959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param sortOrder SQL ORDER BY clause. 14969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The Cursor that was returned by query(). 14989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see ContentResolver#query(android.net.Uri , String[], String, String[], String) 15009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startManagingCursor 15019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 15029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final Cursor managedQuery(Uri uri, 15049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String[] projection, 15059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String selection, 15069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String sortOrder) 15079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 15089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Cursor c = getContentResolver().query(uri, projection, selection, null, sortOrder); 15099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (c != null) { 15109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startManagingCursor(c); 15119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return c; 15139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Wrapper around 15179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link ContentResolver#query(android.net.Uri , String[], String, String[], String)} 15189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that gives the resulting {@link Cursor} to call 15199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #startManagingCursor} so that the activity will manage its 15209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * lifecycle for you. 15219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 15229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param uri The URI of the content provider to query. 15239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param projection List of columns to return. 15249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param selection SQL WHERE clause. 15259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param selectionArgs The arguments to selection, if any ?s are pesent 15269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param sortOrder SQL ORDER BY clause. 15279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 15289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The Cursor that was returned by query(). 15299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 15309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see ContentResolver#query(android.net.Uri , String[], String, String[], String) 15319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startManagingCursor 15329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final Cursor managedQuery(Uri uri, 15349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String[] projection, 15359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String selection, 15369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String[] selectionArgs, 15379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String sortOrder) 15389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 15399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Cursor c = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder); 15409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (c != null) { 15419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startManagingCursor(c); 15429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return c; 15449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Wrapper around {@link Cursor#commitUpdates()} that takes care of noting 15489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that the Cursor needs to be requeried. You can call this method in 15499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onPause} or {@link #onStop} to have the system call 15509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Cursor#requery} for you if the activity is later resumed. This 15519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * allows you to avoid determing when to do the requery yourself (which is 15529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * required for the Cursor to see any data changes that were committed with 15539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it). 15549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 15559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param c The Cursor whose changes are to be committed. 15569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 15579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #managedQuery(android.net.Uri , String[], String, String[], String) 15589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startManagingCursor 15599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see Cursor#commitUpdates() 15609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see Cursor#requery 15619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 15629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Deprecated 15649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void managedCommitUpdates(Cursor c) { 15659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mManagedCursors) { 15669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int N = mManagedCursors.size(); 15679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i=0; i<N; i++) { 15689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ManagedCursor mc = mManagedCursors.get(i); 15699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mc.mCursor == c) { 15709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.commitUpdates(); 15719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mc.mUpdated = true; 15729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 15739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new RuntimeException( 15769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Cursor " + c + " is not currently managed"); 15779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This method allows the activity to take care of managing the given 15829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Cursor}'s lifecycle for you based on the activity's lifecycle. 15839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * That is, when the activity is stopped it will automatically call 15849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Cursor#deactivate} on the given Cursor, and when it is later restarted 15859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it will call {@link Cursor#requery} for you. When the activity is 15869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * destroyed, all managed Cursors will be closed automatically. 15879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 15889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param c The Cursor to be managed. 15899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 15909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #managedQuery(android.net.Uri , String[], String, String[], String) 15919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #stopManagingCursor 15929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void startManagingCursor(Cursor c) { 15949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mManagedCursors) { 15959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mManagedCursors.add(new ManagedCursor(c)); 15969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Given a Cursor that was previously given to 16019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #startManagingCursor}, stop the activity's management of that 16029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * cursor. 16039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 16049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param c The Cursor that was being managed. 16059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 16069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startManagingCursor 16079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void stopManagingCursor(Cursor c) { 16099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mManagedCursors) { 16109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int N = mManagedCursors.size(); 16119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i=0; i<N; i++) { 16129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ManagedCursor mc = mManagedCursors.get(i); 16139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mc.mCursor == c) { 16149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mManagedCursors.remove(i); 16159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 16169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Control whether this activity is required to be persistent. By default 16239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activities are not persistent; setting this to true will prevent the 16249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * system from stopping this activity or its process when running low on 16259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * resources. 16269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 16279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><em>You should avoid using this method</em>, it has severe negative 16289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * consequences on how well the system can manage its resources. A better 16299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * approach is to implement an application service that you control with 16309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Context#startService} and {@link Context#stopService}. 16319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 16329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param isPersistent Control whether the current activity must be 16339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * persistent, true if so, false for the normal 16349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * behavior. 16359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setPersistent(boolean isPersistent) { 16379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 16389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 16399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ActivityManagerNative.getDefault() 16409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .setPersistent(mToken, isPersistent); 16419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 16429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 16439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 16459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new RuntimeException("setPersistent() not yet supported for embedded activities"); 16469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Finds a view that was identified by the id attribute from the XML that 16519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * was processed in {@link #onCreate}. 16529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 16539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The view if found or null otherwise. 16549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public View findViewById(int id) { 16569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getWindow().findViewById(id); 16579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the activity content from a layout resource. The resource will be 16619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * inflated, adding all top-level views to the activity. 16629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 16639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param layoutResID Resource ID to be inflated. 16649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setContentView(int layoutResID) { 16669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setContentView(layoutResID); 16679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the activity content to an explicit view. This view is placed 16719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * directly into the activity's view hierarchy. It can itself be a complex 16729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * view hierarhcy. 16739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 16749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The desired content to display. 16759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setContentView(View view) { 16779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setContentView(view); 16789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the activity content to an explicit view. This view is placed 16829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * directly into the activity's view hierarchy. It can itself be a complex 16839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * view hierarhcy. 16849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 16859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The desired content to display. 16869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param params Layout parameters for the view. 16879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setContentView(View view, ViewGroup.LayoutParams params) { 16899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setContentView(view, params); 16909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Add an additional content view to the activity. Added after any existing 16949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ones in the activity -- existing views are NOT removed. 16959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 16969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The desired content to display. 16979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param params Layout parameters for the view. 16989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void addContentView(View view, ViewGroup.LayoutParams params) { 17009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().addContentView(view, params); 17019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setDefaultKeyMode} to turn off default handling of 17059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * keys. 17069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setDefaultKeyMode 17089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public final int DEFAULT_KEYS_DISABLE = 0; 17109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setDefaultKeyMode} to launch the dialer during default 17129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * key handling. 17139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setDefaultKeyMode 17159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public final int DEFAULT_KEYS_DIALER = 1; 17179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setDefaultKeyMode} to execute a menu shortcut in 17199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * default key handling. 17209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>That is, the user does not need to hold down the menu key to execute menu shortcuts. 17229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setDefaultKeyMode 17249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public final int DEFAULT_KEYS_SHORTCUT = 2; 17269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setDefaultKeyMode} to specify that unhandled keystrokes 17289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will start an application-defined search. (If the application or activity does not 17299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * actually define a search, the the keys will be ignored.) 17309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>See {@link android.app.SearchManager android.app.SearchManager} for more details. 17329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setDefaultKeyMode 17349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public final int DEFAULT_KEYS_SEARCH_LOCAL = 3; 17369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setDefaultKeyMode} to specify that unhandled keystrokes 17399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will start a global search (typically web search, but some platforms may define alternate 17409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * methods for global search) 17419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>See {@link android.app.SearchManager android.app.SearchManager} for more details. 17439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setDefaultKeyMode 17459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static public final int DEFAULT_KEYS_SEARCH_GLOBAL = 4; 17479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Select the default key handling for this activity. This controls what 17509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will happen to key events that are not otherwise handled. The default 17519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * mode ({@link #DEFAULT_KEYS_DISABLE}) will simply drop them on the 17529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * floor. Other modes allow you to launch the dialer 17539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ({@link #DEFAULT_KEYS_DIALER}), execute a shortcut in your options 17549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * menu without requiring the menu key be held down 17559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ({@link #DEFAULT_KEYS_SHORTCUT}), or launch a search ({@link #DEFAULT_KEYS_SEARCH_LOCAL} 17569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and {@link #DEFAULT_KEYS_SEARCH_GLOBAL}). 17579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note that the mode selected here does not impact the default 17599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * handling of system keys, such as the "back" and "menu" keys, and your 17609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity and its views always get a first chance to receive and handle 17619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * all application keys. 17629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param mode The desired default key mode constant. 17649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #DEFAULT_KEYS_DISABLE 17669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #DEFAULT_KEYS_DIALER 17679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #DEFAULT_KEYS_SHORTCUT 17689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #DEFAULT_KEYS_SEARCH_LOCAL 17699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #DEFAULT_KEYS_SEARCH_GLOBAL 17709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onKeyDown 17719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setDefaultKeyMode(int mode) { 17739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDefaultKeyMode = mode; 17749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Some modes use a SpannableStringBuilder to track & dispatch input events 17769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // This list must remain in sync with the switch in onKeyDown() 17779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (mode) { 17789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEFAULT_KEYS_DISABLE: 17799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEFAULT_KEYS_SHORTCUT: 17809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDefaultKeySsb = null; // not used in these modes 17819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 17829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEFAULT_KEYS_DIALER: 17839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEFAULT_KEYS_SEARCH_LOCAL: 17849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEFAULT_KEYS_SEARCH_GLOBAL: 17859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDefaultKeySsb = new SpannableStringBuilder(); 17869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Selection.setSelection(mDefaultKeySsb,0); 17879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 17889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 17899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalArgumentException(); 17909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when a key was pressed down and not handled by any of the views 17959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * inside of the activity. So, for example, key presses while the cursor 17969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is inside a TextView will not trigger the event (unless it is a navigation 17979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to another object) because TextView handles its own key presses. 17989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>If the focused view didn't want this event, this method is called. 18009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 18018d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * <p>The default implementation takes care of {@link KeyEvent#KEYCODE_BACK} 18028d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * by calling {@link #onBackPressed()}, though the behavior varies based 18038d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * on the application compatibility mode: for 18048d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * {@link android.os.Build.VERSION_CODES#ECLAIR} or later applications, 18058d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * it will set up the dispatch to call {@link #onKeyUp} where the action 18068d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * will be performed; for earlier applications, it will perform the 18078d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * action immediately in on-down, as those versions of the platform 18088d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * behaved. 18098d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * 18108d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn * <p>Other additional default key handling may be performed 181183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * if configured with {@link #setDefaultKeyMode}. 18129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 18139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Return <code>true</code> to prevent this event from being propagated 18149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * further, or <code>false</code> to indicate that you have not handled 18159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this event and it should continue to be propagated. 18169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onKeyUp 18179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.KeyEvent 18189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onKeyDown(int keyCode, KeyEvent event) { 182083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn if (keyCode == KeyEvent.KEYCODE_BACK) { 18218d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (getApplicationInfo().targetSdkVersion 18228d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn >= Build.VERSION_CODES.ECLAIR) { 18238d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn event.startTracking(); 18248d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn } else { 18258d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn onBackPressed(); 18268d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn } 18279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 18289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mDefaultKeyMode == DEFAULT_KEYS_DISABLE) { 18319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 18329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (mDefaultKeyMode == DEFAULT_KEYS_SHORTCUT) { 183383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn if (getWindow().performPanelShortcut(Window.FEATURE_OPTIONS_PANEL, 183483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn keyCode, event, Menu.FLAG_ALWAYS_PERFORM_CLOSE)) { 183583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn return true; 183683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 183783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn return false; 18389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 18399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Common code for DEFAULT_KEYS_DIALER & DEFAULT_KEYS_SEARCH_* 18409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean clearSpannable = false; 18419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean handled; 18429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((event.getRepeatCount() != 0) || event.isSystem()) { 18439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project clearSpannable = true; 18449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project handled = false; 18459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 184683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn handled = TextKeyListener.getInstance().onKeyDown( 184783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn null, mDefaultKeySsb, keyCode, event); 18489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (handled && mDefaultKeySsb.length() > 0) { 18499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // something useable has been typed - dispatch it now. 18509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final String str = mDefaultKeySsb.toString(); 18529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project clearSpannable = true; 18539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (mDefaultKeyMode) { 18559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEFAULT_KEYS_DIALER: 18569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + str)); 18579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 18589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startActivity(intent); 18599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 18609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEFAULT_KEYS_SEARCH_LOCAL: 18619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startSearch(str, false, null, false); 18629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 18639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DEFAULT_KEYS_SEARCH_GLOBAL: 18649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startSearch(str, false, null, true); 18659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 18669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (clearSpannable) { 18709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDefaultKeySsb.clear(); 18719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDefaultKeySsb.clearSpans(); 18729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Selection.setSelection(mDefaultKeySsb,0); 18739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return handled; 18759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 187983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Default implementation of {@link KeyEvent.Callback#onKeyLongPress(int, KeyEvent) 188083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * KeyEvent.Callback.onKeyLongPress()}: always returns false (doesn't handle 188183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * the event). 188283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 188383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public boolean onKeyLongPress(int keyCode, KeyEvent event) { 188483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn return false; 188583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 188683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn 188783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 18889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when a key was released and not handled by any of the views 18899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * inside of the activity. So, for example, key presses while the cursor 18909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is inside a TextView will not trigger the event (unless it is a navigation 18919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to another object) because TextView handles its own key presses. 18929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 189383fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * <p>The default implementation handles KEYCODE_BACK to stop the activity 189483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * and go back. 189583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * 18969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Return <code>true</code> to prevent this event from being propagated 18979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * further, or <code>false</code> to indicate that you have not handled 18989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this event and it should continue to be propagated. 18999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onKeyDown 19009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see KeyEvent 19019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onKeyUp(int keyCode, KeyEvent event) { 19038d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (getApplicationInfo().targetSdkVersion 19048d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn >= Build.VERSION_CODES.ECLAIR) { 19058d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking() 19068d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn && !event.isCanceled()) { 19078d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn onBackPressed(); 19088d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn return true; 19098d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn } 191083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 19119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 19129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 19159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Default implementation of {@link KeyEvent.Callback#onKeyMultiple(int, int, KeyEvent) 19169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * KeyEvent.Callback.onKeyMultiple()}: always returns false (doesn't handle 19179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the event). 19189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) { 19209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 19219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 192483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * Called when the activity has detected the user's press of the back 192583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * key. The default implementation simply finishes the current activity, 192683fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * but you can override this to do whatever you want. 192783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn */ 192883fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn public void onBackPressed() { 192983fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn finish(); 193083fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn } 193183fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn 193283fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn /** 19339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when a touch screen event was not handled by any of the views 19349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * under it. This is most useful to process touch events that happen 19359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * outside of your window bounds, where there is no view to receive it. 19369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param event The touch screen event being processed. 19389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Return true if you have consumed the event, false if you haven't. 19409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default implementation always returns false. 19419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onTouchEvent(MotionEvent event) { 19439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 19449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 19479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when the trackball was moved and not handled by any of the 19489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * views inside of the activity. So, for example, if the trackball moves 19499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * while focus is on a button, you will receive a call here because 19509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * buttons do not normally do anything with trackball events. The call 19519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * here happens <em>before</em> trackball movements are converted to 19529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * DPAD key events, which then get sent back to the view hierarchy, and 19539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will be processed at the point for things like focus navigation. 19549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param event The trackball event being processed. 19569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Return true if you have consumed the event, false if you haven't. 19589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default implementation always returns false. 19599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onTrackballEvent(MotionEvent event) { 19619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 19629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 19659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called whenever a key, touch, or trackball event is dispatched to the 19669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity. Implement this method if you wish to know that the user has 19679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * interacted with the device in some way while your activity is running. 19689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This callback and {@link #onUserLeaveHint} are intended to help 19699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activities manage status bar notifications intelligently; specifically, 19709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for helping activities determine the proper time to cancel a notfication. 19719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>All calls to your activity's {@link #onUserLeaveHint} callback will 19739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be accompanied by calls to {@link #onUserInteraction}. This 19749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ensures that your activity will be told of relevant user activity such 19759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as pulling down the notification pane and touching an item there. 19769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note that this callback will be invoked for the touch down action 19789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that begins a touch gesture, but may not be invoked for the touch-moved 19799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and touch-up actions that follow. 19809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 19819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onUserLeaveHint() 19829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 19839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onUserInteraction() { 19849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onWindowAttributesChanged(WindowManager.LayoutParams params) { 19879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Update window manager if: we have a view, that view is 19889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // attached to its parent (which will be a RootView), and 19899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // this activity is not embedded. 19909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 19919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project View decor = mDecor; 19929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (decor != null && decor.getParent() != null) { 19939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindowManager().updateViewLayout(decor, params); 19949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 19979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onContentChanged() { 19999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 20019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 20029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when the current {@link Window} of the activity gains or loses 20039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * focus. This is the best indicator of whether this activity is visible 200483fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * to the user. The default implementation clears the key tracking 200583fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * state, so should always be called. 20069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 200783fe3f559249451706957b1a5f660b2b8272f114Dianne Hackborn * <p>Note that this provides information about global focus state, which 20089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is managed independently of activity lifecycles. As such, while focus 20099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * changes will generally have some relation to lifecycle changes (an 20109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity that is stopped will not generally get window focus), you 20119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * should not rely on any particular order between the callbacks here and 20129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * those in the other lifecycle methods such as {@link #onResume}. 20139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 20149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>As a general rule, however, a resumed activity will have window 20159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * focus... unless it has displayed other dialogs or popups that take 20169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * input focus, in which case the activity itself will not have focus 20179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * when the other windows have it. Likewise, the system may display 20189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * system-level windows (such as the status bar notification panel or 20199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a system alert) which will temporarily take window input focus without 20209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * pausing the foreground activity. 20219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 20229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param hasFocus Whether the window of this activity has focus. 20239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 20249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #hasWindowFocus() 20259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onResume 20263be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * @see View#onWindowFocusChanged(boolean) 20279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 20289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onWindowFocusChanged(boolean hasFocus) { 20299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 20319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 20323be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * Called when the main window associated with the activity has been 20333be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * attached to the window manager. 20343be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * See {@link View#onAttachedToWindow() View.onAttachedToWindow()} 20353be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * for more information. 20363be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * @see View#onAttachedToWindow 20373be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn */ 20383be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn public void onAttachedToWindow() { 20393be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn } 20403be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn 20413be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn /** 20423be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * Called when the main window associated with the activity has been 20433be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * detached from the window manager. 20443be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * See {@link View#onDetachedFromWindow() View.onDetachedFromWindow()} 20453be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * for more information. 20463be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn * @see View#onDetachedFromWindow 20473be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn */ 20483be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn public void onDetachedFromWindow() { 20493be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn } 20503be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn 20513be63c09309b21c01b535271625d4c39045690e5Dianne Hackborn /** 20529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true if this activity's <em>main</em> window currently has window focus. 20539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Note that this is not the same as the view itself having focus. 20549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 20559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return True if this activity's main window currently has window focus. 20569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 20579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onWindowAttributesChanged(android.view.WindowManager.LayoutParams) 20589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 20599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean hasWindowFocus() { 20609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Window w = getWindow(); 20619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (w != null) { 20629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project View d = w.getDecorView(); 20639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (d != null) { 20649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return d.hasWindowFocus(); 20659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 20689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 20709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 20719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called to process key events. You can override this to intercept all 20729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * key events before they are dispatched to the window. Be sure to call 20739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this implementation for key events that should be handled normally. 20749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 20759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param event The key event. 20769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 20779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return boolean Return true if this event was consumed. 20789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 20799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean dispatchKeyEvent(KeyEvent event) { 20809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onUserInteraction(); 20818d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn Window win = getWindow(); 20828d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (win.superDispatchKeyEvent(event)) { 20839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 20849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20858d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn View decor = mDecor; 20868d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn if (decor == null) decor = win.getDecorView(); 20878d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn return event.dispatch(this, decor != null 20888d37426c754e9822feaa8c6cc0b7c13e8523e217Dianne Hackborn ? decor.getKeyDispatcherState() : null, this); 20899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 20909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 20919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 20929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called to process touch screen events. You can override this to 20939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * intercept all touch screen events before they are dispatched to the 20949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * window. Be sure to call this implementation for touch screen events 20959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that should be handled normally. 20969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 20979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param ev The touch screen event. 20989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 20999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return boolean Return true if this event was consumed. 21009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 21019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean dispatchTouchEvent(MotionEvent ev) { 21029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ev.getAction() == MotionEvent.ACTION_DOWN) { 21039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onUserInteraction(); 21049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (getWindow().superDispatchTouchEvent(ev)) { 21069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 21079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return onTouchEvent(ev); 21099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 21129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called to process trackball events. You can override this to 21139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * intercept all trackball events before they are dispatched to the 21149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * window. Be sure to call this implementation for trackball events 21159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that should be handled normally. 21169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 21179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param ev The trackball event. 21189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 21199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return boolean Return true if this event was consumed. 21209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 21219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean dispatchTrackballEvent(MotionEvent ev) { 21229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onUserInteraction(); 21239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (getWindow().superDispatchTrackballEvent(ev)) { 21249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 21259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return onTrackballEvent(ev); 21279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 212875986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov 212975986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { 213075986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov event.setClassName(getClass().getName()); 213175986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov event.setPackageName(getPackageName()); 213275986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov 213375986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov LayoutParams params = getWindow().getAttributes(); 2134980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy boolean isFullScreen = (params.width == LayoutParams.MATCH_PARENT) && 2135980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy (params.height == LayoutParams.MATCH_PARENT); 213675986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov event.setFullScreen(isFullScreen); 213775986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov 213875986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov CharSequence title = getTitle(); 213975986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov if (!TextUtils.isEmpty(title)) { 214075986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov event.getText().add(title); 214175986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov } 214275986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov 214375986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov return true; 214475986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov } 214575986cf9bc57ef11ad70f36fb77fbbf5d63af6ecsvetoslavganov 21469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 21479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Default implementation of 21489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window.Callback#onCreatePanelView} 21499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for activities. This 21509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * simply returns null so that all panel sub-windows will have the default 21519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * menu behavior. 21529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 21539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public View onCreatePanelView(int featureId) { 21549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 21559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 21589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Default implementation of 21599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window.Callback#onCreatePanelMenu} 21609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for activities. This calls through to the new 21619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onCreateOptionsMenu} method for the 21629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#FEATURE_OPTIONS_PANEL} panel, 21639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * so that subclasses of Activity don't need to deal with feature codes. 21649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 21659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onCreatePanelMenu(int featureId, Menu menu) { 21669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (featureId == Window.FEATURE_OPTIONS_PANEL) { 21679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return onCreateOptionsMenu(menu); 21689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 21709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 21739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Default implementation of 21749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window.Callback#onPreparePanel} 21759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for activities. This 21769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * calls through to the new {@link #onPrepareOptionsMenu} method for the 21779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#FEATURE_OPTIONS_PANEL} 21789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * panel, so that subclasses of 21799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Activity don't need to deal with feature codes. 21809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 21819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onPreparePanel(int featureId, View view, Menu menu) { 21829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (featureId == Window.FEATURE_OPTIONS_PANEL && menu != null) { 21839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean goforit = onPrepareOptionsMenu(menu); 21849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return goforit && menu.hasVisibleItems(); 21859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 21879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 21909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 21919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 21929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The default implementation returns true. 21939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 21949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onMenuOpened(int featureId, Menu menu) { 21959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 21969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 21979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 21989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 21999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Default implementation of 22009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window.Callback#onMenuItemSelected} 22019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for activities. This calls through to the new 22029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onOptionsItemSelected} method for the 22039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#FEATURE_OPTIONS_PANEL} 22049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * panel, so that subclasses of 22059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Activity don't need to deal with feature codes. 22069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 22079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onMenuItemSelected(int featureId, MenuItem item) { 22089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (featureId) { 22099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case Window.FEATURE_OPTIONS_PANEL: 22109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Put event logging here so it gets called even if subclass 22119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // doesn't call through to superclass's implmeentation of each 22129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // of these methods below 22139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EventLog.writeEvent(50000, 0, item.getTitleCondensed()); 22149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return onOptionsItemSelected(item); 22159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case Window.FEATURE_CONTEXT_MENU: 22179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EventLog.writeEvent(50000, 1, item.getTitleCondensed()); 22189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return onContextItemSelected(item); 22199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 22219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 22229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 22269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Default implementation of 22279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window.Callback#onPanelClosed(int, Menu)} for 22289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activities. This calls through to {@link #onOptionsMenuClosed(Menu)} 22299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * method for the {@link android.view.Window#FEATURE_OPTIONS_PANEL} panel, 22309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * so that subclasses of Activity don't need to deal with feature codes. 22319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * For context menus ({@link Window#FEATURE_CONTEXT_MENU}), the 22329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onContextMenuClosed(Menu)} will be called. 22339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 22349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onPanelClosed(int featureId, Menu menu) { 22359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (featureId) { 22369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case Window.FEATURE_OPTIONS_PANEL: 22379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onOptionsMenuClosed(menu); 22389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 22399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case Window.FEATURE_CONTEXT_MENU: 22419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onContextMenuClosed(menu); 22429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 22439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 22479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Initialize the contents of the Activity's standard options menu. You 22489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * should place your menu items in to <var>menu</var>. 22499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This is only called once, the first time the options menu is 22519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * displayed. To update the menu every time it is displayed, see 22529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onPrepareOptionsMenu}. 22539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The default implementation populates the menu with standard system 22559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * menu items. These are placed in the {@link Menu#CATEGORY_SYSTEM} group so that 22569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * they will be correctly ordered with application-defined menu items. 22579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Deriving classes should always call through to the base implementation. 22589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>You can safely hold on to <var>menu</var> (and any items created 22609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from it), making modifications to it as desired, until the next 22619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * time onCreateOptionsMenu() is called. 22629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>When you add items to the menu, you can implement the Activity's 22649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onOptionsItemSelected} method to handle them there. 22659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param menu The options menu in which you place your items. 22679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return You must return true for the menu to be displayed; 22699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if you return false it will not be shown. 22709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onPrepareOptionsMenu 22729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onOptionsItemSelected 22739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 22749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onCreateOptionsMenu(Menu menu) { 22759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent != null) { 22769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParent.onCreateOptionsMenu(menu); 22779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 22799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 22829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Prepare the Screen's standard options menu to be displayed. This is 22839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * called right before the menu is shown, every time it is shown. You can 22849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * use this method to efficiently enable/disable items or otherwise 22859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * dynamically modify the contents. 22869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The default implementation updates the system menu items based on the 22889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity's state. Deriving classes should always call through to the 22899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * base class implementation. 22909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param menu The options menu as last shown or first initialized by 22929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onCreateOptionsMenu(). 22939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return You must return true for the menu to be displayed; 22959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if you return false it will not be shown. 22969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 22979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onCreateOptionsMenu 22989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 22999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onPrepareOptionsMenu(Menu menu) { 23009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent != null) { 23019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParent.onPrepareOptionsMenu(menu); 23029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 23049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 23079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This hook is called whenever an item in your options menu is selected. 23089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The default implementation simply returns false to have the normal 23099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * processing happen (calling the item's Runnable or sending a message to 23109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * its Handler as appropriate). You can use this method for any items 23119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for which you would like to do processing without those other 23129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * facilities. 23139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 23149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Derived classes should call through to the base class for it to 23159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * perform the default menu handling. 23169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 23179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param item The menu item that was selected. 23189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 23199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return boolean Return false to allow normal menu processing to 23209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * proceed, true to consume it here. 23219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 23229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onCreateOptionsMenu 23239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 23249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onOptionsItemSelected(MenuItem item) { 23259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent != null) { 23269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParent.onOptionsItemSelected(item); 23279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 23299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 23329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This hook is called whenever the options menu is being closed (either by the user canceling 23339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the menu with the back/menu button, or when an item is selected). 23349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 23359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param menu The options menu as last shown or first initialized by 23369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onCreateOptionsMenu(). 23379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 23389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onOptionsMenuClosed(Menu menu) { 23399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent != null) { 23409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent.onOptionsMenuClosed(menu); 23419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 23459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Programmatically opens the options menu. If the options menu is already 23469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * open, this method does nothing. 23479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 23489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void openOptionsMenu() { 23499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.openPanel(Window.FEATURE_OPTIONS_PANEL, null); 23509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 23539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Progammatically closes the options menu. If the options menu is already 23549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * closed, this method does nothing. 23559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 23569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void closeOptionsMenu() { 23579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.closePanel(Window.FEATURE_OPTIONS_PANEL); 23589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 23619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when a context menu for the {@code view} is about to be shown. 23629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unlike {@link #onCreateOptionsMenu(Menu)}, this will be called every 23639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * time the context menu is about to be shown and should be populated for 23649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the view (or item inside the view for {@link AdapterView} subclasses, 23659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this can be found in the {@code menuInfo})). 23669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 23679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use {@link #onContextItemSelected(android.view.MenuItem)} to know when an 23689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * item has been selected. 23699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 23709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * It is not safe to hold onto the context menu after this method returns. 23719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@inheritDoc} 23729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 23739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 23749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 23779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Registers a context menu to be shown for the given view (multiple views 23789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can show the context menu). This method will set the 23799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link OnCreateContextMenuListener} on the view to this activity, so 23809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onCreateContextMenu(ContextMenu, View, ContextMenuInfo)} will be 23819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * called when it is time to show the context menu. 23829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 23839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #unregisterForContextMenu(View) 23849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The view that should show a context menu. 23859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 23869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void registerForContextMenu(View view) { 23879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project view.setOnCreateContextMenuListener(this); 23889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 23919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Prevents a context menu to be shown for the given view. This method will remove the 23929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link OnCreateContextMenuListener} on the view. 23939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 23949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #registerForContextMenu(View) 23959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The view that should stop showing a context menu. 23969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 23979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void unregisterForContextMenu(View view) { 23989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project view.setOnCreateContextMenuListener(null); 23999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 24029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Programmatically opens the context menu for a particular {@code view}. 24039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The {@code view} should have been added via 24049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #registerForContextMenu(View)}. 24059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 24069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param view The view to show the context menu for. 24079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 24089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void openContextMenu(View view) { 24099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project view.showContextMenu(); 24109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 24139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Programmatically closes the most recently opened context menu, if showing. 24149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 24159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void closeContextMenu() { 24169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.closePanel(Window.FEATURE_CONTEXT_MENU); 24179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 24209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This hook is called whenever an item in a context menu is selected. The 24219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * default implementation simply returns false to have the normal processing 24229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * happen (calling the item's Runnable or sending a message to its Handler 24239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * as appropriate). You can use this method for any items for which you 24249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * would like to do processing without those other facilities. 24259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 24269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use {@link MenuItem#getMenuInfo()} to get extra information set by the 24279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * View that added this menu item. 24289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 24299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Derived classes should call through to the base class for it to perform 24309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the default menu handling. 24319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 24329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param item The context menu item that was selected. 24339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return boolean Return false to allow normal context menu processing to 24349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * proceed, true to consume it here. 24359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 24369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onContextItemSelected(MenuItem item) { 24379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent != null) { 24389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParent.onContextItemSelected(item); 24399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 24419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 24449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This hook is called whenever the context menu is being closed (either by 24459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the user canceling the menu with the back/menu button, or when an item is 24469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * selected). 24479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 24489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param menu The context menu that is being closed. 24499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 24509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onContextMenuClosed(Menu menu) { 24519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent != null) { 24529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent.onContextMenuClosed(menu); 24539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 24559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 24578ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @deprecated Old no-arguments version of {@link #onCreateDialog(int, Bundle)}. 24588ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn */ 24598ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn @Deprecated 24608ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn protected Dialog onCreateDialog(int id) { 24618ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn return null; 24628ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn } 24638ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn 24648ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn /** 24659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Callback for creating dialogs that are managed (saved and restored) for you 24668ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * by the activity. The default implementation calls through to 24678ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * {@link #onCreateDialog(int)} for compatibility. 24689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 24698ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * <p>If you use {@link #showDialog(int)}, the activity will call through to 24709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this method the first time, and hang onto it thereafter. Any dialog 24719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that is created by this method will automatically be saved and restored 24729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for you, including whether it is showing. 24739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 24748ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * <p>If you would like the activity to manage saving and restoring dialogs 24759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for you, you should override this method and handle any ids that are 24769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * passed to {@link #showDialog}. 24779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 24788ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * <p>If you would like an opportunity to prepare your dialog before it is shown, 24798ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * override {@link #onPrepareDialog(int, Dialog, Bundle)}. 24809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 24819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param id The id of the dialog. 24828ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @param args The dialog arguments provided to {@link #showDialog(int, Bundle)}. 24838ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @return The dialog. If you return null, the dialog will not be created. 24849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 24858ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #onPrepareDialog(int, Dialog, Bundle) 24868ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #showDialog(int, Bundle) 24879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #dismissDialog(int) 24889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #removeDialog(int) 24899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 24908ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn protected Dialog onCreateDialog(int id, Bundle args) { 24918ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn return onCreateDialog(id); 24928ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn } 24938ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn 24948ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn /** 24958ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @deprecated Old no-arguments version of 24968ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * {@link #onPrepareDialog(int, Dialog, Bundle)}. 24978ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn */ 24988ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn @Deprecated 24998ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn protected void onPrepareDialog(int id, Dialog dialog) { 25008ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn dialog.setOwnerActivity(this); 25019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 25049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Provides an opportunity to prepare a managed dialog before it is being 25058ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * shown. The default implementation calls through to 25068ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * {@link #onPrepareDialog(int, Dialog)} for compatibility. 25078ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * 25089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 25099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Override this if you need to update a managed dialog based on the state 25109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of the application each time it is shown. For example, a time picker 25119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * dialog might want to be updated with the current time. You should call 25129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * through to the superclass's implementation. The default implementation 25139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will set this Activity as the owner activity on the Dialog. 25149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param id The id of the managed dialog. 25169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dialog The dialog. 25178ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @param args The dialog arguments provided to {@link #showDialog(int, Bundle)}. 25188ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #onCreateDialog(int, Bundle) 25199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #showDialog(int) 25209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #dismissDialog(int) 25219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #removeDialog(int) 25229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 25238ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn protected void onPrepareDialog(int id, Dialog dialog, Bundle args) { 25248ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn onPrepareDialog(id, dialog); 25259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 25288ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * Simple version of {@link #showDialog(int, Bundle)} that does not 25298ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * take any arguments. Simply calls {@link #showDialog(int, Bundle)} 25308ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * with null arguments. 25318ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn */ 25328ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn public final void showDialog(int id) { 25338ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn showDialog(id, null); 25348ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn } 25358ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn 25368ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn /** 25378ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * Show a dialog managed by this activity. A call to {@link #onCreateDialog(int, Bundle)} 25389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will be made with the same id the first time this is called for a given 25399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * id. From thereafter, the dialog will be automatically saved and restored. 25409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25418ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * <p>Each time a dialog is shown, {@link #onPrepareDialog(int, Dialog, Bundle)} will 25429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be made to provide an opportunity to do any timely preparation. 25439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param id The id of the managed dialog. 25458ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @param args Arguments to pass through to the dialog. These will be saved 25468ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * and restored for you. Note that if the dialog is already created, 25478ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * {@link #onCreateDialog(int, Bundle)} will not be called with the new 25488ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * arguments but {@link #onPrepareDialog(int, Dialog, Bundle)} will be. 2549d47c6ed4a9f2b5bd31f6c806b74701428efe458bDianne Hackborn * If you need to rebuild the dialog, call {@link #removeDialog(int)} first. 25508ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @return Returns true if the Dialog was created; false is returned if 25518ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * it is not created because {@link #onCreateDialog(int, Bundle)} returns false. 25528ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * 255337296dc4edae8d1383179e956dff2ecf806ac166Joe Onorato * @see Dialog 25548ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #onCreateDialog(int, Bundle) 25558ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #onPrepareDialog(int, Dialog, Bundle) 25569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #dismissDialog(int) 25579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #removeDialog(int) 25589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 25598ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn public final boolean showDialog(int id, Bundle args) { 25609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mManagedDialogs == null) { 25618ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn mManagedDialogs = new SparseArray<ManagedDialog>(); 25629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25638ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn ManagedDialog md = mManagedDialogs.get(id); 25648ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn if (md == null) { 25658ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md = new ManagedDialog(); 25668ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md.mDialog = createDialog(id, null, args); 25678ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn if (md.mDialog == null) { 25688ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn return false; 25698ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn } 25708ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn mManagedDialogs.put(id, md); 25719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25738ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md.mArgs = args; 25748ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn onPrepareDialog(id, md.mDialog, args); 25758ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md.mDialog.show(); 25768ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn return true; 25779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 25809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Dismiss a dialog that was previously shown via {@link #showDialog(int)}. 25819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param id The id of the managed dialog. 25839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws IllegalArgumentException if the id was not previously shown via 25859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #showDialog(int)}. 25869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 25878ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #onCreateDialog(int, Bundle) 25888ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #onPrepareDialog(int, Dialog, Bundle) 25899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #showDialog(int) 25909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #removeDialog(int) 25919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 25929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void dismissDialog(int id) { 25939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mManagedDialogs == null) { 25949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw missingDialog(id); 25959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 25968ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn 25978ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn final ManagedDialog md = mManagedDialogs.get(id); 25988ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn if (md == null) { 25999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw missingDialog(id); 26009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26018ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md.mDialog.dismiss(); 26029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 26049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 26059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Creates an exception to throw if a user passed in a dialog id that is 26069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * unexpected. 26079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 26089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IllegalArgumentException missingDialog(int id) { 26099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new IllegalArgumentException("no dialog with id " + id + " was ever " 26109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + "shown via Activity#showDialog"); 26119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 26139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 26149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Removes any internal references to a dialog managed by this Activity. 26159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If the dialog is showing, it will dismiss it as part of the clean up. 26169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26178ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * <p>This can be useful if you know that you will never show a dialog again and 26189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * want to avoid the overhead of saving and restoring it in the future. 26199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param id The id of the managed dialog. 26219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26228ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #onCreateDialog(int, Bundle) 26238ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn * @see #onPrepareDialog(int, Dialog, Bundle) 26249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #showDialog(int) 26259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #dismissDialog(int) 26269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 26279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void removeDialog(int id) { 26289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mManagedDialogs == null) { 26299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 26309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 26328ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn final ManagedDialog md = mManagedDialogs.get(id); 26338ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn if (md == null) { 26349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 26359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 26378ea138cbf12b140d43fd81f4f12fe1a9234f1f25Dianne Hackborn md.mDialog.dismiss(); 26389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mManagedDialogs.remove(id); 26399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 26419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 26429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This hook is called when the user signals the desire to start a search. 26439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26446266e40a754d82afa717ef068898c8418a0bb5c3Bjorn Bringert * <p>You can use this function as a simple way to launch the search UI, in response to a 26456266e40a754d82afa717ef068898c8418a0bb5c3Bjorn Bringert * menu item, search button, or other widgets within your activity. Unless overidden, 26466266e40a754d82afa717ef068898c8418a0bb5c3Bjorn Bringert * calling this function is the same as calling 26476266e40a754d82afa717ef068898c8418a0bb5c3Bjorn Bringert * {@link #startSearch startSearch(null, false, null, false)}, which launches 26486266e40a754d82afa717ef068898c8418a0bb5c3Bjorn Bringert * search for the current activity as specified in its manifest, see {@link SearchManager}. 26499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>You can override this function to force global search, e.g. in response to a dedicated 26519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * search key, or to block search entirely (by simply returning false). 26529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26536266e40a754d82afa717ef068898c8418a0bb5c3Bjorn Bringert * @return Returns {@code true} if search launched, and {@code false} if activity blocks it. 26546266e40a754d82afa717ef068898c8418a0bb5c3Bjorn Bringert * The default implementation always returns {@code true}. 26559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.app.SearchManager 26579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 26589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onSearchRequested() { 26599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startSearch(null, false, null, false); 26609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 26619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 26639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 26649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This hook is called to launch the search UI. 26659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>It is typically called from onSearchRequested(), either directly from 26679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Activity.onSearchRequested() or from an overridden version in any given 26689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Activity. If your goal is simply to activate search, it is preferred to call 26699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onSearchRequested(), which may have been overriden elsewhere in your Activity. If your goal 26709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is to inject specific data such as context data, it is preferred to <i>override</i> 26719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onSearchRequested(), so that any callers to it will benefit from the override. 26729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param initialQuery Any non-null non-empty string will be inserted as 26749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * pre-entered text in the search query box. 26759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param selectInitialQuery If true, the intial query will be preselected, which means that 26769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * any further typing will replace it. This is useful for cases where an entire pre-formed 26779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * query is being inserted. If false, the selection point will be placed at the end of the 26789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * inserted query. This is useful when the inserted query is text that the user entered, 26799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and the user would expect to be able to keep typing. <i>This parameter is only meaningful 26809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if initialQuery is a non-empty string.</i> 26819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param appSearchData An application can insert application-specific 26829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * context here, in order to improve quality or specificity of its own 26839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * searches. This data will be returned with SEARCH intent(s). Null if 26849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * no extra data is required. 26859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param globalSearch If false, this will only launch the search that has been specifically 26869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * defined by the application (which is usually defined as a local search). If no default 2687cfa419b754332e12f8cd45244c2f3bee9d6a74bbMike LeBeau * search is defined in the current application or activity, global search will be launched. 26889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If true, this will always launch a platform-global (e.g. web-based) search instead. 26899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.app.SearchManager 26919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #onSearchRequested 26929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 26939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void startSearch(String initialQuery, boolean selectInitialQuery, 26949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bundle appSearchData, boolean globalSearch) { 2695b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn ensureSearchManager(); 26968d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert mSearchManager.startSearch(initialQuery, selectInitialQuery, getComponentName(), 26979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project appSearchData, globalSearch); 26989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 26999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 27009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2701d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen * Similar to {@link #startSearch}, but actually fires off the search query after invoking 2702d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen * the search dialog. Made available for testing purposes. 2703d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen * 2704d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen * @param query The query to trigger. If empty, the request will be ignored. 2705d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen * @param appSearchData An application can insert application-specific 2706d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen * context here, in order to improve quality or specificity of its own 2707d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen * searches. This data will be returned with SEARCH intent(s). Null if 2708d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen * no extra data is required. 2709d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen */ 2710b782a2f4f0a3072f2677f6f10fb255c77468ae66Bjorn Bringert public void triggerSearch(String query, Bundle appSearchData) { 2711d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen ensureSearchManager(); 2712b782a2f4f0a3072f2677f6f10fb255c77468ae66Bjorn Bringert mSearchManager.triggerSearch(query, getComponentName(), appSearchData); 2713d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen } 2714d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen 2715d2d6014f715f12f6263f61ba3eeb6f8cba6d0fa6krosaen /** 27169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Request that key events come to this activity. Use this if your 27179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity has no views with focus, but the activity still wants 27189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a chance to process key events. 27199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 27209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.Window#takeKeyEvents 27219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 27229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void takeKeyEvents(boolean get) { 27239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().takeKeyEvents(get); 27249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 27259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 27269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 27279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Enable extended window features. This is a convenience for calling 27289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#requestFeature getWindow().requestFeature()}. 27299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 27309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param featureId The desired feature as defined in 27319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window}. 27329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns true if the requested feature is supported and now 27339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * enabled. 27349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 27359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.Window#requestFeature 27369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 27379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean requestWindowFeature(int featureId) { 27389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getWindow().requestFeature(featureId); 27399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 27409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 27419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 27429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convenience for calling 27439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#setFeatureDrawableResource}. 27449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 27459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setFeatureDrawableResource(int featureId, int resId) { 27469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureDrawableResource(featureId, resId); 27479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 27489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 27499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 27509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convenience for calling 27519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#setFeatureDrawableUri}. 27529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 27539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setFeatureDrawableUri(int featureId, Uri uri) { 27549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureDrawableUri(featureId, uri); 27559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 27569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 27579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 27589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convenience for calling 27599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#setFeatureDrawable(int, Drawable)}. 27609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 27619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setFeatureDrawable(int featureId, Drawable drawable) { 27629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureDrawable(featureId, drawable); 27639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 27649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 27659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 27669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convenience for calling 27679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#setFeatureDrawableAlpha}. 27689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 27699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setFeatureDrawableAlpha(int featureId, int alpha) { 27709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureDrawableAlpha(featureId, alpha); 27719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 27729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 27739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 27749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Convenience for calling 27759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.view.Window#getLayoutInflater}. 27769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 27779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public LayoutInflater getLayoutInflater() { 27789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getWindow().getLayoutInflater(); 27799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 27809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 27819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 27829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a {@link MenuInflater} with this context. 27839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 27849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public MenuInflater getMenuInflater() { 27859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new MenuInflater(this); 27869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 27879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 27889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2789bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn protected void onApplyThemeResource(Resources.Theme theme, int resid, 2790bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn boolean first) { 27919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 27929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.onApplyThemeResource(theme, resid, first); 27939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 27949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 27959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project theme.setTo(mParent.getTheme()); 27969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (Exception e) { 27979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 27989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 27999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project theme.applyStyle(resid, false); 28009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 28049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Launch an activity for which you would like a result when it finished. 28059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When this activity exits, your 28069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onActivityResult() method will be called with the given requestCode. 28079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Using a negative requestCode is the same as calling 28089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #startActivity} (the activity is not launched as a sub-activity). 28099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 28109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note that this method should only be used with Intent protocols 28119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that are defined to return a result. In other protocols (such as 28129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Intent#ACTION_MAIN} or {@link Intent#ACTION_VIEW}), you may 28139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not get the result when you expect. For example, if the activity you 28149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are launching uses the singleTask launch mode, it will not run in your 28159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * task and thus you will immediately receive a cancel result. 28169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 28179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>As a special case, if you call startActivityForResult() with a requestCode 28189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * >= 0 during the initial onCreate(Bundle savedInstanceState)/onResume() of your 28199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity, then your window will not be displayed until a result is 28209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returned back from the started activity. This is to avoid visible 28219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * flickering when redirecting to another activity. 28229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 28239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This method throws {@link android.content.ActivityNotFoundException} 28249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if there was no Activity found to run the given Intent. 28259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 28269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param intent The intent to start. 28279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param requestCode If >= 0, this code will be returned in 28289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onActivityResult() when the activity exits. 28299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 28309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws android.content.ActivityNotFoundException 28319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 28329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startActivity 28339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 28349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void startActivityForResult(Intent intent, int requestCode) { 28359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 28369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Instrumentation.ActivityResult ar = 28379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentation.execStartActivity( 28389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this, mMainThread.getApplicationThread(), mToken, this, 28399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project intent, requestCode); 28409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ar != null) { 28419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMainThread.sendActivityResult( 28429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mToken, mEmbeddedID, requestCode, ar.getResultCode(), 28439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ar.getResultData()); 28449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (requestCode >= 0) { 28469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // If this start is requesting a result, we can avoid making 28479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // the activity visible until the result is received. Setting 28489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // this code during onCreate(Bundle savedInstanceState) or onResume() will keep the 28499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // activity hidden during this time, to avoid flickering. 28509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // This can only be done when a result is requested because 28519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // that guarantees we will get information back when the 28529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // activity is finished, no matter what happens to it. 28539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStartedActivity = true; 28549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 28569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent.startActivityFromChild(this, intent, requestCode); 28579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 28599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2861bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * Like {@link #startActivityForResult(Intent, int)}, but allowing you 2862fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * to use a IntentSender to describe the activity to be started. If 2863fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * the IntentSender is for an activity, that activity will be started 2864fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * as if you had called the regular {@link #startActivityForResult(Intent, int)} 2865fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * here; otherwise, its associated action will be executed (such as 2866fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * sending a broadcast) as if you had called 2867fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * {@link IntentSender#sendIntent IntentSender.sendIntent} on it. 2868fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * 2869fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * @param intent The IntentSender to launch. 2870bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * @param requestCode If >= 0, this code will be returned in 2871bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * onActivityResult() when the activity exits. 2872bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * @param fillInIntent If non-null, this will be provided as the 2873fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * intent parameter to {@link IntentSender#sendIntent}. 2874fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * @param flagsMask Intent flags in the original IntentSender that you 2875bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * would like to change. 2876bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * @param flagsValues Desired values for any bits set in 2877bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * <var>flagsMask</var> 2878fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * @param extraFlags Always set to 0. 2879bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn */ 2880fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn public void startIntentSenderForResult(IntentSender intent, int requestCode, 2881fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags) 2882fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn throws IntentSender.SendIntentException { 2883bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn if (mParent == null) { 2884fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn startIntentSenderForResultInner(intent, requestCode, fillInIntent, 2885bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn flagsMask, flagsValues, this); 2886bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } else { 2887fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn mParent.startIntentSenderFromChild(this, intent, requestCode, 2888fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn fillInIntent, flagsMask, flagsValues, extraFlags); 2889bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 2890bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 2891bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn 2892fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn private void startIntentSenderForResultInner(IntentSender intent, int requestCode, 2893bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn Intent fillInIntent, int flagsMask, int flagsValues, Activity activity) 2894fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn throws IntentSender.SendIntentException { 2895bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn try { 2896bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn String resolvedType = null; 2897bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn if (fillInIntent != null) { 2898bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn resolvedType = fillInIntent.resolveTypeIfNeeded(getContentResolver()); 2899bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 2900bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn int result = ActivityManagerNative.getDefault() 2901fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn .startActivityIntentSender(mMainThread.getApplicationThread(), intent, 2902bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn fillInIntent, resolvedType, mToken, activity.mEmbeddedID, 2903bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn requestCode, flagsMask, flagsValues); 2904bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn if (result == IActivityManager.START_CANCELED) { 2905fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn throw new IntentSender.SendIntentException(); 2906bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 2907bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn Instrumentation.checkStartActivityResult(result, null); 2908bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } catch (RemoteException e) { 2909bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 2910bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn if (requestCode >= 0) { 2911bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn // If this start is requesting a result, we can avoid making 2912bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn // the activity visible until the result is received. Setting 2913bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn // this code during onCreate(Bundle savedInstanceState) or onResume() will keep the 2914bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn // activity hidden during this time, to avoid flickering. 2915bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn // This can only be done when a result is requested because 2916bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn // that guarantees we will get information back when the 2917bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn // activity is finished, no matter what happens to it. 2918bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn mStartedActivity = true; 2919bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 2920bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 2921bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn 2922bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn /** 29239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Launch a new activity. You will not receive any information about when 29249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the activity exits. This implementation overrides the base version, 29259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * providing information about 29269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the activity performing the launch. Because of this additional 29279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * information, the {@link Intent#FLAG_ACTIVITY_NEW_TASK} launch flag is not 29289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * required; if not specified, the new activity will be added to the 29299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * task of the caller. 29309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 29319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This method throws {@link android.content.ActivityNotFoundException} 29329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if there was no Activity found to run the given Intent. 29339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 29349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param intent The intent to start. 29359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 29369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws android.content.ActivityNotFoundException 29379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 29389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startActivityForResult 29399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 29409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 29419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void startActivity(Intent intent) { 29429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startActivityForResult(intent, -1); 29439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 29449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 29459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2946fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * Like {@link #startActivity(Intent)}, but taking a IntentSender 2947bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * to start; see 2948ae22c05b91d1e7a458066792eb5cfc0974c1be9eDianne Hackborn * {@link #startIntentSenderForResult(IntentSender, int, Intent, int, int, int)} 2949bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * for more information. 2950bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * 2951fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * @param intent The IntentSender to launch. 2952bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * @param fillInIntent If non-null, this will be provided as the 2953fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * intent parameter to {@link IntentSender#sendIntent}. 2954fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * @param flagsMask Intent flags in the original IntentSender that you 2955bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * would like to change. 2956bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * @param flagsValues Desired values for any bits set in 2957bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * <var>flagsMask</var> 2958fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * @param extraFlags Always set to 0. 2959bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn */ 2960fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn public void startIntentSender(IntentSender intent, 2961fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags) 2962fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn throws IntentSender.SendIntentException { 2963fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn startIntentSenderForResult(intent, -1, fillInIntent, flagsMask, 2964fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn flagsValues, extraFlags); 2965bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 2966bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn 2967bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn /** 29689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A special variation to launch an activity only if a new activity 29699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * instance is needed to handle the given Intent. In other words, this is 29709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * just like {@link #startActivityForResult(Intent, int)} except: if you are 29719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * using the {@link Intent#FLAG_ACTIVITY_SINGLE_TOP} flag, or 29729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * singleTask or singleTop 29739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.styleable#AndroidManifestActivity_launchMode launchMode}, 29749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and the activity 29759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that handles <var>intent</var> is the same as your currently running 29769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity, then a new instance is not needed. In this case, instead of 29779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the normal behavior of calling {@link #onNewIntent} this function will 29789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * return and you can handle the Intent yourself. 29799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 29809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This function can only be called from a top-level activity; if it is 29819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * called from a child activity, a runtime exception will be thrown. 29829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 29839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param intent The intent to start. 29849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param requestCode If >= 0, this code will be returned in 29859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onActivityResult() when the activity exits, as described in 29869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #startActivityForResult}. 29879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 29889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return If a new activity was launched then true is returned; otherwise 29899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * false is returned and you must handle the Intent yourself. 29909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 29919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startActivity 29929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startActivityForResult 29939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 29949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean startActivityIfNeeded(Intent intent, int requestCode) { 29959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 29969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int result = IActivityManager.START_RETURN_INTENT_TO_CALLER; 29979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 29989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = ActivityManagerNative.getDefault() 29999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .startActivity(mMainThread.getApplicationThread(), 30009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project intent, intent.resolveTypeIfNeeded( 30019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getContentResolver()), 30029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project null, 0, 30039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mToken, mEmbeddedID, requestCode, true, false); 30049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 30059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 30069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 30089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Instrumentation.checkStartActivityResult(result, intent); 30099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 30109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (requestCode >= 0) { 30119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // If this start is requesting a result, we can avoid making 30129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // the activity visible until the result is received. Setting 30139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // this code during onCreate(Bundle savedInstanceState) or onResume() will keep the 30149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // activity hidden during this time, to avoid flickering. 30159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // This can only be done when a result is requested because 30169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // that guarantees we will get information back when the 30179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // activity is finished, no matter what happens to it. 30189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStartedActivity = true; 30199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return result != IActivityManager.START_RETURN_INTENT_TO_CALLER; 30219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 30239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new UnsupportedOperationException( 30249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "startActivityIfNeeded can only be called from a top-level activity"); 30259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 30279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 30289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Special version of starting an activity, for use when you are replacing 30299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * other activity components. You can use this to hand the Intent off 30309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the next Activity that can handle it. You typically call this in 30319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onCreate} with the Intent returned by {@link #getIntent}. 30329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 30339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param intent The intent to dispatch to the next activity. For 30349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * correct behavior, this must be the same as the Intent that started 30359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * your own activity; the only changes you can make are to the extras 30369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * inside of it. 30379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 30389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns a boolean indicating whether there was another Activity 30399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to start: true if there was a next activity to start, false if there 30409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * wasn't. In general, if true is returned you will then want to call 30419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * finish() on yourself. 30429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 30439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean startNextMatchingActivity(Intent intent) { 30449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 30459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 30469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault() 30479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .startNextMatchingActivity(mToken, intent); 30489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 30499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 30509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 30529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 30549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new UnsupportedOperationException( 30559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "startNextMatchingActivity can only be called from a top-level activity"); 30569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 30589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 30599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is called when a child activity of this one calls its 30609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #startActivity} or {@link #startActivityForResult} method. 30619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 30629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>This method throws {@link android.content.ActivityNotFoundException} 30639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if there was no Activity found to run the given Intent. 30649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 30659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param child The activity making the call. 30669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param intent The intent to start. 30679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param requestCode Reply request code. < 0 if reply is not requested. 30689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 30699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws android.content.ActivityNotFoundException 30709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 30719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startActivity 30729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startActivityForResult 30739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 30749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void startActivityFromChild(Activity child, Intent intent, 30759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int requestCode) { 30769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Instrumentation.ActivityResult ar = 30779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentation.execStartActivity( 30789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this, mMainThread.getApplicationThread(), mToken, child, 30799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project intent, requestCode); 30809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ar != null) { 30819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMainThread.sendActivityResult( 30829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mToken, child.mEmbeddedID, requestCode, 30839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ar.getResultCode(), ar.getResultData()); 30849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 30869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 30879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3088bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * Like {@link #startActivityFromChild(Activity, Intent, int)}, but 3089fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn * taking a IntentSender; see 3090ae22c05b91d1e7a458066792eb5cfc0974c1be9eDianne Hackborn * {@link #startIntentSenderForResult(IntentSender, int, Intent, int, int, int)} 3091bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn * for more information. 3092bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn */ 3093fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn public void startIntentSenderFromChild(Activity child, IntentSender intent, 3094fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn int requestCode, Intent fillInIntent, int flagsMask, int flagsValues, 3095fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn int extraFlags) 3096fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn throws IntentSender.SendIntentException { 3097fa82f22f1d8c4c828bdf9b670006be4f4fec772eDianne Hackborn startIntentSenderForResultInner(intent, requestCode, fillInIntent, 3098bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn flagsMask, flagsValues, child); 3099bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn } 3100bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn 3101bcbcaa7edd32ba67c6290d79f7e7821c4b5b39acDianne Hackborn /** 31023b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn * Call immediately after one of the flavors of {@link #startActivity(Intent)} 31033b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn * or {@link #finish} to specify an explicit transition animation to 31043b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn * perform next. 31053b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn * @param enterAnim A resource ID of the animation resource to use for 31068b571a817cc953ce96750f440645f104c7f55157Dianne Hackborn * the incoming activity. Use 0 for no animation. 31073b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn * @param exitAnim A resource ID of the animation resource to use for 31088b571a817cc953ce96750f440645f104c7f55157Dianne Hackborn * the outgoing activity. Use 0 for no animation. 31093b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn */ 31103b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn public void overridePendingTransition(int enterAnim, int exitAnim) { 31113b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn try { 31123b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn ActivityManagerNative.getDefault().overridePendingTransition( 31133b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn mToken, getPackageName(), enterAnim, exitAnim); 31143b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn } catch (RemoteException e) { 31153b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn } 31163b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn } 31173b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn 31183b3e145d3c41fd68974e08f799b1fd1f8f060cf0Dianne Hackborn /** 31199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Call this to set the result that your activity will return to its 31209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * caller. 31219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 31229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param resultCode The result code to propagate back to the originating 31239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity, often RESULT_CANCELED or RESULT_OK 31249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 31259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #RESULT_CANCELED 31269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #RESULT_OK 31279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #RESULT_FIRST_USER 31289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setResult(int, Intent) 31299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 31309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setResult(int resultCode) { 31319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (this) { 31329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mResultCode = resultCode; 31339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mResultData = null; 31349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 31359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 31369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 31379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 31389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Call this to set the result that your activity will return to its 31399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * caller. 31409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 31419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param resultCode The result code to propagate back to the originating 31429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity, often RESULT_CANCELED or RESULT_OK 31439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param data The data to propagate back to the originating activity. 31449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 31459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #RESULT_CANCELED 31469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #RESULT_OK 31479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #RESULT_FIRST_USER 31489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setResult(int) 31499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 31509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setResult(int resultCode, Intent data) { 31519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (this) { 31529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mResultCode = resultCode; 31539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mResultData = data; 31549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 31559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 31569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 31579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 31589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the name of the package that invoked this activity. This is who 31599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the data in {@link #setResult setResult()} will be sent to. You can 31609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * use this information to validate that the recipient is allowed to 31619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * receive the data. 31629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 31639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note: if the calling activity is not expecting a result (that is it 31649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * did not use the {@link #startActivityForResult} 31659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * form that includes a request code), then the calling package will be 31669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * null. 31679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 31689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The package of the activity that will receive your 31699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * reply, or null if none. 31709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 31719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getCallingPackage() { 31729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 31739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault().getCallingPackage(mToken); 31749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 31759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 31769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 31779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 31789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 31799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 31809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the name of the activity that invoked this activity. This is 31819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * who the data in {@link #setResult setResult()} will be sent to. You 31829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can use this information to validate that the recipient is allowed to 31839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * receive the data. 31849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 31859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>Note: if the calling activity is not expecting a result (that is it 31869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * did not use the {@link #startActivityForResult} 31879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * form that includes a request code), then the calling package will be 31889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * null. 31899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 31909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return String The full name of the activity that will receive your 31919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * reply, or null if none. 31929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 31939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ComponentName getCallingActivity() { 31949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 31959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault().getCallingActivity(mToken); 31969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 31979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 31989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 31999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 32009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 32019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 32029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Control whether this activity's main window is visible. This is intended 32039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * only for the special case of an activity that is not going to show a 32049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * UI itself, but can't just finish prior to onResume() because it needs 32059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to wait for a service binding or such. Setting this to false allows 32069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you to prevent your UI from being shown during that time. 32079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 32089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The default value for this is taken from the 32099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.attr#windowNoDisplay} attribute of the activity's theme. 32109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 32119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setVisible(boolean visible) { 32129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mVisibleFromClient != visible) { 32139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mVisibleFromClient = visible; 32149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mVisibleFromServer) { 32159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (visible) makeVisible(); 32169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else mDecor.setVisibility(View.INVISIBLE); 32179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 32189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 32199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 32209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 32219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void makeVisible() { 32229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mWindowAdded) { 32239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ViewManager wm = getWindowManager(); 32249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wm.addView(mDecor, getWindow().getAttributes()); 32259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindowAdded = true; 32269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 32279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDecor.setVisibility(View.VISIBLE); 32289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 32299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 32309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 32319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Check to see whether this activity is in the process of finishing, 32329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * either because you called {@link #finish} on it or someone else 32339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * has requested that it finished. This is often used in 32349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onPause} to determine whether the activity is simply pausing or 32359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * completely finishing. 32369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 32379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return If the activity is finishing, returns true; else returns false. 32389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 32399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #finish 32409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 32419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isFinishing() { 32429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mFinished; 32439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 32449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 32459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 32469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Call this when your activity is done and should be closed. The 32479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ActivityResult is propagated back to whoever launched you via 32489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onActivityResult(). 32499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 32509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void finish() { 32519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 32529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int resultCode; 32539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Intent resultData; 32549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (this) { 32559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resultCode = mResultCode; 32569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project resultData = mResultData; 32579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 32589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (Config.LOGV) Log.v(TAG, "Finishing self: token=" + mToken); 32599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 32609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ActivityManagerNative.getDefault() 32619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .finishActivity(mToken, resultCode, resultData)) { 32629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFinished = true; 32639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 32649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 32659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 32669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 32679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 32689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent.finishFromChild(this); 32699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 32709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 32719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 32729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 32739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is called when a child activity of this one calls its 32749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #finish} method. The default implementation simply calls 32759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * finish() on this activity (the parent), finishing the entire group. 32769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 32779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param child The activity making the call. 32789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 32799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #finish 32809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 32819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void finishFromChild(Activity child) { 32829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project finish(); 32839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 32849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 32859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 32869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Force finish another activity that you had previously started with 32879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #startActivityForResult}. 32889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 32899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param requestCode The request code of the activity that you had 32909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * given to startActivityForResult(). If there are multiple 32919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activities started with this request code, they 32929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will all be finished. 32939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 32949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void finishActivity(int requestCode) { 32959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 32969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 32979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ActivityManagerNative.getDefault() 32989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .finishSubActivity(mToken, mEmbeddedID, requestCode); 32999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 33009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 33019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 33039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent.finishActivityFromChild(this, requestCode); 33049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 33079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 33089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is called when a child activity of this one calls its 33099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * finishActivity(). 33109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 33119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param child The activity making the call. 33129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param requestCode Request code that had been used to start the 33139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity. 33149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 33159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void finishActivityFromChild(Activity child, int requestCode) { 33169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 33179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ActivityManagerNative.getDefault() 33189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .finishSubActivity(mToken, child.mEmbeddedID, requestCode); 33199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 33209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 33219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 33249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 33259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called when an activity you launched exits, giving you the requestCode 33269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you started it with, the resultCode it returned, and any additional 33279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * data from it. The <var>resultCode</var> will be 33289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #RESULT_CANCELED} if the activity explicitly returned that, 33299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * didn't return any result, or crashed during its operation. 33309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 33319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>You will receive this call immediately before onResume() when your 33329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * activity is re-starting. 33339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 33349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param requestCode The integer request code originally supplied to 33359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * startActivityForResult(), allowing you to identify who this 33369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * result came from. 33379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param resultCode The integer result code returned by the child activity 33389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * through its setResult(). 33399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param data An Intent, which can return result data to the caller 33409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (various data can be attached to Intent "extras"). 33419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 33429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #startActivityForResult 33439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #createPendingResult 33449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setResult(int) 33459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 33469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onActivityResult(int requestCode, int resultCode, 33479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Intent data) { 33489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 33509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 33519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new PendingIntent object which you can hand to others 33529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for them to use to send result data back to your 33539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #onActivityResult} callback. The created object will be either 33549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * one-shot (becoming invalid after a result is sent back) or multiple 33559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (allowing any number of results to be sent through it). 33569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 33579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param requestCode Private request code for the sender that will be 33589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * associated with the result data when it is returned. The sender can not 33599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * modify this value, allowing you to identify incoming results. 33609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param data Default data to supply in the result, which may be modified 33619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * by the sender. 33629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param flags May be {@link PendingIntent#FLAG_ONE_SHOT PendingIntent.FLAG_ONE_SHOT}, 33639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PendingIntent#FLAG_NO_CREATE PendingIntent.FLAG_NO_CREATE}, 33649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PendingIntent#FLAG_CANCEL_CURRENT PendingIntent.FLAG_CANCEL_CURRENT}, 33659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PendingIntent#FLAG_UPDATE_CURRENT PendingIntent.FLAG_UPDATE_CURRENT}, 33669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or any of the flags as supported by 33679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link Intent#fillIn Intent.fillIn()} to control which unspecified parts 33689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of the intent that can be supplied when the actual send happens. 33699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 33709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns an existing or new PendingIntent matching the given 33719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * parameters. May return null only if 33729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link PendingIntent#FLAG_NO_CREATE PendingIntent.FLAG_NO_CREATE} has been 33739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * supplied. 33749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 33759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see PendingIntent 33769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 33779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PendingIntent createPendingResult(int requestCode, Intent data, 33789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int flags) { 33799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String packageName = getPackageName(); 33809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 33819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IIntentSender target = 33829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ActivityManagerNative.getDefault().getIntentSender( 33839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IActivityManager.INTENT_SENDER_ACTIVITY_RESULT, packageName, 33849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent == null ? mToken : mParent.mToken, 33859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEmbeddedID, requestCode, data, null, flags); 33869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return target != null ? new PendingIntent(target) : null; 33879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 33889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 33899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 33919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 33939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 33949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Change the desired orientation of this activity. If the activity 33959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is currently in the foreground or otherwise impacting the screen 33969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * orientation, the screen will immediately be changed (possibly causing 33979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the activity to be restarted). Otherwise, this will be used the next 33989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * time the activity is visible. 33999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 34009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param requestedOrientation An orientation constant as used in 34019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link ActivityInfo#screenOrientation ActivityInfo.screenOrientation}. 34029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 34039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setRequestedOrientation(int requestedOrientation) { 34049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 34059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 34069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ActivityManagerNative.getDefault().setRequestedOrientation( 34079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mToken, requestedOrientation); 34089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 34099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 34109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 34129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent.setRequestedOrientation(requestedOrientation); 34139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 34169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 34179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the current requested orientation of the activity. This will 34189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * either be the orientation requested in its component's manifest, or 34199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the last requested orientation given to 34209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setRequestedOrientation(int)}. 34219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 34229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns an orientation constant as used in 34239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link ActivityInfo#screenOrientation ActivityInfo.screenOrientation}. 34249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 34259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getRequestedOrientation() { 34269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent == null) { 34279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 34289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault() 34299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .getRequestedOrientation(mToken); 34309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 34319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 34329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 34349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParent.getRequestedOrientation(); 34359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; 34379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 34399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 34409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the identifier of the task this activity is in. This identifier 34419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will remain the same for the lifetime of the activity. 34429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 34439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Task identifier, an opaque integer. 34449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 34459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getTaskId() { 34469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 34479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault() 34489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .getTaskForActivity(mToken, false); 34499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 34509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return -1; 34519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 34549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 34559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return whether this activity is the root of a task. The root is the 34569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * first activity in a task. 34579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 34589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return True if this is the root activity, else false. 34599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 34609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isTaskRoot() { 34619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 34629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault() 34639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .getTaskForActivity(mToken, true) >= 0; 34649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 34659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 34669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 34699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 34709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Move the task containing this activity to the back of the activity 34719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * stack. The activity's order within the task is unchanged. 34729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 34739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param nonRoot If false then this only works if the activity is the root 34749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of a task; if true it will work for any activity in 34759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a task. 34769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 34779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return If the task was moved (or it was already at the 34789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * back) true is returned, else false. 34799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 34809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean moveTaskToBack(boolean nonRoot) { 34819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 34829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ActivityManagerNative.getDefault().moveActivityTaskToBack( 34839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mToken, nonRoot); 34849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 34859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Empty 34869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 34889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 34909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 34919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns class name for this activity with the package prefix removed. 34929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is the default name used to read and write settings. 34939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 34949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The local class name. 34959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 34969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getLocalClassName() { 34979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final String pkg = getPackageName(); 34989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final String cls = mComponent.getClassName(); 34999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int packageLen = pkg.length(); 35009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!cls.startsWith(pkg) || cls.length() <= packageLen 35019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || cls.charAt(packageLen) != '.') { 35029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return cls; 35039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return cls.substring(packageLen+1); 35059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 35079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 35089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns complete component name of this activity. 35099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 35109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the complete component name for this activity 35119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 35129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ComponentName getComponentName() 35139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 35149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mComponent; 35159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 35179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 35189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Retrieve a {@link SharedPreferences} object for accessing preferences 35199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that are private to this activity. This simply calls the underlying 35209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #getSharedPreferences(String, int)} method by passing in this activity's 35219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * class name as the preferences name. 35229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 35239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param mode Operating mode. Use {@link #MODE_PRIVATE} for the default 35249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * operation, {@link #MODE_WORLD_READABLE} and 35259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #MODE_WORLD_WRITEABLE} to control permissions. 35269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 35279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the single SharedPreferences instance that can be used 35289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to retrieve and modify the preference values. 35299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 35309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public SharedPreferences getPreferences(int mode) { 35319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getSharedPreferences(getLocalClassName(), mode); 35329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3534b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn private void ensureSearchManager() { 3535b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn if (mSearchManager != null) { 3536b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn return; 3537b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn } 3538b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn 3539e9ce3f01d42769f03f10e70c3244500e92d7eee1Amith Yamasani mSearchManager = new SearchManager(this, null); 3540b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn } 3541b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn 35429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 35439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Object getSystemService(String name) { 35449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (getBaseContext() == null) { 35459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalStateException( 35469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "System services not available to Activities before onCreate()"); 35479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 35499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (WINDOW_SERVICE.equals(name)) { 35509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mWindowManager; 35518d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert } else if (SEARCH_SERVICE.equals(name)) { 3552b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn ensureSearchManager(); 35538d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert return mSearchManager; 35549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return super.getSystemService(name); 35569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 35589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 35599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Change the title associated with this activity. If this is a 35609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * top-level activity, the title for its window will change. If it 35619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is an embedded activity, the parent can do whatever it wants 35629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with it. 35639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 35649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setTitle(CharSequence title) { 35659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTitle = title; 35669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onTitleChanged(title, mTitleColor); 35679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 35689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent != null) { 35699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent.onChildTitleChanged(this, title); 35709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 35739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 35749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Change the title associated with this activity. If this is a 35759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * top-level activity, the title for its window will change. If it 35769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is an embedded activity, the parent can do whatever it wants 35779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with it. 35789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 35799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setTitle(int titleId) { 35809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setTitle(getText(titleId)); 35819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 35839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setTitleColor(int textColor) { 35849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTitleColor = textColor; 35859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onTitleChanged(mTitle, textColor); 35869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 35889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final CharSequence getTitle() { 35899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mTitle; 35909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 35929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getTitleColor() { 35939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mTitleColor; 35949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 35959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 35969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onTitleChanged(CharSequence title, int color) { 35979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mTitleReady) { 35989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Window win = getWindow(); 35999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (win != null) { 36009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project win.setTitle(title); 36019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (color != 0) { 36029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project win.setTitleColor(color); 36039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 36049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 36059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 36069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 36079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 36089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onChildTitleChanged(Activity childActivity, CharSequence title) { 36099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 36109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 36119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 36129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the visibility of the progress bar in the title. 36139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 36149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In order for the progress bar to be shown, the feature must be requested 36159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * via {@link #requestWindowFeature(int)}. 36169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 36179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param visible Whether to show the progress bars in the title. 36189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 36199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setProgressBarVisibility(boolean visible) { 36209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureInt(Window.FEATURE_PROGRESS, visible ? Window.PROGRESS_VISIBILITY_ON : 36219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Window.PROGRESS_VISIBILITY_OFF); 36229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 36239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 36249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 36259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the visibility of the indeterminate progress bar in the title. 36269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 36279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In order for the progress bar to be shown, the feature must be requested 36289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * via {@link #requestWindowFeature(int)}. 36299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 36309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param visible Whether to show the progress bars in the title. 36319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 36329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setProgressBarIndeterminateVisibility(boolean visible) { 36339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureInt(Window.FEATURE_INDETERMINATE_PROGRESS, 36349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project visible ? Window.PROGRESS_VISIBILITY_ON : Window.PROGRESS_VISIBILITY_OFF); 36359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 36369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 36379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 36389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets whether the horizontal progress bar in the title should be indeterminate (the circular 36399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is always indeterminate). 36409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 36419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In order for the progress bar to be shown, the feature must be requested 36429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * via {@link #requestWindowFeature(int)}. 36439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 36449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param indeterminate Whether the horizontal progress bar should be indeterminate. 36459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 36469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setProgressBarIndeterminate(boolean indeterminate) { 36479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureInt(Window.FEATURE_PROGRESS, 36489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project indeterminate ? Window.PROGRESS_INDETERMINATE_ON : Window.PROGRESS_INDETERMINATE_OFF); 36499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 36509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 36519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 36529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the progress for the progress bars in the title. 36539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 36549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In order for the progress bar to be shown, the feature must be requested 36559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * via {@link #requestWindowFeature(int)}. 36569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 36579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param progress The progress for the progress bar. Valid ranges are from 36589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 0 to 10000 (both inclusive). If 10000 is given, the progress 36599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * bar will be completely filled and will fade out. 36609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 36619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setProgress(int progress) { 36629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureInt(Window.FEATURE_PROGRESS, progress + Window.PROGRESS_START); 36639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 36649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 36659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 36669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the secondary progress for the progress bar in the title. This 36679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * progress is drawn between the primary progress (set via 36689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setProgress(int)} and the background. It can be ideal for media 36699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * scenarios such as showing the buffering progress while the default 36709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * progress shows the play progress. 36719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 36729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In order for the progress bar to be shown, the feature must be requested 36739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * via {@link #requestWindowFeature(int)}. 36749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 36759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param secondaryProgress The secondary progress for the progress bar. Valid ranges are from 36769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 0 to 10000 (both inclusive). 36779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 36789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setSecondaryProgress(int secondaryProgress) { 36799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setFeatureInt(Window.FEATURE_PROGRESS, 36809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project secondaryProgress + Window.PROGRESS_SECONDARY_START); 36819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 36829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 36839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 36849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Suggests an audio stream whose volume should be changed by the hardware 36859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * volume controls. 36869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 36879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The suggested audio stream will be tied to the window of this Activity. 36889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If the Activity is switched, the stream set here is no longer the 36899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * suggested stream. The client does not need to save and restore the old 36909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * suggested stream value in onPause and onResume. 36919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 36929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param streamType The type of the audio stream whose volume should be 36939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * changed by the hardware volume controls. It is not guaranteed that 36949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the hardware volume controls will always change this stream's 36959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * volume (for example, if a call is in progress, its stream's volume 36969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * may be changed instead). To reset back to the default, use 36979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link AudioManager#USE_DEFAULT_STREAM_TYPE}. 36989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 36999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void setVolumeControlStream(int streamType) { 37009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getWindow().setVolumeControlStream(streamType); 37019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 37029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 37039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 37049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the suggested audio stream whose volume should be changed by the 37059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * harwdare volume controls. 37069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 37079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return The suggested audio stream type whose volume should be changed by 37089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the hardware volume controls. 37099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setVolumeControlStream(int) 37109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 37119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int getVolumeControlStream() { 37129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getWindow().getVolumeControlStream(); 37139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 37149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 37159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 37169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Runs the specified action on the UI thread. If the current thread is the UI 37179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * thread, then the action is executed immediately. If the current thread is 37189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not the UI thread, the action is posted to the event queue of the UI thread. 37199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 37209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param action the action to run on the UI thread 37219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 37229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void runOnUiThread(Runnable action) { 37239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (Thread.currentThread() != mUiThread) { 37249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHandler.post(action); 37259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 37269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project action.run(); 37279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 37289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 37299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 37309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 37319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Stub implementation of {@link android.view.LayoutInflater.Factory#onCreateView} used when 37329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * inflating with the LayoutInflater returned by {@link #getSystemService}. This 37339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implementation simply returns null for all view names. 37349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 37359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.LayoutInflater#createView 37369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.Window#getLayoutInflater 37379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 37389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public View onCreateView(String name, Context context, AttributeSet attrs) { 37399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 37409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 37419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 374269a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler /** 374369a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * Bit indicating that this activity is "immersive" and should not be 374469a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * interrupted by notifications if possible. 374569a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * 374669a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * This value is initially set by the manifest property 374769a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * <code>android:immersive</code> but may be changed at runtime by 374869a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * {@link #setImmersive}. 374969a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * 375069a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * @see android.content.pm.ActivityInfo#FLAG_IMMERSIVE 375169a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler */ 375269a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler public boolean isImmersive() { 375369a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler try { 375469a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler return ActivityManagerNative.getDefault().isImmersive(mToken); 375569a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler } catch (RemoteException e) { 375669a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler return false; 375769a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler } 375869a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler } 375969a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler 376069a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler /** 376169a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * Adjust the current immersive mode setting. 376269a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * 376369a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * Note that changing this value will have no effect on the activity's 376469a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * {@link android.content.pm.ActivityInfo} structure; that is, if 376569a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * <code>android:immersive</code> is set to <code>true</code> 376669a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * in the application's manifest entry for this activity, the {@link 376769a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * android.content.pm.ActivityInfo#flags ActivityInfo.flags} member will 376869a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * always have its {@link android.content.pm.ActivityInfo#FLAG_IMMERSIVE 376969a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * FLAG_IMMERSIVE} bit set. 377069a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * 377169a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * @see #isImmersive 377269a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler * @see android.content.pm.ActivityInfo#FLAG_IMMERSIVE 377369a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler */ 377469a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler public void setImmersive(boolean i) { 377569a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler try { 377669a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler ActivityManagerNative.getDefault().setImmersive(mToken, i); 377769a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler } catch (RemoteException e) { 377869a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler // pass 377969a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler } 378069a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler } 378169a4817e3e1e368e758ff8c238deb5ee26963c04Daniel Sandler 37829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // ------------------ Internal API ------------------ 37839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 37849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void setParent(Activity parent) { 37859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent = parent; 37869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 37879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 37889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void attach(Context context, ActivityThread aThread, Instrumentation instr, IBinder token, 37899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Application application, Intent intent, ActivityInfo info, CharSequence title, 37909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Activity parent, String id, Object lastNonConfigurationInstance, 37919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Configuration config) { 3792b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn attach(context, aThread, instr, token, 0, application, intent, info, title, parent, id, 37939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lastNonConfigurationInstance, null, config); 37949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 37959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3796b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn final void attach(Context context, ActivityThread aThread, 3797b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn Instrumentation instr, IBinder token, int ident, 3798b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn Application application, Intent intent, ActivityInfo info, 3799b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn CharSequence title, Activity parent, String id, 3800b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn Object lastNonConfigurationInstance, 3801b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn HashMap<String,Object> lastNonConfigurationChildInstances, 3802b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn Configuration config) { 38039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project attachBaseContext(context); 38049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 38059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow = PolicyManager.makeNewWindow(this); 38069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.setCallback(this); 38079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (info.softInputMode != WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED) { 38089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.setSoftInputMode(info.softInputMode); 38099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mUiThread = Thread.currentThread(); 38119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 38129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMainThread = aThread; 38139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentation = instr; 38149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mToken = token; 3815b06ea706530e6d19eb2a1a9a7ae6c5dd77d80af0Dianne Hackborn mIdent = ident; 38169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mApplication = application; 38179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIntent = intent; 38189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mComponent = intent.getComponent(); 38199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mActivityInfo = info; 38209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTitle = title; 38219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParent = parent; 38229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mEmbeddedID = id; 38239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLastNonConfigurationInstance = lastNonConfigurationInstance; 38249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLastNonConfigurationChildInstances = lastNonConfigurationChildInstances; 38259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 38269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.setWindowManager(null, mToken, mComponent.flattenToString()); 38279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mParent != null) { 38289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.setContainer(mParent.getWindow()); 38299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindowManager = mWindow.getWindowManager(); 38319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCurrentConfig = config; 38329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 38349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final IBinder getActivityToken() { 38359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParent != null ? mParent.getActivityToken() : mToken; 38369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 38389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void performStart() { 38399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = false; 38409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentation.callActivityOnStart(this); 38419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mCalled) { 38429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new SuperNotCalledException( 38439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Activity " + mComponent.toShortString() + 38449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " did not call through to super.onStart()"); 38459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 38489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void performRestart() { 38492f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki synchronized (mManagedCursors) { 38502f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki final int N = mManagedCursors.size(); 38512f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki for (int i=0; i<N; i++) { 38522f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki ManagedCursor mc = mManagedCursors.get(i); 38532f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki if (mc.mReleased || mc.mUpdated) { 38542f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki mc.mCursor.requery(); 38552f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki mc.mReleased = false; 38562f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki mc.mUpdated = false; 38572f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki } 38589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 38619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mStopped) { 38629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStopped = false; 38639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = false; 38649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentation.callActivityOnRestart(this); 38659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mCalled) { 38669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new SuperNotCalledException( 38679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Activity " + mComponent.toShortString() + 38689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " did not call through to super.onRestart()"); 38699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project performStart(); 38719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 38749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void performResume() { 38759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project performRestart(); 38769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 38779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLastNonConfigurationInstance = null; 38789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 38799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // First call onResume() -before- setting mResumed, so we don't 38809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // send out any status bar / menu notifications the client makes. 38819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = false; 38829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentation.callActivityOnResume(this); 38839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mCalled) { 38849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new SuperNotCalledException( 38859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Activity " + mComponent.toShortString() + 38869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " did not call through to super.onResume()"); 38879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 38899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Now really resume, and install the current status bar and menu. 38909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mResumed = true; 38919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = false; 38929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onPostResume(); 38939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mCalled) { 38949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new SuperNotCalledException( 38959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Activity " + mComponent.toShortString() + 38969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " did not call through to super.onPostResume()"); 38979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 38999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void performPause() { 39019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onPause(); 39029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void performUserLeaving() { 39059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onUserInteraction(); 39069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onUserLeaveHint(); 39079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final void performStop() { 39109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mStopped) { 39119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mWindow != null) { 39129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWindow.closeAllPanels(); 39139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCalled = false; 39169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInstrumentation.callActivityOnStop(this); 39179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!mCalled) { 39189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new SuperNotCalledException( 39199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Activity " + mComponent.toShortString() + 39209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project " did not call through to super.onStop()"); 39219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39232f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki synchronized (mManagedCursors) { 39242f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki final int N = mManagedCursors.size(); 39252f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki for (int i=0; i<N; i++) { 39262f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki ManagedCursor mc = mManagedCursors.get(i); 39272f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki if (!mc.mReleased) { 39282f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki mc.mCursor.deactivate(); 39292f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki mc.mReleased = true; 39302f6a01858bea6c669039b0b1e10aa65fc73c7256Makoto Onuki } 39319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStopped = true; 39359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mResumed = false; 39379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final boolean isResumed() { 39409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mResumed; 39419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void dispatchActivityResult(String who, int requestCode, 39449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int resultCode, Intent data) { 39459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (Config.LOGV) Log.v( 39469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TAG, "Dispatching result: who=" + who + ", reqCode=" + requestCode 39479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + ", resCode=" + resultCode + ", data=" + data); 39489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (who == null) { 39499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onActivityResult(requestCode, resultCode, data); 39509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 39529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3953