auto import from //branches/cupcake_rel/...@140373
The Android Open Source Project [Thu, 19 Mar 2009 00:39:48 +0000 (17:39 -0700)]
24 files changed:
res/layout/sim_ndp.xml
res/values-cs/strings.xml
res/values-de/strings.xml
res/values-es/strings.xml
res/values-fr/strings.xml
res/values-it/strings.xml
res/values-ja/strings.xml
res/values-ko/strings.xml
res/values-nb/strings.xml
res/values-nl/strings.xml
res/values-pl/strings.xml
res/values-ru/strings.xml
res/values-zh-rCN/strings.xml
res/values-zh-rTW/strings.xml
res/values/strings.xml
src/com/android/phone/BluetoothHandsfree.java
src/com/android/phone/BluetoothHeadsetService.java
src/com/android/phone/CallCard.java
src/com/android/phone/CallNotifier.java
src/com/android/phone/NotificationMgr.java
src/com/android/phone/PhoneApp.java
src/com/android/phone/Ringer.java
src/com/android/phone/SimContacts.java
src/com/android/phone/SimNetworkDepersonalizationPanel.java

index 7a42c8a..27f16bd 100644 (file)
@@ -14,6 +14,7 @@
      limitations under the License.
 -->
 
+<!-- Layout for the Phone app's SimNetworkDepersonalizationPanel. -->
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
                 android:text="@string/label_ndp"/>
 
         <EditText android:id="@+id/pin_entry"
-                android:maxLines="1"
+                android:inputType="textPassword"
+                android:imeOptions="actionDone"
                 android:layout_marginTop="8dip"
-                android:capitalize="none"
-                android:autoText="false"
                 android:layout_width="fill_parent"
                 android:layout_height="wrap_content"
-                android:scrollHorizontally="true"
-                android:password="true" />
+                android:scrollHorizontally="true" />
             
-        <RelativeLayout
-                android:layout_marginTop="10dip"
+        <Button android:id="@+id/ndp_unlock"
+                android:layout_gravity="center_horizontal"
+                android:text="@string/sim_ndp_unlock_text"
                 android:layout_width="wrap_content"
-                android:layout_height="wrap_content" >
-
-            <Button android:id="@+id/ndp_unlock"
-                    android:gravity="center_horizontal"
-                    android:text="@string/sim_ndp_unlock_text"
-                    android:layout_width="150dip"
-                    android:layout_height="wrap_content"
-                    android:layout_centerHorizontal="true" />
+                android:layout_height="wrap_content"
+                android:paddingLeft="20dip"
+                android:paddingRight="20dip"
+                android:layout_centerHorizontal="true" />
 
-            <Button android:id="@+id/ndp_dismiss"
-                    android:gravity="center_horizontal"
-                    android:text="@string/sim_ndp_dismiss_text"
-                    android:layout_marginTop="3dip"
-                    android:layout_width="150dip"
-                    android:layout_height="wrap_content"
-                    android:layout_centerHorizontal="true"
-                    android:layout_below="@+id/ndp_unlock"/>
-                    
-        </RelativeLayout>
-        
     </LinearLayout>
 
     <LinearLayout android:id="@+id/status_panel"
index 59d0b3e..fc8b8d5 100644 (file)
@@ -24,6 +24,8 @@
     <string name="fdnListLabel">"Seznam povolených telefonních čísel"</string>
     <string name="unknown">"Neznámý volající"</string>
     <string name="private_num">"Soukromé číslo"</string>
+    <!-- no translation found for payphone (1931775086311769314) -->
+    <skip />
     <string name="onHold">"Přidržený hovor"</string>
     <string name="ongoing">"Aktuální hovor"</string>
     <string name="callFailed_userBusy">"Linka je obsazená."</string>
     <string name="callFailed_outOfService">"Nepokrytá oblast."</string>
     <string name="callFailed_fdn_only">"Odchozí hovory jsou omezeny na povolená telefonní čísla."</string>
     <string name="callFailed_cb_enabled">"Pokud je zapnuto blokování hovorů, nelze provádět odchozí hovory."</string>
+    <!-- no translation found for callFailed_dsac_restricted (2180223622768522345) -->
+    <skip />
+    <!-- no translation found for callFailed_dsac_restricted_emergency (4353654268813314466) -->
+    <skip />
+    <!-- no translation found for callFailed_dsac_restricted_normal (2680774510252408620) -->
+    <skip />
     <string name="confCall">"Konferenční hovor"</string>
     <string name="mmiStarted">"Kód MMI byl spuštěn"</string>
     <string name="ussdRunning">"Kód USSD je spuštěn..."</string>
@@ -89,6 +97,8 @@
     <string name="networks">"Síťoví operátoři"</string>
     <string name="call_settings">"Nastavení hovorů"</string>
     <string name="additional_call_settings">"Další nastavení hovorů"</string>
+    <!-- no translation found for labelNwService (4699970172021870983) -->
+    <skip />
     <string name="labelCallerId">"ID volajícího"</string>
     <string name="sum_hide_caller_id">"Číslo je v odchozích hovorech skryto"</string>
     <string name="sum_show_caller_id">"Číslo je v odchozích hovorech zobrazeno"</string>
index 36975c9..4e3f29d 100644 (file)
@@ -24,6 +24,8 @@
     <string name="fdnListLabel">"Beschränkte Rufnummern"</string>
     <string name="unknown">"Unbekannt"</string>
     <string name="private_num">"Private Nummer"</string>
+    <!-- no translation found for payphone (1931775086311769314) -->
+    <skip />
     <string name="onHold">"Gehaltener Anruf"</string>
     <string name="ongoing">"Aktueller Anruf"</string>
     <string name="callFailed_userBusy">"Leitung besetzt"</string>
     <string name="callFailed_outOfService">"Gebiet ohne Netzabdeckung"</string>
     <string name="callFailed_fdn_only">"Ausgehende Anrufe unterliegen der Nummernbeschränkung."</string>
     <string name="callFailed_cb_enabled">"Sie können keine Anrufe tätigen, wenn die Anrufsperre aktiviert ist."</string>
+    <!-- no translation found for callFailed_dsac_restricted (2180223622768522345) -->
+    <skip />
+    <!-- no translation found for callFailed_dsac_restricted_emergency (4353654268813314466) -->
+    <skip />
+    <!-- no translation found for callFailed_dsac_restricted_normal (2680774510252408620) -->
+    <skip />
     <string name="confCall">"Telefonkonferenz"</string>
     <string name="mmiStarted">"MMI-Code gestartet"</string>
     <string name="ussdRunning">"USSD-Code wird ausgeführt..."</string>
@@ -89,6 +97,8 @@
     <string name="networks">"Netzbetreiber"</string>
     <string name="call_settings">"Anrufeinstellungen"</string>
     <string name="additional_call_settings">"Zusätzliche Anrufeinst."</string>
+    <!-- no translation found for labelNwService (4699970172021870983) -->
+    <skip />
     <string name="labelCallerId">"Anrufer-ID"</string>
     <string name="sum_hide_caller_id">"Nummer bei abgehenden Anrufen unterdrückt"</string>
     <string name="sum_show_caller_id">"Nummer bei abgehenden Anrufen angezeigt"</string>
index 29f7397..c4f17a1 100644 (file)
@@ -24,6 +24,8 @@
     <string name="fdnListLabel">"Lista de FDN"</string>
     <string name="unknown">"Desconocido"</string>
     <string name="private_num">"Número privado"</string>
+    <!-- no translation found for payphone (1931775086311769314) -->
+    <skip />
     <string name="onHold">"En espera"</string>
     <string name="ongoing">"Llamada actual"</string>
     <string name="callFailed_userBusy">"Línea ocupada"</string>
     <string name="callFailed_outOfService">"Área fuera de servicio"</string>
     <string name="callFailed_fdn_only">"Las llamadas salientes están restringidas por FDN."</string>
     <string name="callFailed_cb_enabled">"No se pueden realizar llamadas salientes mientras esté activada la restricción de llamadas."</string>
