diff options
author | The Android Automerger <android-build@android.com> | 2010-01-22 13:37:52 -0800 |
---|---|---|
committer | The Android Automerger <android-build@android.com> | 2010-01-22 13:37:52 -0800 |
commit | 1e81bf587e2f9f05fc2cd3ff3e1bee99ce43b763 (patch) | |
tree | 7a9aafe7c124f2c2b11a76e22e5bb0158ae2fd37 | |
parent | c8cb6a3678893b26629c902da1ab84f53bcc601e (diff) | |
parent | 5ff24d5da414db4e8c2ebe98f40976e7be62b72d (diff) | |
download | base-1e81bf587e2f9f05fc2cd3ff3e1bee99ce43b763.tar.gz |
Merge branch 'eclair' into eclair-release
28 files changed, 191 insertions, 118 deletions
diff --git a/core/java/android/content/SyncManager.java b/core/java/android/content/SyncManager.java index b2d406b5e7c5..33d6159db36c 100644 --- a/core/java/android/content/SyncManager.java +++ b/core/java/android/content/SyncManager.java @@ -34,6 +34,7 @@ import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.RegisteredServicesCache; import android.content.pm.ProviderInfo; +import android.content.pm.RegisteredServicesCacheListener; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; @@ -344,6 +345,14 @@ class SyncManager implements OnAccountsUpdateListener { mPackageManager = null; mSyncAdapters = new SyncAdaptersCache(mContext); + mSyncAdapters.setListener(new RegisteredServicesCacheListener<SyncAdapterType>() { + public void onServiceChanged(SyncAdapterType type, boolean removed) { + if (!removed) { + scheduleSync(null, type.authority, null, 0 /* no delay */, + false /* onlyThoseWithUnkownSyncableState */); + } + } + }, mSyncHandler); mSyncAlarmIntent = PendingIntent.getBroadcast( mContext, 0 /* ignored */, new Intent(ACTION_SYNC_ALARM), 0); diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 46064a270b5e..ab1841e140d7 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -536,10 +536,8 @@ public class WebView extends AbsoluteLayout static int DEFAULT_SCALE_PERCENT; private float mDefaultScale; - // set to true temporarily during ScaleGesture triggered zoom + // set to true temporarily while the zoom control is being dragged private boolean mPreviewZoomOnly = false; - // extra scale during zoom preview - private float mPreviewExtraZoomScale = 1.0f; // computed scale and inverse, from mZoomWidth. private float mActualScale; @@ -2812,9 +2810,7 @@ public class WebView extends AbsoluteLayout nativeRecordButtons(hasFocus() && hasWindowFocus(), mTouchMode == TOUCH_SHORTPRESS_START_MODE || mTrackballDown || mGotCenterDown, false); - // use the DKGRAY as background when drawing zoom preview - drawCoreAndCursorRing(canvas, mPreviewZoomOnly ? Color.DKGRAY - : mBackgroundColor, mDrawCursorRing); + drawCoreAndCursorRing(canvas, mBackgroundColor, mDrawCursorRing); } @Override @@ -2824,12 +2820,6 @@ public class WebView extends AbsoluteLayout return; } int saveCount = canvas.save(); - if (mPreviewZoomOnly) { - // scale after canvas.save() so that the child, like titlebar, will - // not be scaled. - canvas.scale(mPreviewExtraZoomScale, mPreviewExtraZoomScale, - mZoomCenterX + mScrollX, mZoomCenterY + mScrollY); - } if (mTitleBar != null) { canvas.translate(0, (int) mTitleBar.getHeight()); } @@ -2838,8 +2828,8 @@ public class WebView extends AbsoluteLayout } canvas.restoreToCount(saveCount); - // Now draw the shadow, skip if it is in zoom preview mode. - if ((mTitleBar != null && !mPreviewZoomOnly)) { + // Now draw the shadow. + if (mTitleBar != null) { int y = mScrollY + getVisibleTitleHeight(); int height = (int) (5f * getContext().getResources() .getDisplayMetrics().density); @@ -3744,8 +3734,6 @@ public class WebView extends AbsoluteLayout private class ScaleDetectorListener implements ScaleGestureDetector.OnScaleGestureListener { - float mStartX, mStartY; - public boolean onScaleBegin(ScaleGestureDetector detector) { // cancel the single touch handling cancelTouch(); @@ -3759,9 +3747,6 @@ public class WebView extends AbsoluteLayout if (inEditingMode() && nativeFocusCandidateIsPassword()) { mWebTextView.setInPassword(false); } - mPreviewExtraZoomScale = 1.0f; - mStartX = detector.getFocusX(); - mStartY = detector.getFocusY(); return true; } @@ -3770,12 +3755,13 @@ public class WebView extends AbsoluteLayout mPreviewZoomOnly = false; mAnchorX = viewToContentX((int) mZoomCenterX + mScrollX); mAnchorY = viewToContentY((int) mZoomCenterY + mScrollY); - float scale = mPreviewExtraZoomScale * mActualScale; // don't reflow when zoom in; when zoom out, do reflow if the // new scale is almost minimum scale; - boolean reflowNow = (scale - mMinZoomScale <= 0.01f) - || ((scale <= 0.8 * mTextWrapScale)); - setNewZoomScale(scale, reflowNow, false); + boolean reflowNow = (mActualScale - mMinZoomScale <= 0.01f) + || ((mActualScale <= 0.8 * mTextWrapScale)); + // force zoom after mPreviewZoomOnly is set to false so that the + // new view size will be passed to the WebKit + setNewZoomScale(mActualScale, reflowNow, true); // call invalidate() to draw without zoom filter invalidate(); } @@ -3792,34 +3778,19 @@ public class WebView extends AbsoluteLayout } public boolean onScale(ScaleGestureDetector detector) { - float currScale = mPreviewExtraZoomScale * mActualScale; float scale = (float) (Math.round(detector.getScaleFactor() - * currScale * 100) / 100.0); - // limit the scale change per step - if (scale > currScale) { - scale = Math.min(scale, currScale * 1.25f); - } else { - // the preview scale can be 80% of mMinZoomScale for feedback - scale = Math.max(Math.max(scale, currScale * 0.8f), - mMinZoomScale * 0.8f); - } - if (Math.abs(scale - currScale) >= PREVIEW_SCALE_INCREMENT) { + * mActualScale * 100) / 100.0); + if (Math.abs(scale - mActualScale) >= PREVIEW_SCALE_INCREMENT) { mPreviewZoomOnly = true; - // FIXME: mZoomCenterX/Y need to be relative to mActualScale. - // Ideally the focusX/Y should be a fixed point. But currently - // it just returns the center of the two pointers. If only one - // pointer is moving, the center is shifting. Currently we only - // adjust it for zoom in case to get better result. - if (mPreviewExtraZoomScale > 1.0f) { - mZoomCenterX = mStartX - (mStartX - detector.getFocusX()) - / mPreviewExtraZoomScale; - mZoomCenterY = mStartY - (mStartY - detector.getFocusY()) - / mPreviewExtraZoomScale; + // limit the scale change per step + if (scale > mActualScale) { + scale = Math.min(scale, mActualScale * 1.25f); } else { - mZoomCenterX = detector.getFocusX(); - mZoomCenterY = detector.getFocusY(); + scale = Math.max(scale, mActualScale * 0.8f); } - mPreviewExtraZoomScale = scale / mActualScale; + mZoomCenterX = detector.getFocusX(); + mZoomCenterY = detector.getFocusY(); + setNewZoomScale(scale, false, false); invalidate(); return true; } @@ -4000,7 +3971,8 @@ public class WebView extends AbsoluteLayout // FIXME: we may consider to give WebKit an option to handle multi-touch // events later. - if (mSupportMultiTouch && ev.getPointerCount() > 1) { + if (mSupportMultiTouch && mMinZoomScale < mMaxZoomScale + && ev.getPointerCount() > 1) { mScaleDetector.onTouchEvent(ev); if (mScaleDetector.isInProgress()) { mLastTouchTime = eventTime; diff --git a/core/java/com/android/internal/widget/ContactHeaderWidget.java b/core/java/com/android/internal/widget/ContactHeaderWidget.java index 33fd936fca56..c4f99886245d 100644 --- a/core/java/com/android/internal/widget/ContactHeaderWidget.java +++ b/core/java/com/android/internal/widget/ContactHeaderWidget.java @@ -201,7 +201,7 @@ public class ContactHeaderWidget extends FrameLayout implements View.OnClickList mNoPhotoResource = R.drawable.ic_contact_picture_3; } - mQueryHandler = new QueryHandler(mContentResolver); + resetAsyncQueryHandler(); } public void enableClickListeners() { @@ -237,6 +237,11 @@ public class ContactHeaderWidget extends FrameLayout implements View.OnClickList @Override protected void onQueryComplete(int token, Object cookie, Cursor cursor) { try{ + if (this != mQueryHandler) { + Log.d(TAG, "onQueryComplete: discard result, the query handler is reset!"); + return; + } + switch (token) { case TOKEN_PHOTO_QUERY: { //Set the photo @@ -263,8 +268,14 @@ public class ContactHeaderWidget extends FrameLayout implements View.OnClickList bindContactInfo(cursor); Uri lookupUri = Contacts.getLookupUri(cursor.getLong(ContactQuery._ID), cursor.getString(ContactQuery.LOOKUP_KEY)); - startPhotoQuery(cursor.getLong(ContactQuery.PHOTO_ID), lookupUri); + startPhotoQuery(cursor.getLong(ContactQuery.PHOTO_ID), + lookupUri, false /* don't reset query handler */); invalidate(); + } else { + // shouldn't really happen + setDisplayName(null, null); + setSocialSnippet(null); + setPhoto(loadPlaceholderPhoto(null)); } break; } @@ -273,11 +284,13 @@ public class ContactHeaderWidget extends FrameLayout implements View.OnClickList long contactId = cursor.getLong(PHONE_LOOKUP_CONTACT_ID_COLUMN_INDEX); String lookupKey = cursor.getString( PHONE_LOOKUP_CONTACT_LOOKUP_KEY_COLUMN_INDEX); - bindFromContactUri(Contacts.getLookupUri(contactId, lookupKey)); + bindFromContactUriInternal(Contacts.getLookupUri(contactId, lookupKey), + false /* don't reset query handler */); } else { String phoneNumber = (String) cookie; setDisplayName(phoneNumber, null); setSocialSnippet(null); + setPhoto(loadPlaceholderPhoto(null)); mPhotoView.assignContactFromPhone(phoneNumber, true); } break; @@ -287,11 +300,13 @@ public class ContactHeaderWidget extends FrameLayout implements View.OnClickList long contactId = cursor.getLong(EMAIL_LOOKUP_CONTACT_ID_COLUMN_INDEX); String lookupKey = cursor.getString( EMAIL_LOOKUP_CONTACT_LOOKUP_KEY_COLUMN_INDEX); - bindFromContactUri(Contacts.getLookupUri(contactId, lookupKey)); + bindFromContactUriInternal(Contacts.getLookupUri(contactId, lookupKey), + false /* don't reset query handler */); } else { String emailAddress = (String) cookie; setDisplayName(emailAddress, null); setSocialSnippet(null); + setPhoto(loadPlaceholderPhoto(null)); mPhotoView.assignContactFromEmail(emailAddress, true); } break; @@ -397,22 +412,22 @@ public class ContactHeaderWidget extends FrameLayout implements View.OnClickList * Convenience method for binding all available data from an existing * contact. * - * @param conatctUri a {Contacts.CONTENT_LOOKUP_URI} style URI. + * @param contactLookupUri a {Contacts.CONTENT_LOOKUP_URI} style URI. */ public void bindFromContactLookupUri(Uri contactLookupUri) { - mContactUri = contactLookupUri; - startContactQuery(contactLookupUri); + bindFromContactUriInternal(contactLookupUri, true /* reset query handler */); } /** * Convenience method for binding all available data from an existing * contact. * - * @param conatctUri a {Contacts.CONTENT_URI} style URI. + * @param contactUri a {Contacts.CONTENT_URI} style URI. + * @param resetQueryHandler whether to use a new AsyncQueryHandler or not. */ - public void bindFromContactUri(Uri contactUri) { + private void bindFromContactUriInternal(Uri contactUri, boolean resetQueryHandler) { mContactUri = contactUri; - startContactQuery(contactUri); + startContactQuery(contactUri, resetQueryHandler); } /** @@ -424,6 +439,8 @@ public class ContactHeaderWidget extends FrameLayout implements View.OnClickList * address, one of them will be chosen to bind to. */ public void bindFromEmail(String emailAddress) { + resetAsyncQueryHandler(); + mQueryHandler.startQuery(TOKEN_EMAIL_LOOKUP, emailAddress, Uri.withAppendedPath(Email.CONTENT_LOOKUP_URI, Uri.encode(emailAddress)), EMAIL_LOOKUP_PROJECTION, null, null, null); @@ -438,36 +455,72 @@ public class ContactHeaderWidget extends FrameLayout implements View.OnClickList * number, one of them will be chosen to bind to. */ public void bindFromPhoneNumber(String number) { + resetAsyncQueryHandler(); + mQueryHandler.startQuery(TOKEN_PHONE_LOOKUP, number, Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number)), PHONE_LOOKUP_PROJECTION, null, null, null); } /** - * Method to force this widget to forget everything it knows about the contact. - * The widget isn't automatically updated or redrawn. + * startContactQuery * + * internal method to query contact by Uri. + * + * @param contactUri the contact uri + * @param resetQueryHandler whether to use a new AsyncQueryHandler or not */ - public void wipeClean() { - setDisplayName(null, null); - setPhoto(null); - setSocialSnippet(null); - mContactUri = null; - mExcludeMimes = null; - } + private void startContactQuery(Uri contactUri, boolean resetQueryHandler) { + if (resetQueryHandler) { + resetAsyncQueryHandler(); + } - private void startContactQuery(Uri contactUri) { mQueryHandler.startQuery(TOKEN_CONTACT_INFO, null, contactUri, ContactQuery.COLUMNS, null, null, null); } - protected void startPhotoQuery(long photoId, Uri lookupKey) { + /** + * startPhotoQuery + * + * internal method to query contact photo by photo id and uri. + * + * @param photoId the photo id. + * @param lookupKey the lookup uri. + * @param resetQueryHandler whether to use a new AsyncQueryHandler or not. + */ + protected void startPhotoQuery(long photoId, Uri lookupKey, boolean resetQueryHandler) { + if (resetQueryHandler) { + resetAsyncQueryHandler(); + } + mQueryHandler.startQuery(TOKEN_PHOTO_QUERY, lookupKey, ContentUris.withAppendedId(Data.CONTENT_URI, photoId), PhotoQuery.COLUMNS, null, null, null); } /** + * Method to force this widget to forget everything it knows about the contact. + * We need to stop any existing async queries for phone, email, contact, and photos. + */ + public void wipeClean() { + resetAsyncQueryHandler(); + + setDisplayName(null, null); + setPhoto(loadPlaceholderPhoto(null)); + setSocialSnippet(null); + setPresence(0); + mContactUri = null; + mExcludeMimes = null; + } + + + private void resetAsyncQueryHandler() { + // the api AsyncQueryHandler.cancelOperation() doesn't really work. Since we really + // need the old async queries to be cancelled, let's do it the hard way. + mQueryHandler = new QueryHandler(mContentResolver); + } + + /** * Bind the contact details provided by the given {@link Cursor}. */ protected void bindContactInfo(Cursor c) { diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index 882ce47bd222..cec230a9c0fa 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -503,6 +503,7 @@ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Není vložena SIM karta."</string> <string name="lockscreen_missing_sim_message" msgid="2186920585695169078">"V telefonu není žádná karta SIM."</string> <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Prosím vložte kartu SIM."</string> + <string name="emergency_calls_only" msgid="6733978304386365407">"Pouze tísňová volání"</string> <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Síť je blokována"</string> <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"Karta SIM je zablokována pomocí kódu PUK."</string> <string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"Další informace naleznete v uživatelské příručce, nebo kontaktujte podporu zákazníků."</string> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index 11ef0a91d7e4..0ea959f96866 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -503,6 +503,7 @@ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Der er ikke noget SIM-kort."</string> <string name="lockscreen_missing_sim_message" msgid="2186920585695169078">"Der er ikke noget SIM-kort i telefonen."</string> <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Indsæt et SIM-kort."</string> + <string name="emergency_calls_only" msgid="6733978304386365407">"Kun nødopkald"</string> <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Netværket er låst"</string> <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM-kortet er låst med PUK-koden."</string> <string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"Se brugervejledningen, eller kontakt kundeservice."</string> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index d59d3a70966a..353bc3b45d3e 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -503,6 +503,7 @@ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Keine SIM-Karte."</string> <string name="lockscreen_missing_sim_message" msgid="2186920585695169078">"Keine SIM-Karte im Telefon."</string> <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Bitte legen Sie eine SIM-Karte ein."</string> + <string name="emergency_calls_only" msgid="6733978304386365407">"Nur Notrufe"</string> <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Netzwerk gesperrt"</string> <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM-Karte ist gesperrt. PUK-Eingabe erforderlich."</string> <string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"Weitere Informationen finden Sie in der Bedienungsanleitung oder wenden Sie sich an den Kundendienst."</string> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index c423033c7987..65c6676a24ee 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -503,6 +503,7 @@ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Δεν υπάρχει κάρτα SIM."</string> <string name="lockscreen_missing_sim_message" msgid="2186920585695169078">"Δεν υπάρχει κάρτα SIM στο τηλέφωνο."</string> <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Τοποθετήστε μια κάρτα SIM."</string> + <string name="emergency_calls_only" msgid="6733978304386365407">"Μόνο κλήσεις έκτακτης ανάγκης"</string> <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Το δίκτυο κλειδώθηκε"</string> <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"Η κάρτα SIM είναι κλειδωμένη με κωδικό PUK."</string> <string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"Ανατρέξτε στον οδηγό χρήσης ή επικοινωνήστε με την εξυπηρέτηση πελατών."</string> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index 68939793427d..5f980e0cdc33 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -503,6 +503,7 @@ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"No hay tarjeta SIM."</string> <string name="lockscreen_missing_sim_message" msgid="2186920585695169078">"No hay tarjeta SIM en el teléfono."</string> <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Inserta una tarjeta SIM."</string> + <string name="emergency_calls_only" msgid="6733978304386365407">"Sólo llamadas de emergencia"</string> <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Red bloqueada"</string> <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"La tarjeta SIM está bloqueada con PUK."</string> <string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"Consulta la guía del usuario o comunícate con el servicio de atención al cliente."</string> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index d34de350b8e5..1dd9b3135eed 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -503,6 +503,7 @@ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Falta la tarjeta SIM"</string> <string name="lockscreen_missing_sim_message" msgid="2186920585695169078">"No se ha insertado ninguna tarjeta SIM en el teléfono."</string> <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Inserta una tarjeta SIM."</string> + <string name="emergency_calls_only" msgid="6733978304386365407">"Sólo llamadas de emergencia"</string> <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Bloqueada para la red"</string> <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"La tarjeta SIM está bloqueada con el código PUK."</string> <string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"Consulta la guía del usuario o ponte en contacto con el servicio de atención al cliente."</string> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index 61e72975ebef..a11e00deec14 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -503,6 +503,7 @@ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Aucune carte SIM n\'a été trouvée."</string> <string name="lockscreen_missing_sim_message" msgid="2186920585695169078">"Aucune carte SIM n\'est insérée dans le téléphone."</string> <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Insérez une carte SIM."</string> + <string name="emergency_calls_only" msgid="6733978304386365407">"Appels d\'urgence uniquement"</string> <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Réseau verrouillé"</string> <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"La carte SIM est verrouillée par clé PUK."</string> <string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"Veuillez consulter le guide d\'utilisation ou contacter l\'assistance clientèle."</string> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index be7f002e892f..dd93286bd579 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -503,6 +503,7 @@ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Nessuna SIM presente."</string> <string name="lockscreen_missing_sim_message" msgid="2186920585695169078">"Nessuna SIM presente nel telefono."</string> <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Inserisci una SIM."</string> + <string name="emergency_calls_only" msgid="6733978304386365407">"Solo chiamate di emergenza"</string> <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Rete bloccata"</string> <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"La SIM è bloccata tramite PUK."</string> <string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"Consulta il Manuale utente o contatta il servizio clienti."</string> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index d8bffe276a7c..9625068efc01 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -503,6 +503,7 @@ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"SIMカードが挿入されていません"</string> <string name="lockscreen_missing_sim_message" msgid="2186920585695169078">"SIMカードが挿入されていません"</string> <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"SIMカードを挿入してください。"</string> + <string name="emergency_calls_only" msgid="6733978304386365407">"緊急通報のみ"</string> <string name="lockscreen_network_locked_message" msgid="143389224986028501">"ネットワークがロックされました"</string> <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIMカードはPUKでロックされています。"</string> <string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"ユーザーガイドを参照するか、お客様サポートにお問い合わせください。"</string> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index 5271228b7774..aaeb6d815e89 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -503,6 +503,7 @@ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"SIM 카드가 없습니다."</string> <string name="lockscreen_missing_sim_message" msgid="2186920585695169078">"휴대전화에 SIM 카드가 없습니다."</string> <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"SIM 카드를 삽입하세요."</string> + <string name="emergency_calls_only" msgid="6733978304386365407">"비상 전화만"</string> <string name="lockscreen_network_locked_message" msgid="143389224986028501">"네트워크 잠김"</string> <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM 카드의 PUK가 잠겨 있습니다."</string> <string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"사용자 가이드를 참조하거나 고객지원팀에 문의하세요."</string> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index 1546ddb8f175..b012e12e45e1 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -503,6 +503,7 @@ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Mangler SIM-kort."</string> <string name="lockscreen_missing_sim_message" msgid="2186920585695169078">"Ikke noe SIM-kort i telefonen."</string> <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Sett inn et SIM-kort."</string> + <string name="emergency_calls_only" msgid="6733978304386365407">"Kun nødsamtaler"</string> <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Nettverk ikke tillatt"</string> <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM-kortet er PUK-låst."</string> <string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"Se manualen eller kontakt kundeservice."</string> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index 37f6e0aff1aa..8046f1f64e5a 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -503,6 +503,7 @@ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Geen SIM-kaart."</string> <string name="lockscreen_missing_sim_message" msgid="2186920585695169078">"Geen SIM-kaart in telefoon."</string> <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Plaats een SIM-kaart."</string> + <string name="emergency_calls_only" msgid="6733978304386365407">"Alleen noodoproepen"</string> <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Netwerk vergrendeld"</string> <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM-kaart is vergrendeld met PUK-code."</string> <string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"Raadpleeg de gebruikershandleiding of neem contact op met de klantenservice."</string> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index fd63c58ec09d..0cf137e5d07e 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -503,6 +503,7 @@ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Brak karty SIM."</string> <string name="lockscreen_missing_sim_message" msgid="2186920585695169078">"Brak karty SIM w telefonie."</string> <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Włóż kartę SIM."</string> + <string name="emergency_calls_only" msgid="6733978304386365407">"Tylko połączenia alarmowe"</string> <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Sieć zablokowana"</string> <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"Karta SIM jest zablokowana kodem PUK."</string> <string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"Zapoznaj się z instrukcją obsługi lub skontaktuj się z działem obsługi klienta."</string> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index a494a7ab170e..3e3d2e53be92 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -503,6 +503,7 @@ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Nenhum cartão SIM."</string> <string name="lockscreen_missing_sim_message" msgid="2186920585695169078">"Nenhum cartão SIM no telefone."</string> <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Introduza um cartão SIM."</string> + <string name="emergency_calls_only" msgid="6733978304386365407">"Apenas chamadas de emergência"</string> <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Rede bloqueada"</string> <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"O cartão SIM está bloqueado por PUK"</string> <string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"Consulte o Manual de utilizador ou contacte a Assistência a clientes."</string> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index 1bae99e2d655..b6bcca2430ec 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -503,6 +503,7 @@ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Sem cartão SIM."</string> <string name="lockscreen_missing_sim_message" msgid="2186920585695169078">"Não há um cartão SIM no telefone."</string> <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Insira um cartão SIM."</string> + <string name="emergency_calls_only" msgid="6733978304386365407">"Apenas chamadas de emergência"</string> <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Rede bloqueada"</string> <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"O cartão SIM está bloqueado pelo PUK."</string> <string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"Consulte o Guia do Usuário ou entre em contato com o Serviço de atendimento ao cliente."</string> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index 281953320c8b..4f341cf94ba6 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -503,6 +503,7 @@ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Нет SIM-карты."</string> <string name="lockscreen_missing_sim_message" msgid="2186920585695169078">"SIM-карта не установлена."</string> <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Вставьте SIM-карту."</string> + <string name="emergency_calls_only" msgid="6733978304386365407">"Только вызовы службы экстренной помощи"</string> <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Сеть заблокирована"</string> <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM-карта заблокирована с помощью кода PUK."</string> <string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"См. руководство пользователя или свяжитесь со службой поддержки."</string> diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index fbbcb62cca86..702835112032 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -503,6 +503,7 @@ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"Inget SIM-kort."</string> <string name="lockscreen_missing_sim_message" msgid="2186920585695169078">"Inget SIM-kort i telefonen."</string> <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Sätt i ett SIM-kort."</string> + <string name="emergency_calls_only" msgid="6733978304386365407">"Endast nödsamtal"</string> <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Nätverk låst"</string> <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM-kortet är PUK-låst."</string> <string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"Se användarhandboken eller kontakta Kundtjänst."</string> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index 687fe369cc79..fa4764e76bbb 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -503,6 +503,7 @@ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"SIM kart yok."</string> <string name="lockscreen_missing_sim_message" msgid="2186920585695169078">"Telefonda SIM kart yok."</string> <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"Lütfen SIM kart takın."</string> + <string name="emergency_calls_only" msgid="6733978304386365407">"Yalnızca acil çağrılar için"</string> <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Ağ kilitli"</string> <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM kart PUK kilidi devrede."</string> <string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"Lütfen Kullanıcı Rehberi\'ne bakın veya Müşteri Hizmetleri\'ne başvurun."</string> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index de4baf812d50..ebb7758ced87 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -503,6 +503,7 @@ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"没有 SIM 卡"</string> <string name="lockscreen_missing_sim_message" msgid="2186920585695169078">"手机中无 SIM 卡"</string> <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"请插入 SIM 卡"</string> + <string name="emergency_calls_only" msgid="6733978304386365407">"仅限于急救或报警电话"</string> <string name="lockscreen_network_locked_message" msgid="143389224986028501">"网络已锁定"</string> <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM 卡已用 PUK 码锁定"</string> <string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"请参阅《用户指南》或联系客服人员。"</string> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index fb846339f72d..39c081cfd515 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -503,6 +503,7 @@ <string name="lockscreen_missing_sim_message_short" msgid="7381499217732227295">"沒有 SIM 卡。"</string> <string name="lockscreen_missing_sim_message" msgid="2186920585695169078">"手機未插入 SIM 卡。"</string> <string name="lockscreen_missing_sim_instructions" msgid="8874620818937719067">"請插入 SIM 卡。"</string> + <string name="emergency_calls_only" msgid="6733978304386365407">"只能撥打緊急電話"</string> <string name="lockscreen_network_locked_message" msgid="143389224986028501">"網路已鎖定"</string> <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM 的 PUK 已鎖定。"</string> <string name="lockscreen_sim_puk_locked_instructions" msgid="635967534992394321">"請參閱《使用者指南》或聯絡客戶服務中心。"</string> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 1394341d24e0..0327e0820d32 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -1372,6 +1372,8 @@ <!-- Shown in the lock screen to ask the user to insert a SIM card. --> <string name="lockscreen_missing_sim_instructions">Please insert a SIM card.</string> + <!-- Shown in the lock screen when there is emergency calls only mode. --> + <string name="emergency_calls_only" msgid="2485604591272668370">Emergency calls only</string> <!-- When the user inserts a sim card from an unsupported network, it becomes network locked --> diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java index 4cdc06d79c06..88e171d3929a 100644 --- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java +++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/MediaPlayerPerformance.java @@ -255,13 +255,19 @@ public class MediaPlayerPerformance extends ActivityInstrumentationTestCase<Medi } //Write the ps output to the file - public void getMemoryWriteToLog(Writer output) { + public void getMemoryWriteToLog(Writer output, int writeCount) { String memusage = null; - memusage = captureMediaserverInfo(); - Log.v(TAG, memusage); try { - //Write to file output + if (writeCount == 0) { + mStartMemory = getMediaserverVsize(); + output.write("Start memory : " + mStartMemory + "\n"); + } + memusage = captureMediaserverInfo(); output.write(memusage); + if (writeCount == NUM_STRESS_LOOP - 1) { + mEndMemory = getMediaserverVsize(); + output.write("End Memory :" + mEndMemory + "\n"); + } } catch (Exception e) { e.toString(); } @@ -312,9 +318,6 @@ public class MediaPlayerPerformance extends ActivityInstrumentationTestCase<Medi //Wait for 10 seconds to make sure the memory settle. Thread.sleep(10000); mEndPid = getMediaserverPid(); - mEndMemory = getMediaserverVsize(); - Log.v(TAG, "End Memory " + mEndMemory); - output.write("End Memory :" + mEndMemory + "\n"); int memDiff = mEndMemory - startMemory; if (memDiff < 0) memDiff = 0; @@ -348,12 +351,9 @@ public class MediaPlayerPerformance extends ActivityInstrumentationTestCase<Medi File h263MemoryOut = new File(MEDIA_MEMORY_OUTPUT); Writer output = new BufferedWriter(new FileWriter(h263MemoryOut, true)); output.write("H263 Video Playback Only\n"); - mStartMemory = getMediaserverVsize(); - output.write("Start memory : " + mStartMemory + "\n"); - Log.v(TAG, "first mem : " + mStartMemory); for (int i = 0; i < NUM_STRESS_LOOP; i++) { mediaStressPlayback(MediaNames.VIDEO_HIGHRES_H263); - getMemoryWriteToLog(output); + getMemoryWriteToLog(output, i); } output.write("\n"); memoryResult = validateMemoryResult(mStartPid, mStartMemory, output); @@ -370,12 +370,9 @@ public class MediaPlayerPerformance extends ActivityInstrumentationTestCase<Medi File h264MemoryOut = new File(MEDIA_MEMORY_OUTPUT); Writer output = new BufferedWriter(new FileWriter(h264MemoryOut, true)); output.write("H264 Video Playback only\n"); - mStartMemory = getMediaserverVsize(); - output.write("Start memory : " + mStartMemory + "\n"); - Log.v(TAG, "first mem : " + mStartMemory); for (int i = 0; i < NUM_STRESS_LOOP; i++) { mediaStressPlayback(MediaNames.VIDEO_H264_AMR); - getMemoryWriteToLog(output); + getMemoryWriteToLog(output, i); } output.write("\n"); memoryResult = validateMemoryResult(mStartPid, mStartMemory, output); @@ -392,12 +389,9 @@ public class MediaPlayerPerformance extends ActivityInstrumentationTestCase<Medi File wmvMemoryOut = new File(MEDIA_MEMORY_OUTPUT); Writer output = new BufferedWriter(new FileWriter(wmvMemoryOut, true)); output.write("WMV video playback only\n"); - mStartMemory = getMediaserverVsize(); - output.write("Start memory : " + mStartMemory + "\n"); - Log.v(TAG, "first mem : " + mStartMemory); for (int i = 0; i < NUM_STRESS_LOOP; i++) { mediaStressPlayback(MediaNames.VIDEO_WMV); - getMemoryWriteToLog(output); + getMemoryWriteToLog(output, i); } output.write("\n"); memoryResult = validateMemoryResult(mStartPid, mStartMemory, output); @@ -415,14 +409,10 @@ public class MediaPlayerPerformance extends ActivityInstrumentationTestCase<Medi File videoH263RecordOnlyMemoryOut = new File(MEDIA_MEMORY_OUTPUT); Writer output = new BufferedWriter(new FileWriter(videoH263RecordOnlyMemoryOut, true)); output.write("H263 video record only\n"); - mStartMemory = getMediaserverVsize(); - output.write("Start memory : " + mStartMemory + "\n"); - Log.v(TAG, "first mem : " + mStartMemory); - for (int i = 0; i < NUM_STRESS_LOOP; i++) { stressVideoRecord(20, 352, 288, MediaRecorder.VideoEncoder.H263, MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, true); - getMemoryWriteToLog(output); + getMemoryWriteToLog(output, i); } output.write("\n"); memoryResult = validateMemoryResult(mStartPid, mStartMemory, output); @@ -439,14 +429,10 @@ public class MediaPlayerPerformance extends ActivityInstrumentationTestCase<Medi File videoMp4RecordOnlyMemoryOut = new File(MEDIA_MEMORY_OUTPUT); Writer output = new BufferedWriter(new FileWriter(videoMp4RecordOnlyMemoryOut, true)); output.write("MPEG4 video record only\n"); - mStartMemory = getMediaserverVsize(); - output.write("Start memory : " + mStartMemory + "\n"); - Log.v(TAG, "first mem : " + mStartMemory); - for (int i = 0; i < NUM_STRESS_LOOP; i++) { stressVideoRecord(20, 352, 288, MediaRecorder.VideoEncoder.MPEG_4_SP, MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, true); - getMemoryWriteToLog(output); + getMemoryWriteToLog(output, i); } output.write("\n"); memoryResult = validateMemoryResult(mStartPid, mStartMemory, output); @@ -464,14 +450,10 @@ public class MediaPlayerPerformance extends ActivityInstrumentationTestCase<Medi File videoRecordAudioMemoryOut = new File(MEDIA_MEMORY_OUTPUT); Writer output = new BufferedWriter(new FileWriter(videoRecordAudioMemoryOut, true)); output.write("Audio and h263 video record\n"); - mStartMemory = getMediaserverVsize(); - output.write("Start memory : " + mStartMemory + "\n"); - Log.v(TAG, "first mem : " + mStartMemory); - for (int i = 0; i < NUM_STRESS_LOOP; i++) { stressVideoRecord(20, 352, 288, MediaRecorder.VideoEncoder.H263, MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, false); - getMemoryWriteToLog(output); + getMemoryWriteToLog(output, i); } output.write("\n"); memoryResult = validateMemoryResult(mStartPid, mStartMemory, output); @@ -488,13 +470,9 @@ public class MediaPlayerPerformance extends ActivityInstrumentationTestCase<Medi File audioOnlyMemoryOut = new File(MEDIA_MEMORY_OUTPUT); Writer output = new BufferedWriter(new FileWriter(audioOnlyMemoryOut, true)); output.write("Audio record only\n"); - mStartMemory = getMediaserverVsize(); - output.write("Start memory : " + mStartMemory + "\n"); - Log.v(TAG, "first mem : " + mStartMemory); - for (int i = 0; i < NUM_STRESS_LOOP; i++) { stressAudioRecord(MediaNames.RECORDER_OUTPUT); - getMemoryWriteToLog(output); + getMemoryWriteToLog(output, i); } output.write("\n"); memoryResult = validateMemoryResult(mStartPid, mStartMemory, output); diff --git a/services/java/com/android/server/HeadsetObserver.java b/services/java/com/android/server/HeadsetObserver.java index a935131bd8c2..9d695649a60c 100644 --- a/services/java/com/android/server/HeadsetObserver.java +++ b/services/java/com/android/server/HeadsetObserver.java @@ -103,6 +103,7 @@ class HeadsetObserver extends UEventObserver { // Retain only relevant bits int headsetState = newState & SUPPORTED_HEADSETS; int newOrOld = headsetState | mHeadsetState; + int delay = 0; // reject all suspect transitions: only accept state changes from: // - a: 0 heaset to 1 headset // - b: 1 headset to 0 headset @@ -117,21 +118,25 @@ class HeadsetObserver extends UEventObserver { if (headsetState == 0) { Intent intent = new Intent(AudioManager.ACTION_AUDIO_BECOMING_NOISY); mContext.sendBroadcast(intent); - // It can take hundreds of ms flush the audio pipeline after // apps pause audio playback, but audio route changes are // immediate, so delay the route change by 1000ms. // This could be improved once the audio sub-system provides an // interface to clear the audio pipeline. - mWakeLock.acquire(); - mHandler.sendMessageDelayed(mHandler.obtainMessage(0, - mHeadsetState, - mPrevHeadsetState, - mHeadsetName), - 1000); + delay = 1000; } else { - sendIntents(mHeadsetState, mPrevHeadsetState, mHeadsetName); + // Insert the same delay for headset connection so that the connection event is not + // broadcast before the disconnection event in case of fast removal/insertion + if (mHandler.hasMessages(0)) { + delay = 1000; + } } + mWakeLock.acquire(); + mHandler.sendMessageDelayed(mHandler.obtainMessage(0, + mHeadsetState, + mPrevHeadsetState, + mHeadsetName), + delay); } private synchronized final void sendIntents(int headsetState, int prevHeadsetState, String headsetName) { diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java index 3bf76d4623d6..5034e1611ce1 100644 --- a/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java +++ b/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java @@ -96,6 +96,12 @@ final class GsmServiceStateTracker extends ServiceStateTracker { */ private boolean mDataRoaming = false; + /** + * Mark when service state is in emergency call only mode + */ + private boolean mEmergencyOnly = false; + private boolean mNewEmergencyOnly = false; + private RegistrantList gprsAttachedRegistrants = new RegistrantList(); private RegistrantList gprsDetachedRegistrants = new RegistrantList(); private RegistrantList psRestrictEnabledRegistrants = new RegistrantList(); @@ -550,6 +556,11 @@ final class GsmServiceStateTracker extends ServiceStateTracker { String spn = phone.mSIMRecords.getServiceProviderName(); String plmn = ss.getOperatorAlphaLong(); + // For emergency calls only, pass the EmergencyCallsOnly string via EXTRA_PLMN + if (mEmergencyOnly && cm.getRadioState().isOn()) { + plmn = phone.getContext().getText(com.android.internal.R.string.emergency_calls_only).toString(); + } + if (rule != curSpnRule || !TextUtils.equals(spn, curSpn) || !TextUtils.equals(plmn, curPlmn)) { @@ -557,6 +568,10 @@ final class GsmServiceStateTracker extends ServiceStateTracker { (rule & SIMRecords.SPN_RULE_SHOW_SPN) == SIMRecords.SPN_RULE_SHOW_SPN; boolean showPlmn = (rule & SIMRecords.SPN_RULE_SHOW_PLMN) == SIMRecords.SPN_RULE_SHOW_PLMN; + + if (mEmergencyOnly) + showPlmn = true; + Intent intent = new Intent(Intents.SPN_STRINGS_UPDATED_ACTION); intent.putExtra(Intents.EXTRA_SHOW_SPN, showSpn); intent.putExtra(Intents.EXTRA_SPN, spn); @@ -564,6 +579,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker { intent.putExtra(Intents.EXTRA_PLMN, plmn); phone.getContext().sendStickyBroadcast(intent); } + curSpnRule = rule; curSpn = spn; curPlmn = plmn; @@ -629,6 +645,13 @@ final class GsmServiceStateTracker extends ServiceStateTracker { mGsmRoaming = regCodeIsRoaming(regState); newSS.setState (regCodeToServiceState(regState)); + + if (regState == 10 || regState == 12 || regState == 13 || regState == 14) { + mNewEmergencyOnly = true; + } else { + mNewEmergencyOnly = false; + } + // LAC and CID are -1 if not avail newCellLoc.setLacAndCid(lac, cid); break; @@ -838,6 +861,8 @@ final class GsmServiceStateTracker extends ServiceStateTracker { boolean hasLocationChanged = !newCellLoc.equals(cellLoc); + boolean hasEmergencyOnlyChanged = mNewEmergencyOnly != mEmergencyOnly; + ServiceState tss; tss = ss; ss = newSS; @@ -849,6 +874,8 @@ final class GsmServiceStateTracker extends ServiceStateTracker { cellLoc = newCellLoc; newCellLoc = tcl; + mEmergencyOnly = mNewEmergencyOnly; + // Add an event log when network type switched // TODO: we may add filtering to reduce the event logged, @@ -948,10 +975,13 @@ final class GsmServiceStateTracker extends ServiceStateTracker { phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ISROAMING, ss.getRoaming() ? "true" : "false"); - updateSpnDisplay(); phone.notifyServiceStateChanged(ss); } + if (hasChanged || hasEmergencyOnlyChanged) { + updateSpnDisplay(); + } + if (hasGprsAttached) { gprsAttachedRegistrants.notifyRegistrants(); } @@ -1198,6 +1228,10 @@ final class GsmServiceStateTracker extends ServiceStateTracker { case 2: // 2 is "searching" case 3: // 3 is "registration denied" case 4: // 4 is "unknown" no vaild in current baseband + case 10:// same as 0, but indicates that emergency call is possible. + case 12:// same as 2, but indicates that emergency call is possible. + case 13:// same as 3, but indicates that emergency call is possible. + case 14:// same as 4, but indicates that emergency call is possible. return ServiceState.STATE_OUT_OF_SERVICE; case 1: diff --git a/telephony/java/com/android/internal/telephony/gsm/UsimPhoneBookManager.java b/telephony/java/com/android/internal/telephony/gsm/UsimPhoneBookManager.java index d27f240dd6d5..9caae3d6cbc4 100644 --- a/telephony/java/com/android/internal/telephony/gsm/UsimPhoneBookManager.java +++ b/telephony/java/com/android/internal/telephony/gsm/UsimPhoneBookManager.java @@ -282,7 +282,7 @@ public class UsimPhoneBookManager extends Handler implements IccConstants { private void readAdnFileAndWait(int recNum) { Map <Integer,Integer> fileIds; fileIds = mPbrFile.mFileIds.get(recNum); - if (fileIds == null) return; + if (fileIds == null || fileIds.isEmpty()) return; mAdnCache.requestLoadAllAdnLike(fileIds.get(USIM_EFADN_TAG), fileIds.get(USIM_EFEXT1_TAG), obtainMessage(EVENT_USIM_ADN_LOAD_DONE)); |