+    <!-- no translation found for callFailed_dsac_restricted (2180223622768522345) -->
+    <skip />
+    <!-- no translation found for callFailed_dsac_restricted_emergency (4353654268813314466) -->
+    <skip />
+    <!-- no translation found for callFailed_dsac_restricted_normal (2680774510252408620) -->
+    <skip />
     <string name="confCall">"Conferencia telefónica"</string>
     <string name="mmiStarted">"El código MMI se ha iniciado."</string>
     <string name="ussdRunning">"Código USSD en ejecución..."</string>
@@ -89,6 +97,8 @@
     <string name="networks">"Operadores de red"</string>
     <string name="call_settings">"Ajustes de llamadas"</string>
     <string name="additional_call_settings">"Configuración adicional"</string>
+    <!-- no translation found for labelNwService (4699970172021870983) -->
+    <skip />
     <string name="labelCallerId">"ID del emisor"</string>
     <string name="sum_hide_caller_id">"Número oculto en llamadas salientes"</string>
     <string name="sum_show_caller_id">"Número mostrado en llamadas salientes"</string>
     <string name="sum_cfu_disabled">"Inhabilitado"</string>
     <string name="labelCFB">"Línea ocupada"</string>
     <string name="messageCFB">"Número cuando la línea esté ocupada"</string>
-    <string name="sum_cfb_enabled">"Desviando a \\\\{0\\\\}"</string>
+    <string name="sum_cfb_enabled">"Desviando a {0}"</string>
     <string name="sum_cfb_disabled">"Inhabilitado"</string>
     <string name="labelCFNRy">"Llamada sin respuesta"</string>
     <string name="messageCFNRy">"Número cuando no se responde la llamada"</string>
-    <string name="sum_cfnry_enabled">"Desviando a \\\\{0\\\\}"</string>
+    <string name="sum_cfnry_enabled">"Desviando a {0}"</string>
     <string name="sum_cfnry_disabled">"Inhabilitado"</string>
     <string name="labelCFNRc">"No se establece la llamada"</string>
     <string name="messageCFNRc">"Número cuando no se puede establecer la llamada"</string>
-    <string name="sum_cfnrc_enabled">"Desviando a \\\\{0\\\\}"</string>
+    <string name="sum_cfnrc_enabled">"Desviando a {0}"</string>
     <string name="sum_cfnrc_disabled">"Inhabilitado"</string>
     <string name="updating_title">"Ajustes de llamadas"</string>
     <string name="error_updating_title">"Error de configuración de llamada"</string>
index 4902089..c621875 100644 (file)
@@ -24,6 +24,8 @@
     <string name="fdnListLabel">"Liste de numéros autorisés"</string>
     <string name="unknown">"Inconnu"</string>
     <string name="private_num">"Numéro privé"</string>
+    <!-- no translation found for payphone (1931775086311769314) -->
+    <skip />
     <string name="onHold">"En attente"</string>
     <string name="ongoing">"Appel en cours"</string>
     <string name="callFailed_userBusy">"Ligne occupée"</string>
     <string name="callFailed_outOfService">"Hors zone de couverture"</string>
     <string name="callFailed_fdn_only">"Les appels sortants sont restreints par la liste de numéros autorisés."</string>
     <string name="callFailed_cb_enabled">"Vous ne pouvez pas passer d\'appels sortants tant que l\'interdiction d\'appel est activée."</string>
+    <!-- no translation found for callFailed_dsac_restricted (2180223622768522345) -->
+    <skip />
+    <!-- no translation found for callFailed_dsac_restricted_emergency (4353654268813314466) -->
+    <skip />
+    <!-- no translation found for callFailed_dsac_restricted_normal (2680774510252408620) -->
+    <skip />
     <string name="confCall">"Conférence téléphonique"</string>
     <string name="mmiStarted">"Le code MMI a été lancé."</string>
     <string name="ussdRunning">"Exécution du code USSD..."</string>
     <string name="add_vm_number_str">"Ajouter un numéro"</string>
     <string name="dialer_emptyListWorking">"Chargement..."</string>
     <string name="enterPin">"Saisissez un code PIN pour débloquer la carte SIM."</string>
-    <string name="pinUnlocked">"Carte SIM débloquée"</string>
+    <string name="pinUnlocked">"Carte SIM déverrouillée"</string>
     <string name="enterNewPin">"Nouveau code PIN de la carte SIM"</string>
     <string name="verifyNewPin">"Saisissez une nouvelle fois le nouveau code PIN de la carte SIM pour le confirmer"</string>
     <string name="verifyFailed">"Les codes PIN de la carte SIM saisis ne correspondent pas. Veuillez réessayer."</string>
     <string name="enterPuk">"Saisissez le code PUK pour débloquer la carte SIM"</string>
     <string name="badPuk">"Le code PUK est incorrect !"</string>
     <string name="buttonTxtContinue">"Continuer"</string>
-    <string name="puk_unlocked">"Votre carte SIM a été débloquée. Votre téléphone est en cours de déverrouillage..."</string>
+    <string name="puk_unlocked">"Votre carte SIM a été déverrouillée. Votre téléphone est en cours de déverrouillage..."</string>
     <string name="label_ndp">"Code PIN de déblocage du réseau SIM"</string>
     <string name="sim_ndp_unlock_text">"Débloquer"</string>
     <string name="sim_ndp_dismiss_text">"Rejeter"</string>
@@ -89,6 +97,8 @@
     <string name="networks">"Opérateur de réseau"</string>
     <string name="call_settings">"Paramètres d\'appel"</string>
     <string name="additional_call_settings">"Paramètres supplémentaires"</string>
+    <!-- no translation found for labelNwService (4699970172021870983) -->
+    <skip />
     <string name="labelCallerId">"Identifiant d\'appelant"</string>
     <string name="sum_hide_caller_id">"Numéro masqué pour les appels sortants"</string>
     <string name="sum_show_caller_id">"Numéro affiché pour les appels sortants"</string>
     <string name="disable_pin_ok">"Code PIN de la carte SIM désactivé"</string>
     <string name="pin_failed">"Le code PIN saisi était incorrect."</string>
     <string name="pin_changed">"Le code PIN de la carte SIM a bien été modifié."</string>
-    <string name="puk_requested">"Mot de passe incorrect. La carte SIM est bloquée ! Code PUK2 requis."</string>
+    <string name="puk_requested">"Mot de passe incorrect. La carte SIM est verrouillée ! Code PUK2 requis."</string>
     <string name="enter_pin2_text">"PIN2"</string>
     <string name="oldPin2Label">"Ancien code PIN2"</string>
     <string name="newPin2Label">"Nouveau code PIN2"</string>
     <string name="pin2_changed">"Le code PIN2 a été modifié."</string>
     <string name="label_puk2_code">"Saisissez le code PUK2."</string>
     <string name="fdn_enable_puk2_requested">"Le mot de passe est incorrect. Veuillez modifier le code PIN2 et réessayez."</string>
-    <string name="puk2_requested">"Mot de passe incorrect. La carte SIM est bloquée ! Code PUK2 requis."</string>
+    <string name="puk2_requested">"Mot de passe incorrect. La carte SIM est verrouillée ! Code PUK2 requis."</string>
     <string name="doneButton">"OK"</string>
     <string name="caller_manage_header">"Conférence téléphonique à <xliff:g id="CONF_CALL_TIME">%s</xliff:g>"</string>
     <string name="caller_manage_manage_done_text">"Retour à l\'appel"</string>
index 245ba01..bee9b15 100644 (file)
     <string name="dialerIconLabel">"Telefono"</string>
     <string name="emergencyDialerIconLabel">"Chiamata di emergenza"</string>
     <string name="phoneIconLabel">"Telefono"</string>
-    <string name="recentCallsIconLabel">"Reg. chiamate"</string>
+    <string name="recentCallsIconLabel">"Chiamate"</string>
     <string name="fdnListLabel">"Elenco FDN"</string>
     <string name="unknown">"Sconosciuto"</string>
     <string name="private_num">"Numero privato"</string>
+    <!-- no translation found for payphone (1931775086311769314) -->
+    <skip />
     <string name="onHold">"In attesa"</string>
     <string name="ongoing">"Chiamata corrente"</string>
     <string name="callFailed_userBusy">"Linea occupata"</string>
     <string name="callFailed_outOfService">"Area non coperta dal servizio"</string>
     <string name="callFailed_fdn_only">"Chiamate in uscita limitate da FDN."</string>
     <string name="callFailed_cb_enabled">"Impossibile effettuare chiamate in uscita con il blocco chiamate attivo."</string>
+    <!-- no translation found for callFailed_dsac_restricted (2180223622768522345) -->
+    <skip />
+    <!-- no translation found for callFailed_dsac_restricted_emergency (4353654268813314466) -->
+    <skip />
+    <!-- no translation found for callFailed_dsac_restricted_normal (2680774510252408620) -->
+    <skip />
     <string name="confCall">"Conferenza audio"</string>
     <string name="mmiStarted">"Codice MMI avviato"</string>
     <string name="ussdRunning">"Esecuzione codice USSD..."</string>
@@ -47,7 +55,7 @@
     <string name="menu_endCall">"Chiudi"</string>
     <string name="menu_swapCalls">"Scambia"</string>
     <string name="menu_mergeCalls">"Unisci"</string>
-    <string name="menu_addCall">"Aggiungi chiamata"</string>
+    <string name="menu_addCall">"Aggiungi"</string>
     <string name="menu_manageConference">"Gestisci conferenza audio"</string>
     <string name="menu_showDialpad">"Mostra tastierino"</string>
     <string name="menu_hideDialpad">"Nascondi tastierino"</string>
@@ -89,6 +97,8 @@
     <string name="networks">"Operatori di rete"</string>
     <string name="call_settings">"Impostazioni chiamate"</string>
     <string name="additional_call_settings">"Altre impostazioni chiamate"</string>
+    <!-- no translation found for labelNwService (4699970172021870983) -->
+    <skip />
     <string name="labelCallerId">"ID chiamante"</string>
     <string name="sum_hide_caller_id">"Numero nascosto per chiamate in uscita"</string>
     <string name="sum_show_caller_id">"Numero visualizzato in chiamate in uscita"</string>
index 11f5591..cc9edbd 100644 (file)
     <string name="contactsIconLabel">"連絡先"</string>
     <string name="contactsFavoritesLabel">"お気に入り"</string>
     <string name="dialerIconLabel">"電話"</string>
-    <string name="emergencyDialerIconLabel">"緊急呼"</string>
+    <string name="emergencyDialerIconLabel">"緊急通報"</string>
     <string name="phoneIconLabel">"電話"</string>
     <string name="recentCallsIconLabel">"通話履歴"</string>
     <string name="fdnListLabel">"発信番号制限リスト"</string>
     <string name="unknown">"不明"</string>
     <string name="private_num">"番号非通知"</string>
+    <!-- no translation found for payphone (1931775086311769314) -->
+    <skip />
     <string name="onHold">"保留中"</string>
     <string name="ongoing">"通話中"</string>
     <string name="callFailed_userBusy">"話し中"</string>
     <string name="callFailed_outOfService">"圏外"</string>
     <string name="callFailed_fdn_only">"発信番号制限により発信が制限されています。"</string>
     <string name="callFailed_cb_enabled">"発信できません。発信制限がかかっています。"</string>
+    <!-- no translation found for callFailed_dsac_restricted (2180223622768522345) -->
+    <skip />
+    <!-- no translation found for callFailed_dsac_restricted_emergency (4353654268813314466) -->
+    <skip />
+    <!-- no translation found for callFailed_dsac_restricted_normal (2680774510252408620) -->
+    <skip />
     <string name="confCall">"グループ通話"</string>
     <string name="mmiStarted">"MMIコードの開始"</string>
     <string name="ussdRunning">"USSDコードを実行中..."</string>
@@ -89,6 +97,8 @@
     <string name="networks">"ネットワークオペレーター"</string>
     <string name="call_settings">"通話設定"</string>
     <string name="additional_call_settings">"その他の通話設定"</string>
+    <!-- no translation found for labelNwService (4699970172021870983) -->
+    <skip />
     <string name="labelCallerId">"発信者番号"</string>
     <string name="sum_hide_caller_id">"発信時に番号を通知しない"</string>
     <string name="sum_show_caller_id">"発信時に番号を通知する"</string>
     <string name="incall_error_supp_service_conference">"グループ通話を利用できません。"</string>
     <string name="incall_error_supp_service_reject">"着信を拒否できません。"</string>
     <string name="incall_error_supp_service_hangup">"通話を解放できません。"</string>
-    <string name="emergency_enable_radio_dialog_title">"緊急呼"</string>
+    <string name="emergency_enable_radio_dialog_title">"緊急通報"</string>
     <string name="emergency_enable_radio_dialog_message">"無線通信をオンにしています..."</string>
     <string name="emergency_enable_radio_dialog_retry">"圏外 - 再試行中..."</string>
-    <string name="dial_emergency_error">"発信エラー: <xliff:g id="NON_EMERGENCY_NUMBER">%s</xliff:g>は緊急呼番号ではありません。"</string>
-    <string name="dial_emergency_empty_error">"発信エラー: 緊急呼番号をダイヤルしてください。"</string>
+    <string name="dial_emergency_error">"<xliff:g id="NON_EMERGENCY_NUMBER">%s</xliff:g>は緊急通報番号ではないので発信できません。"</string>
+    <string name="dial_emergency_empty_error">"発信できません。緊急通報番号におかけください。"</string>
     <string name="dialerKeyboardHintText">"キーボードで番号を入力してください"</string>
     <string name="dtmfDialpadHintText">"タッチトーンキーパッド"</string>
     <string name="touchLockText">"ロックを解除するには"\n"をダブルタップ"</string>
index 743bbba..851ba78 100644 (file)
@@ -24,6 +24,8 @@
     <string name="fdnListLabel">"FDN 목록"</string>
     <string name="unknown">"알 수 없음"</string>
     <string name="private_num">"발신자 표시제한"</string>
+    <!-- no translation found for payphone (1931775086311769314) -->
+    <skip />
     <string name="onHold">"대기 중"</string>
     <string name="ongoing">"현재 통화"</string>
     <string name="callFailed_userBusy">"통화 중입니다."</string>
     <string name="callFailed_outOfService">"서비스 지역을 벗어났습니다."</string>
     <string name="callFailed_fdn_only">"발신전화가 FDN으로 제한됩니다."</string>
     <string name="callFailed_cb_enabled">"착발신 제한이 설정되어 있는 동안에는 전화를 걸 수 없습니다."</string>
+    <!-- no translation found for callFailed_dsac_restricted (2180223622768522345) -->
+    <skip />
+    <!-- no translation found for callFailed_dsac_restricted_emergency (4353654268813314466) -->
+    <skip />
+    <!-- no translation found for callFailed_dsac_restricted_normal (2680774510252408620) -->
+    <skip />
     <string name="confCall">"다자간 통화"</string>
     <string name="mmiStarted">"MMI 코드 시작됨"</string>
     <string name="ussdRunning">"USSD 코드 실행 중..."</string>
@@ -89,6 +97,8 @@
     <string name="networks">"네트워크 운영자"</string>
     <string name="call_settings">"통화 설정"</string>
     <string name="additional_call_settings">"추가 통화 설정"</string>
+    <!-- no translation found for labelNwService (4699970172021870983) -->
+    <skip />
     <string name="labelCallerId">"발신자 번호"</string>
     <string name="sum_hide_caller_id">"발신전화의 번호 숨김"</string>
     <string name="sum_show_caller_id">"발신전화의 번호 표시"</string>
index 57fb00f..2da140e 100644 (file)
@@ -24,6 +24,8 @@
     <string name="fdnListLabel">"Faste nummer"</string>
     <string name="unknown">"Ukjent"</string>
     <string name="private_num">"Hemmelig nummer"</string>
+    <!-- no translation found for payphone (1931775086311769314) -->
+    <skip />
     <string name="onHold">"Parkert"</string>
     <string name="ongoing">"Aktiv samtale"</string>
     <string name="callFailed_userBusy">"Opptatt"</string>
     <string name="callFailed_outOfService">"Utenfor dekningsområde"</string>
     <string name="callFailed_fdn_only">"Utgående samtaler er begrenset til faste nummer."</string>
     <string name="callFailed_cb_enabled">"Du kan ikke ringe ut mens samtaleblokkering er på."</string>
+    <!-- no translation found for callFailed_dsac_restricted (2180223622768522345) -->
+    <skip />
+    <!-- no translation found for callFailed_dsac_restricted_emergency (4353654268813314466) -->
+    <skip />
+    <!-- no translation found for callFailed_dsac_restricted_normal (2680774510252408620) -->
+    <skip />
     <string name="confCall">"Telefonmøte"</string>
     <string name="mmiStarted">"MMI-kode påbegynt"</string>
     <string name="ussdRunning">"USSD-kode kjører…"</string>
@@ -89,6 +97,8 @@
     <string name="networks">"Nettoperatører"</string>
     <string name="call_settings">"Samtaleinnstillinger"</string>
     <string name="additional_call_settings">"Flere innstillinger"</string>
+    <!-- no translation found for labelNwService (4699970172021870983) -->
+    <skip />
     <string name="labelCallerId">"Nummervisning"</string>
     <string name="sum_hide_caller_id">"Skjul nummer ved utgående samtaler"</string>
     <string name="sum_show_caller_id">"Vis nummer ved utgående samtaler"</string>
index 250a512..29b2636 100644 (file)
@@ -24,6 +24,8 @@
     <string name="fdnListLabel">"FDN-lijst"</string>
     <string name="unknown">"Onbekend"</string>
     <string name="private_num">"Privénummer"</string>
+    <!-- no translation found for payphone (1931775086311769314) -->
+    <skip />
     <string name="onHold">"In de wacht"</string>
     <string name="ongoing">"Huidige oproep"</string>
     <string name="callFailed_userBusy">"Lijn is bezet"</string>
     <string name="callFailed_outOfService">"Buiten servicegebied"</string>
     <string name="callFailed_fdn_only">"Uitgaande oproepen worden beperkt door FDN."</string>
     <string name="callFailed_cb_enabled">"Uitgaande oproepen zijn niet mogelijk als de functie voor oproepen blokkeren is ingeschakeld."</string>
+    <!-- no translation found for callFailed_dsac_restricted (2180223622768522345) -->
+    <skip />
+    <!-- no translation found for callFailed_dsac_restricted_emergency (4353654268813314466) -->
+    <skip />
+    <!-- no translation found for callFailed_dsac_restricted_normal (2680774510252408620) -->
+    <skip />
     <string name="confCall">"Telefonische vergadering"</string>
     <string name="mmiStarted">"MMI-code gestart"</string>
     <string name="ussdRunning">"USSD-code uitvoeren..."</string>
@@ -89,6 +97,8 @@
     <string name="networks">"Mobiele providers"</string>
     <string name="call_settings">"Oproepinstellingen"</string>
     <string name="additional_call_settings">"Aanvullende oproepinstellingen"</string>
+    <!-- no translation found for labelNwService (4699970172021870983) -->
+    <skip />
     <string name="labelCallerId">"Beller-id"</string>
     <string name="sum_hide_caller_id">"Nummer verborgen bij uitgaande oproepen"</string>
     <string name="sum_show_caller_id">"Nummer weergegeven bij uitgaande oproepen"</string>
index ce7b01f..9529b76 100644 (file)
@@ -24,6 +24,8 @@
     <string name="fdnListLabel">"Ustalone numery (FDN)"</string>
     <string name="unknown">"Nieznany"</string>
     <string name="private_num">"Numer prywatny"</string>
+    <!-- no translation found for payphone (1931775086311769314) -->
+    <skip />
     <string name="onHold">"Oczekujące"</string>
     <string name="ongoing">"Bieżące połączenie"</string>
     <string name="callFailed_userBusy">"Linia jest zajęta"</string>
     <string name="callFailed_outOfService">"Obszar nieobsługiwany"</string>
     <string name="callFailed_fdn_only">"Połączenia są ograniczone do ustalonych numerów (FDN)."</string>
     <string name="callFailed_cb_enabled">"Nie można wykonywać połączeń wychodzących, gdy włączona jest blokada dzwonienia."</string>
+    <!-- no translation found for callFailed_dsac_restricted (2180223622768522345) -->
+    <skip />
+    <!-- no translation found for callFailed_dsac_restricted_emergency (4353654268813314466) -->
+    <skip />
+    <!-- no translation found for callFailed_dsac_restricted_normal (2680774510252408620) -->
+    <skip />
     <string name="confCall">"Rozmowa konferencyjna"</string>
     <string name="mmiStarted">"Kod MMI został rozpoczęty"</string>
     <string name="ussdRunning">"Uruchomiony kod USSD..."</string>
@@ -89,6 +97,8 @@
     <string name="networks">"Operatorzy sieci"</string>
     <string name="call_settings">"Ustawienia połączeń"</string>
     <string name="additional_call_settings">"Dodatkowe ustawienia"</string>
+    <!-- no translation found for labelNwService (4699970172021870983) -->
+    <skip />
     <string name="labelCallerId">"ID dzwoniącego"</string>
     <string name="sum_hide_caller_id">"Ukrycie numeru podczas rozmów wychodzących"</string>
     <string name="sum_show_caller_id">"Numer wyświetlany w połączeniach wychodzących"</string>
index b2574f8..27bcb1a 100644 (file)
@@ -24,6 +24,8 @@
     <string name="fdnListLabel">"Список номеров с фиксированным набором"</string>
     <string name="unknown">"Неизвестно"</string>
     <string name="private_num">"Частный номер"</string>
+    <!-- no translation found for payphone (1931775086311769314) -->
+    <skip />
     <string name="onHold">"Удерживается"</string>
     <string name="ongoing">"Текущий вызов"</string>
     <string name="callFailed_userBusy">"Линия занята"</string>
     <string name="callFailed_outOfService">"Вне зоны обслуживания"</string>
     <string name="callFailed_fdn_only">"Исходящие вызовы ограничены фиксированным набором."</string>
     <string name="callFailed_cb_enabled">"Пока включен запрет вызовов, выполнять исходящие вызовы невозможно."</string>
+    <!-- no translation found for callFailed_dsac_restricted (2180223622768522345) -->
+    <skip />
+    <!-- no translation found for callFailed_dsac_restricted_emergency (4353654268813314466) -->
+    <skip />
+    <!-- no translation found for callFailed_dsac_restricted_normal (2680774510252408620) -->
+    <skip />
     <string name="confCall">"Конференц-связь"</string>
     <string name="mmiStarted">"Запущен код MMI"</string>
     <string name="ussdRunning">"Выполняется код USSD…"</string>
@@ -89,6 +97,8 @@
     <string name="networks">"Операторы сети"</string>
     <string name="call_settings">"Настройки вызовов"</string>
     <string name="additional_call_settings">"Дополнительные настройки вызовов"</string>
+    <!-- no translation found for labelNwService (4699970172021870983) -->
+    <skip />
     <string name="labelCallerId">"Идентификатор звонящего"</string>
     <string name="sum_hide_caller_id">"При исходящих вызовах номер скрыт"</string>
     <string name="sum_show_caller_id">"При исходящих вызовах номер отображается"</string>
index 7f6dfe0..85a90ca 100644 (file)
@@ -24,6 +24,8 @@
     <string name="fdnListLabel">"FDN 列表"</string>
     <string name="unknown">"未知"</string>
     <string name="private_num">"私人号码"</string>
+    <!-- no translation found for payphone (1931775086311769314) -->
+    <skip />
     <string name="onHold">"保持"</string>
     <string name="ongoing">"当前通话"</string>
     <string name="callFailed_userBusy">"占线"</string>
     <string name="callFailed_outOfService">"不在服务区"</string>
     <string name="callFailed_fdn_only">"去电受 FDN 的限制。"</string>
     <string name="callFailed_cb_enabled">"不能在呼叫禁止开启时拨打电话。"</string>
+    <!-- no translation found for callFailed_dsac_restricted (2180223622768522345) -->
+    <skip />
+    <!-- no translation found for callFailed_dsac_restricted_emergency (4353654268813314466) -->
+    <skip />
+    <!-- no translation found for callFailed_dsac_restricted_normal (2680774510252408620) -->
+    <skip />
     <string name="confCall">"会议通话"</string>
     <string name="mmiStarted">"MMI 码已启动"</string>
     <string name="ussdRunning">"USSD 码正在运行..."</string>
@@ -89,6 +97,8 @@
     <string name="networks">"网络运营商"</string>
     <string name="call_settings">"通话设置"</string>
     <string name="additional_call_settings">"其他通话设置"</string>
+    <!-- no translation found for labelNwService (4699970172021870983) -->
+    <skip />
     <string name="labelCallerId">"呼叫者 ID"</string>
     <string name="sum_hide_caller_id">"去电中隐藏的号码"</string>
     <string name="sum_show_caller_id">"去电中显示的号码"</string>
index f6fb4f6..7f2fbf0 100644 (file)
@@ -24,6 +24,8 @@
     <string name="fdnListLabel">"限制撥號號碼清單"</string>
     <string name="unknown">"未知"</string>
     <string name="private_num">"私人號碼"</string>
+    <!-- no translation found for payphone (1931775086311769314) -->
+    <skip />
     <string name="onHold">"通話保留"</string>
     <string name="ongoing">"目前通話"</string>
     <string name="callFailed_userBusy">"線路忙碌中"</string>
     <string name="callFailed_outOfService">"超出服務範圍"</string>
     <string name="callFailed_fdn_only">"發話受到限制撥號號碼管制。"</string>
     <string name="callFailed_cb_enabled">"通話限制啟用時,不允許對外撥號。"</string>
+    <!-- no translation found for callFailed_dsac_restricted (2180223622768522345) -->
+    <skip />
+    <!-- no translation found for callFailed_dsac_restricted_emergency (4353654268813314466) -->
+    <skip />
+    <!-- no translation found for callFailed_dsac_restricted_normal (2680774510252408620) -->
+    <skip />
     <string name="confCall">"多方通話"</string>
     <string name="mmiStarted">"MMI 碼已開始"</string>
     <string name="ussdRunning">"USSD 碼執行中..."</string>
@@ -89,6 +97,8 @@
     <string name="networks">"電信業者"</string>
     <string name="call_settings">"通話設定"</string>
     <string name="additional_call_settings">"其他通話設定"</string>
+    <!-- no translation found for labelNwService (4699970172021870983) -->
+    <skip />
     <string name="labelCallerId">"本機號碼"</string>
     <string name="sum_hide_caller_id">"隱藏發話號碼"</string>
     <string name="sum_show_caller_id">"顯示發話號碼"</string>
index 9f8fa6c..e31b82e 100644 (file)
@@ -36,6 +36,8 @@
     <string name="unknown">Unknown</string>
     <!-- Incoming call screen, string when number hidden -->
     <string name="private_num">Private number</string>
+    <!-- Incoming call screen, string when called from a pay phone -->
+    <string name="payphone">Pay phone</string>
     <!-- In-call screen: status label for a call that's on hold -->
     <string name="onHold">On hold</string>
     <!-- In-call screen: status label for the current active call -->
     <string name="call_settings">Call settings</string>
     <!-- Call settings screen, setting option name -->
     <string name="additional_call_settings">Additional call settings</string>
+    <!-- Call settings screen, network service setting name -->
+    <string name="labelNwService">Network service settings</string>
     <!-- Call settings screen, setting option name -->
     <string name="labelCallerId">Caller ID</string>
     <!-- Additional call settings screen, setting summary text when Caller ID is hidden -->
index f6fdbe0..7a40a97 100644 (file)
@@ -164,14 +164,12 @@ public class BluetoothHandsfree {
                      BRSF_AG_EC_NR |
                      BRSF_AG_REJECT_CALL |
                      BRSF_AG_ENHANCED_CALL_STATUS;
-       
+
         if (sVoiceCommandIntent == null) {
             sVoiceCommandIntent = new Intent(Intent.ACTION_VOICE_COMMAND);
             sVoiceCommandIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-            sVoiceCommandIntent.putExtra(Intent.EXTRA_AUDIO_ROUTE,
-                                         AudioManager.ROUTE_BLUETOOTH_SCO);
         }
-        
+
         if (mContext.getPackageManager().resolveActivity(sVoiceCommandIntent, 0) != null) {
             mLocalBrsf |= BRSF_AG_VOICE_RECOG;
         }
@@ -552,9 +550,14 @@ public class BluetoothHandsfree {
             if (mCallsetup != callsetup) {
                 mCallsetup = callsetup;
                 if (sendUpdate) {
-                    // don't send +CIEV for callsetup while in-call if 3way not supported
-                    if (!(mCall == 1 && mCallsetup != 0 &&
-                         (mRemoteBrsf & BRSF_HF_CW_THREE_WAY_CALLING) == 0x0)) {
+                    // If mCall = 0, send CIEV
+                    // mCall = 1, mCallsetup = 0, send CIEV
+                    // mCall = 1, mCallsetup = 1, send CIEV after CCWA,
+                    // if 3 way supported.
+                    // mCall = 1, mCallsetup = 2 / 3 -> send CIEV,
+                    // if 3 way is supported
+                    if (mCall != 1 || mCallsetup == 0 ||
+                        mCallsetup != 1 && (mRemoteBrsf & BRSF_HF_CW_THREE_WAY_CALLING) != 0x0) {
                         result.addResponse("+CIEV: 3," + mCallsetup);
                     }
                 }
@@ -598,6 +601,7 @@ public class BluetoothHandsfree {
                     // call waiting
                     if ((mRemoteBrsf & BRSF_HF_CW_THREE_WAY_CALLING) != 0x0) {
                         result.addResponse("+CCWA: \"" + number + "\"," + type);
+                        result.addResponse("+CIEV: 3," + callsetup);
                     }
                 } else {
                     // regular new incoming call
index 8905cef..67ca2a8 100644 (file)
@@ -101,8 +101,7 @@ public class BluetoothHeadsetService extends Service {
         }
         IntentFilter filter = new IntentFilter(
                 BluetoothIntent.REMOTE_DEVICE_DISCONNECT_REQUESTED_ACTION);
-        filter.addAction(BluetoothIntent.ENABLED_ACTION);
-        filter.addAction(BluetoothIntent.DISABLED_ACTION);
+        filter.addAction(BluetoothIntent.BLUETOOTH_STATE_CHANGED_ACTION);
         filter.addAction(BluetoothIntent.BOND_STATE_CHANGED_ACTION);
         filter.addAction(AudioManager.VOLUME_CHANGED_ACTION);
         registerReceiver(mBluetoothIntentReceiver, filter);
@@ -271,15 +270,21 @@ public class BluetoothHeadsetService extends Service {
                 try {
                     mBinder.disconnectHeadset();
                 } catch (RemoteException e) {}
-            } else if (action.equals(BluetoothIntent.ENABLED_ACTION)) {
-                mHeadsetPriority.load();
-                mHandler.sendMessageDelayed(mHandler.obtainMessage(RECONNECT_LAST_HEADSET), 8000);
-                mAg.start(mIncomingConnectionHandler);
-                mBtHandsfree.onBluetoothEnabled();
-            } else if (action.equals(BluetoothIntent.DISABLED_ACTION)) {
-                mBtHandsfree.onBluetoothDisabled();
-                mAg.stop();
-                setState(BluetoothHeadset.STATE_DISCONNECTED, BluetoothHeadset.RESULT_FAILURE);
+            } else if (action.equals(BluetoothIntent.BLUETOOTH_STATE_CHANGED_ACTION)) {
+                switch (intent.getIntExtra(BluetoothIntent.BLUETOOTH_STATE,
+                                           BluetoothError.ERROR)) {
+                case BluetoothDevice.BLUETOOTH_STATE_ON:
+                    mHeadsetPriority.load();
+                    mHandler.sendMessageDelayed(mHandler.obtainMessage(RECONNECT_LAST_HEADSET), 8000);
+                    mAg.start(mIncomingConnectionHandler);
+                    mBtHandsfree.onBluetoothEnabled();
+                    break;
+                case BluetoothDevice.BLUETOOTH_STATE_TURNING_OFF:
+                    mBtHandsfree.onBluetoothDisabled();
+                    mAg.stop();
+                    setState(BluetoothHeadset.STATE_DISCONNECTED, BluetoothHeadset.RESULT_FAILURE);
+                    break;
+                }
             } else if (action.equals(BluetoothIntent.BOND_STATE_CHANGED_ACTION)) {
                 int bondState = intent.getIntExtra(BluetoothIntent.BOND_STATE,
                                                    BluetoothError.ERROR);
@@ -589,6 +594,13 @@ public class BluetoothHeadsetService extends Service {
                              BluetoothHeadset.RESULT_CANCELED);
                     break;
                 case BluetoothHeadset.STATE_CONNECTED:
+                    // Send a message to force headset out of sniff mode so
+                    // that it will immediately notice the disconnection
+                    // TODO: Call hci_conn_enter_active_mode() from
+                    // rfcomm_send_disc() in the kernel instead.
+                    // See http://b/1716887
+                    mHeadset.sendURC("OK");
+
                     if (mHeadset != null) {
                         mHeadset.disconnect();
                         mHeadset = null;
index 42d6357..89532cb 100644 (file)
@@ -456,7 +456,7 @@ public class CallCard extends FrameLayout
             // has only one connection.)
             Connection conn = call.getEarliestConnection();
 
-            boolean isPrivateNumber = false; // TODO: need isPrivate() API
+            int presentation = conn.getNumberPresentation(); 
 
             if (conn == null) {
                 if (DBG) log("displayMainCallStatus: connection is null, using default values.");
@@ -465,7 +465,7 @@ public class CallCard extends FrameLayout
                 // with the current implementation of getCallerInfo and
                 // updateDisplayForPerson.
                 CallerInfo info = PhoneUtils.getCallerInfo(getContext(), conn);
-                updateDisplayForPerson(info, isPrivateNumber, false, call);
+                updateDisplayForPerson(info, presentation, false, call);
             } else {
                 if (DBG) log("  - CONN: " + conn + ", state = " + conn.getState());
 
@@ -484,7 +484,7 @@ public class CallCard extends FrameLayout
                     if (DBG) log("- displayMainCallStatus: starting CallerInfo query...");
                     PhoneUtils.CallerInfoToken info =
                             PhoneUtils.startGetCallerInfo(getContext(), conn, this, call);
-                    updateDisplayForPerson(info.currentInfo, isPrivateNumber, !info.isFinal, call);
+                    updateDisplayForPerson(info.currentInfo, presentation, !info.isFinal, call);
                 } else {
                     // No need to fire off a new query.  We do still need
                     // to update the display, though (since we might have
@@ -493,11 +493,11 @@ public class CallCard extends FrameLayout
                     if (o instanceof CallerInfo) {
                         CallerInfo ci = (CallerInfo) o;
                         if (DBG) log("   ==> Got CallerInfo; updating display: ci = " + ci);
-                        updateDisplayForPerson(ci, false, false, call);
+                        updateDisplayForPerson(ci, presentation, false, call);
                     } else if (o instanceof PhoneUtils.CallerInfoToken){
                         CallerInfo ci = ((PhoneUtils.CallerInfoToken) o).currentInfo;
                         if (DBG) log("   ==> Got CallerInfoToken; updating display: ci = " + ci);
-                        updateDisplayForPerson(ci, false, true, call);
+                        updateDisplayForPerson(ci, presentation, true, call);
                     } else {
                         Log.w(LOG_TAG, "displayMainCallStatus: runQuery was false, "
                               + "but we didn't have a cached CallerInfo object!  o = " + o);
@@ -533,7 +533,7 @@ public class CallCard extends FrameLayout
             // If the object is a textview instead, we update it as we need to.
             if (DBG) log("callerinfo query complete, updating ui from displayMainCallStatus()");
             Call call = (Call) cookie;
-            updateDisplayForPerson(ci, false, false, call);
+            updateDisplayForPerson(ci, Connection.PRESENTATION_ALLOWED, false, call);
             updatePhotoForCallState(call);
 
         } else if (cookie instanceof TextView){
@@ -893,8 +893,8 @@ public class CallCard extends FrameLayout
      *  updateImageViewWithContactPhotoAsync call will need to use it.
      */
 
-    private void updateDisplayForPerson(CallerInfo info, boolean isPrivateNumber, Call call) {
-        updateDisplayForPerson(info, isPrivateNumber, false, call);
+    private void updateDisplayForPerson(CallerInfo info, int presentation, Call call) {
+        updateDisplayForPerson(info, presentation, false, call);
     }
 
     /**
@@ -905,7 +905,7 @@ public class CallCard extends FrameLayout
      * updateDisplayForConference() instead.
      */
     private void updateDisplayForPerson(CallerInfo info,
-                                        boolean isPrivateNumber,
+                                        int presentation,
                                         boolean isTemporary,
                                         Call call) {
         if (DBG) log("updateDisplayForPerson(" + info + ")...");
@@ -935,11 +935,7 @@ public class CallCard extends FrameLayout
 
             if (TextUtils.isEmpty(info.name)) {
                 if (TextUtils.isEmpty(info.phoneNumber)) {
-                    if (isPrivateNumber) {
-                        name = getContext().getString(R.string.private_num);
-                    } else {
-                        name = getContext().getString(R.string.unknown);
-                    }
+                    name =  getPresentationString(presentation);
                 } else {
                     name = info.phoneNumber;
                 }
@@ -950,11 +946,7 @@ public class CallCard extends FrameLayout
             }
             personUri = ContentUris.withAppendedId(People.CONTENT_URI, info.person_id);
         } else {
-            if (isPrivateNumber) {
-                name = getContext().getString(R.string.private_num);
-            } else {
-                name = getContext().getString(R.string.unknown);
-            }
+            name =  getPresentationString(presentation);
         }
         mName.setText(name);
         mName.setVisibility(View.VISIBLE);
@@ -995,6 +987,16 @@ public class CallCard extends FrameLayout
     }
 
 
+    private String getPresentationString(int presentation) {
+        String name = getContext().getString(R.string.unknown);
+        if (presentation == Connection.PRESENTATION_RESTRICTED) {
+            name = getContext().getString(R.string.private_num);
+        } else if (presentation == Connection.PRESENTATION_PAYPHONE) {
+            name = getContext().getString(R.string.payphone);
+        }
+        return name;
+    }
+
     /**
      * Updates the name / photo / number / label fields
      * for the special "conference call" state.
index bf217e4..4b8f70d 100644 (file)
@@ -402,7 +402,10 @@ public class CallNotifier extends Handler
 
         // Have the PhoneApp recompute its mShowBluetoothIndication
         // flag based on the (new) telephony state.
-        mApplication.updateBluetoothIndication();
+        // There's no need to force a UI update since we update the
+        // in-call notification ourselves (below), and the InCallScreen
+        // listens for phone state changes itself.
+        mApplication.updateBluetoothIndication(false);
 
         if (state == Phone.State.OFFHOOK) {
             PhoneUtils.setAudioControlState(PhoneUtils.AUDIO_OFFHOOK);
@@ -555,7 +558,7 @@ public class CallNotifier extends Handler
 
         if (c != null) {
             final String number = c.getAddress();
-            final boolean isPrivateNumber = false; // TODO: need API for isPrivate()
+            final int presentation = c.getNumberPresentation();
             final long date = c.getCreateTime();
             final long duration = c.getDurationMillis();
             final Connection.DisconnectCause cause = c.getDisconnectCause();
@@ -585,7 +588,7 @@ public class CallNotifier extends Handler
                 // so we shouldn't call it from the main thread.
                 Thread t = new Thread() {
                         public void run() {
-                            Calls.addCall(ci, mApplication, number, isPrivateNumber,
+                            Calls.addCall(ci, mApplication, number, presentation,
                                           callLogType, date, (int) duration / 1000);
                             // if (DBG) log("onDisconnect helper thread: Calls.addCall() done.");
                         }
index 897e0a2..f1dd160 100644 (file)
@@ -336,8 +336,9 @@ public class NotificationMgr implements CallerInfoAsyncQuery.OnQueryCompleteList
             // CallLog.addCall().  If either special values for unknown or
             // private number are detected, we need to hand off the message
             // to the missed call notification.
-            if ((n.number.equals(CallerInfo.UNKNOWN_NUMBER)) || 
-                    (n.number.equals(CallerInfo.PRIVATE_NUMBER))) {
+            if ( (n.number.equals(CallerInfo.UNKNOWN_NUMBER)) || 
+                 (n.number.equals(CallerInfo.PRIVATE_NUMBER)) ||
+                 (n.number.equals(CallerInfo.PAYPHONE_NUMBER)) ) {
                 n.number = null;
             }
             
index 7d6ee62..8a30acb 100644 (file)
@@ -115,6 +115,7 @@ public class PhoneApp extends Application {
     BluetoothHandsfree mBtHandsfree;
     PhoneInterfaceManager phoneMgr;
     int mBluetoothHeadsetState = BluetoothHeadset.STATE_ERROR;
+    int mBluetoothHeadsetAudioState = BluetoothHeadset.STATE_ERROR;
     boolean mShowBluetoothIndication = false;
 
     // The InCallScreen instance (or null if the InCallScreen hasn't been
@@ -328,6 +329,7 @@ public class PhoneApp extends Application {
             IntentFilter intentFilter =
                     new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED);
             intentFilter.addAction(BluetoothIntent.HEADSET_STATE_CHANGED_ACTION);
+            intentFilter.addAction(BluetoothIntent.HEADSET_AUDIO_STATE_CHANGED_ACTION);
             intentFilter.addAction(TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED);
             intentFilter.addAction(Intent.ACTION_HEADSET_PLUG);
             intentFilter.addAction(Intent.ACTION_BATTERY_LOW);
@@ -856,10 +858,20 @@ public class PhoneApp extends Application {
      *
      * This needs to be called any time the bluetooth headset state or the
      * telephony state changes.
+     *
+     * @param forceUiUpdate if true, force the UI elements that care
+     *                      about this flag to update themselves.
      */
-    /* package */ void updateBluetoothIndication() {
+    /* package */ void updateBluetoothIndication(boolean forceUiUpdate) {
         mShowBluetoothIndication = shouldShowBluetoothIndication(mBluetoothHeadsetState,
+                                                                 mBluetoothHeadsetAudioState,
                                                                  phone);
+        if (forceUiUpdate) {
+            // Post Handler messages to the various components that might
+            // need to be refreshed based on the new state.
+            if (isShowingCallScreen()) mInCallScreen.updateBluetoothIndication();
+            mHandler.sendEmptyMessage(EVENT_UPDATE_INCALL_NOTIFICATION);
+        }
     }
 
     /**
@@ -872,6 +884,7 @@ public class PhoneApp extends Application {
      * @see showBluetoothIndication()
      */
     private static boolean shouldShowBluetoothIndication(int bluetoothState,
+                                                         int bluetoothAudioState,
                                                          Phone phone) {
         // We want the UI to indicate that "bluetooth is in use" in two
         // slightly different cases:
@@ -886,20 +899,11 @@ public class PhoneApp extends Application {
         switch (phone.getState()) {
             case OFFHOOK:
                 // This covers normal active calls, and also the case if
-                // the foreground call is DIALING or ALERTING.  (If
-                // DIALING or ALERTING, audio *is* routed to the headset
-                // while the other end is ringing, so we just check for
-                // the bluetooth headset PLAYING state.  We don't need to
-                // do any tricks like we do below for the RINGING state.)
-
-                // TODO: we really need to know whether or not the headset
-                // is getting audio routed to it, rather than just whether
-                // or not the headset is connected.  So we really want to
-                // check for the "PLAYING" state here.  (But
-                // BluetoothHeadset doesn't have the concept of a
-                // "PLAYING" state yet; see bug 1695249.)
-                // For now:
-                return (bluetoothState == BluetoothHeadset.STATE_CONNECTED);
+                // the foreground call is DIALING or ALERTING.  In this
+                // case, bluetooth is considered "active" if a headset
+                // is connected *and* audio is being routed to it.
+                return ((bluetoothState == BluetoothHeadset.STATE_CONNECTED)
+                        && (bluetoothAudioState == BluetoothHeadset.AUDIO_STATE_CONNECTED));
 
             case RINGING:
                 // If an incoming call is ringing, we're *not* yet routing
@@ -931,15 +935,14 @@ public class PhoneApp extends Application {
                                                             BluetoothHeadset.STATE_ERROR);
                 if (DBG) Log.d(LOG_TAG, "mReceiver: HEADSET_STATE_CHANGED_ACTION");
                 if (DBG) Log.d(LOG_TAG, "==> new state: " + mBluetoothHeadsetState);
-
-                // First, recompute the mShowBluetoothIndication flag based on
-                // the (new) bluetooth state and current telephony state.
-                updateBluetoothIndication();
-
-                // Then, post Handler messages to the various components that
-                // might need to update their UI based on the new state.
-                if (isShowingCallScreen()) mInCallScreen.updateBluetoothIndication();
-                mHandler.sendEmptyMessage(EVENT_UPDATE_INCALL_NOTIFICATION);
+                updateBluetoothIndication(true);  // Also update any visible UI if necessary
+            } else if (action.equals(BluetoothIntent.HEADSET_AUDIO_STATE_CHANGED_ACTION)) {
+                mBluetoothHeadsetAudioState =
+                        intent.getIntExtra(BluetoothIntent.HEADSET_AUDIO_STATE,
+                                           BluetoothHeadset.STATE_ERROR);
+                if (DBG) Log.d(LOG_TAG, "mReceiver: HEADSET_AUDIO_STATE_CHANGED_ACTION");
+                if (DBG) Log.d(LOG_TAG, "==> new state: " + mBluetoothHeadsetAudioState);
+                updateBluetoothIndication(true);  // Also update any visible UI if necessary
             } else if (action.equals(TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED)) {
                 // if (DBG) Log.d(LOG_TAG, "mReceiver: ACTION_ANY_DATA_CONNECTION_STATE_CHANGED");
                 // if (DBG) Log.d(LOG_TAG, "- state: " + intent.getStringExtra(Phone.STATE_KEY));
index 65c6726..ee55566 100644 (file)
@@ -22,8 +22,11 @@ import android.media.Ringtone;
 import android.media.RingtoneManager;
 import android.net.Uri;
 import android.os.Handler;
+import android.os.IHardwareService;
 import android.os.Looper;
 import android.os.Message;
+import android.os.RemoteException;
+import android.os.ServiceManager;
 import android.os.SystemClock;
 import android.os.SystemProperties;
 import android.os.Vibrator;
@@ -52,6 +55,7 @@ public class Ringer {
     
     Ringtone mRingtone;
     Vibrator mVibrator = new Vibrator();
+    IHardwareService mHardwareService;
     volatile boolean mContinueVibrating;
     VibratorThread mVibratorThread;
     Context mContext;
@@ -63,6 +67,7 @@ public class Ringer {
     
     Ringer(Phone phone) {
         mContext = phone.getContext();
+        mHardwareService = IHardwareService.Stub.asInterface(ServiceManager.getService("hardware"));
     }
 
     /**
@@ -111,6 +116,12 @@ public class Ringer {
         if (DBG) log("ring()...");
 
         synchronized (this) {
+            try {
+                mHardwareService.setAttentionLight(true);
+            } catch (RemoteException ex) {
+                // the other end of this binder call is in the system process.
+            }
+
             if (shouldVibrate() && mVibratorThread == null) {
                 mContinueVibrating = true;
                 mVibratorThread = new VibratorThread();
@@ -169,6 +180,12 @@ public class Ringer {
         synchronized (this) {
             if (DBG) log("stopRing()...");
 
+            try {
+                mHardwareService.setAttentionLight(false);
+            } catch (RemoteException ex) {
+                // the other end of this binder call is in the system process.
+            }
+
             if (mRingHandler != null) {
                 mRingHandler.removeCallbacksAndMessages(null);
                 Message msg = mRingHandler.obtainMessage(STOP_RING);
index c852ab9..4ece1de 100644 (file)
@@ -50,6 +50,7 @@ public class SimContacts extends ADNList {
     private static final int MENU_IMPORT_ONE = 1;
     private static final int MENU_IMPORT_ALL = 2;
     private ProgressDialog mProgressDialog;
+
     
     @Override
     protected void onCreate(Bundle icicle) {
@@ -170,8 +171,12 @@ public class SimContacts extends ADNList {
     public boolean onContextItemSelected(MenuItem item) {
         switch (item.getItemId()) {
             case MENU_IMPORT_ONE:
-                importOne(getSelectedItemPosition());
-                return true;
+                ContextMenu.ContextMenuInfo menuInfo = item.getMenuInfo();
+                if (menuInfo instanceof AdapterView.AdapterContextMenuInfo) {
+                    int position = ((AdapterView.AdapterContextMenuInfo)menuInfo).position;
+                    importOne(position);
+                    return true;
+                }
         }
         return super.onContextItemSelected(item);
     }
@@ -186,8 +191,8 @@ public class SimContacts extends ADNList {
             if (textView != null) {
                 menu.setHeaderTitle(textView.getText());
             }
+            menu.add(0, MENU_IMPORT_ONE, 0, R.string.importSimEntry);
         }
-        menu.add(0, MENU_IMPORT_ONE, 0, R.string.importSimEntry);
     }
 
     @Override
index ab89803..2c45b3f 100644 (file)
@@ -37,25 +37,27 @@ import android.widget.LinearLayout;
 import android.widget.TextView;
 
 
-public class SimNetworkDepersonalizationPanel extends SimPanel{
-    
-    //debug constants
+/**
+ * "SIM network unlock" PIN entry screen.
+ *
+ * @see PhoneApp.EVENT_SIM_NETWORK_LOCKED
+ */
+public class SimNetworkDepersonalizationPanel extends SimPanel {
     private static final boolean DBG = false;
-    
+
     //events
     private static final int EVENT_SIM_NTWRK_DEPERSONALIZATION_RESULT = 100;
-    
+
     private Phone mPhone;
-    
+
     //UI elements
     private EditText     mPinEntry;
     private LinearLayout mEntryPanel;
     private LinearLayout mStatusPanel;
     private TextView     mStatusText;
-    
+
     private Button       mUnlockButton;
-    private Button       mDismissButton;
-    
+
     //private textwatcher to control text entry.
     private TextWatcher mPinEntryWatcher = new TextWatcher() {
         public void beforeTextChanged(CharSequence buffer, int start, int olen, int nlen) {
@@ -109,14 +111,13 @@ public class SimNetworkDepersonalizationPanel extends SimPanel{
     protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);
         setContentView(R.layout.sim_ndp);
-        
-        //set up pin entry text field
+
+        // PIN entry text field
         mPinEntry = (EditText) findViewById(R.id.pin_entry);
         mPinEntry.setKeyListener(DialerKeyListener.getInstance());
-        mPinEntry.setMovementMethod(null);
         mPinEntry.setOnClickListener(mUnlockListener);
-        
-        //attach the textwatcher
+
+        // Attach the textwatcher
         CharSequence text = mPinEntry.getText();
         Spannable span = (Spannable) text;
         span.setSpan(mPinEntryWatcher, 0, text.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
@@ -126,9 +127,6 @@ public class SimNetworkDepersonalizationPanel extends SimPanel{
         mUnlockButton = (Button) findViewById(R.id.ndp_unlock);
         mUnlockButton.setOnClickListener(mUnlockListener);
 
-        mDismissButton = (Button) findViewById(R.id.ndp_dismiss);
-        mDismissButton.setOnClickListener(mDismissListener);
-        
         //status panel is used since we're having problems with the alert dialog.
         mStatusPanel = (LinearLayout) findViewById(R.id.status_panel);
         mStatusText = (TextView) findViewById(R.id.status_text);
@@ -157,14 +155,14 @@ public class SimNetworkDepersonalizationPanel extends SimPanel{
             if (TextUtils.isEmpty(pin)) {
                 return;
             }
-            
+
             if (DBG) log("requesting network depersonalization with code " + pin);
-            mPhone.getSimCard().supplyNetworkDepersonalization(pin, 
+            mPhone.getSimCard().supplyNetworkDepersonalization(pin,
                     Message.obtain(mHandler, EVENT_SIM_NTWRK_DEPERSONALIZATION_RESULT));
             indicateBusy();
         }
     };
-    
+
     private void indicateBusy() {
         mStatusText.setText(R.string.requesting_unlock);
         mEntryPanel.setVisibility(View.GONE);
@@ -187,15 +185,8 @@ public class SimNetworkDepersonalizationPanel extends SimPanel{
         mEntryPanel.setVisibility(View.VISIBLE);
         mStatusPanel.setVisibility(View.GONE);
     }
-    
-    View.OnClickListener mDismissListener = new View.OnClickListener() {
-        public void onClick(View v) {
-            if (DBG) log("network depersonalization skipped.");
-            dismiss();
-        }
-    };
-    
+
     private void log(String msg) {
-        Log.v(TAG, "[SimNetworkUnlock] " + msg);
+        Log.v(TAG, "[SimNetworkDepersonalizationPanel] " + msg);
     }
 }