summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Android.mk3
-rw-r--r--AndroidManifest.xml18
-rw-r--r--res/color/landing_page_text.xml22
-rw-r--r--res/color/landing_page_text_secondary.xml22
-rw-r--r--res/layout/account_view.xml92
-rw-r--r--res/values-cs/strings.xml15
-rw-r--r--res/values-da/strings.xml14
-rw-r--r--res/values-de/strings.xml15
-rw-r--r--res/values-el/strings.xml14
-rw-r--r--res/values-es-rUS/strings.xml14
-rw-r--r--res/values-es/strings.xml15
-rw-r--r--res/values-fr/strings.xml15
-rw-r--r--res/values-it/strings.xml15
-rw-r--r--res/values-ja/strings.xml14
-rw-r--r--res/values-ko/strings.xml15
-rw-r--r--res/values-nb/strings.xml21
-rw-r--r--res/values-nl/strings.xml15
-rw-r--r--res/values-pl/strings.xml15
-rw-r--r--res/values-pt-rPT/strings.xml14
-rw-r--r--res/values-pt/strings.xml14
-rw-r--r--res/values-ru/strings.xml15
-rw-r--r--res/values-sv/strings.xml14
-rw-r--r--res/values-tr/strings.xml14
-rw-r--r--res/values-zh-rCN/strings.xml15
-rw-r--r--res/values-zh-rTW/strings.xml15
-rw-r--r--res/values/config.xml25
-rw-r--r--res/values/strings.xml36
-rw-r--r--src/com/android/providers/im/BrandingResources.java160
-rw-r--r--src/com/android/providers/im/ImProvider.java8
-rw-r--r--src/com/android/providers/im/LandingPage.java710
-rw-r--r--src/com/android/providers/im/ProviderListItem.java213
31 files changed, 10 insertions, 1597 deletions
diff --git a/Android.mk b/Android.mk
index f7f22cc..800976a 100644
--- a/Android.mk
+++ b/Android.mk
@@ -6,9 +6,6 @@ LOCAL_MODULE_TAGS := user
LOCAL_SRC_FILES := $(call all-java-files-under,src)
LOCAL_JAVA_LIBRARIES := ext \
- com.android.im.plugin # TODO: remove this and load this on demand.
- # (HACK: include this so we can load the
- # classes defined in this plugin package)
LOCAL_PACKAGE_NAME := ImProvider
LOCAL_CERTIFICATE := shared
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 8609528..f9cd664 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -18,11 +18,9 @@
<uses-permission android:name="com.android.providers.im.permission.WRITE_ONLY" />
<application android:process="android.process.acore"
- android:label="@string/im_label"
+ android:label="@string/app_label"
android:icon="@drawable/ic_launcher_im"
android:taskAffinity="android.task.im">
- <!-- TODO: remove this library include. It's a hack so we can load its classes -->
- <uses-library android:name="com.android.im.plugin" />
<provider android:name="ImProvider" android:authorities="im"
android:multiprocess="false"
@@ -30,19 +28,5 @@
android:writePermission="com.android.providers.im.permission.WRITE_ONLY"
android:grantUriPermissions="true" />
- <activity android:name=".LandingPage"
- android:enabled="@bool/enableLandingPageActivity">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <action android:name="android.intent.action.VIEW" />
- <category android:name="android.intent.category.DEFAULT" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- <intent-filter>
- <action android:name="android.intent.action.VIEW" />
- <category android:name="android.intent.category.DEFAULT" />
- <data android:mimeType="vnd.android.cursor.dir/im-providers" />
- </intent-filter>
- </activity>
</application>
</manifest>
diff --git a/res/color/landing_page_text.xml b/res/color/landing_page_text.xml
deleted file mode 100644
index 6e967d9..0000000
--- a/res/color/landing_page_text.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_focused="true" android:color="#ff000000"/>
- <item android:state_selected="true" android:color="#ff000000"/>
- <item android:state_pressed="true" android:color="#ff000000"/>
- <item android:color="#ffffffff"/>
-</selector>
diff --git a/res/color/landing_page_text_secondary.xml b/res/color/landing_page_text_secondary.xml
deleted file mode 100644
index 78cc390..0000000
--- a/res/color/landing_page_text_secondary.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2007 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_focused="true" android:color="#ff000000"/>
- <item android:state_selected="true" android:color="#ff000000"/>
- <item android:state_pressed="true" android:color="#ff000000"/>
- <item android:color="#ffbebebe"/>
-</selector>
diff --git a/res/layout/account_view.xml b/res/layout/account_view.xml
deleted file mode 100644
index 46bdecf..0000000
--- a/res/layout/account_view.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
--->
-
-<com.android.providers.im.ProviderListItem
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal"
- android:layout_width="fill_parent"
- android:layout_height="?android:attr/listPreferredItemHeight">
-
- <ImageView
- android:id="@+id/providerIcon"
- android:layout_gravity="center_vertical"
- android:scaleType="fitXY"
- android:paddingLeft="5dip"
- android:paddingRight="2dip"
- android:layout_width="39dip"
- android:layout_height="32dip"/>
-
- <LinearLayout
- android:id="@+id/underBubble"
- android:orientation="horizontal"
- android:layout_weight="1"
- android:layout_width="0dip"
- android:layout_height="fill_parent">
-
- <LinearLayout
- android:orientation="vertical"
- android:layout_weight="1"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical">
-
- <LinearLayout
- android:orientation="horizontal"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content">
-
- <TextView android:id="@+id/providerName"
- android:textColor="@color/landing_page_text"
- android:textAppearance="?android:attr/textAppearanceLarge"
- android:textStyle="bold"
- android:maxLines="1"
- android:layout_weight="0"
- android:ellipsize="marquee"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- <TextView android:id="@+id/conversations"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="@color/landing_page_text_secondary"
- android:maxLines="1"
- android:layout_weight="1"
- android:paddingRight="3dip"
- android:paddingLeft="5dip"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- </LinearLayout>
-
- <TextView android:id="@+id/loginName"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="@color/landing_page_text"
- android:ellipsize="marquee"
- android:maxLines="1"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"/>
- </LinearLayout>
- <ImageView
- android:id="@+id/statusIcon"
- android:scaleType="fitXY"
- android:paddingRight="6dip"
- android:paddingLeft="6dip"
- android:layout_weight="0"
- android:layout_gravity="center_vertical"
- android:layout_width="30dip"
- android:layout_height="18dip"/>
- </LinearLayout>
-</com.android.providers.im.ProviderListItem>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index bb35717..2b9bc99 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -19,19 +19,4 @@
<string name="ro_perm_desc">"Povoluje aplikacím číst data z poskytovatele obsahu chatu."</string>
<string name="wo_perm_label">"chatovat"</string>
<string name="wo_perm_desc">"Povoluje aplikacím zapisovat data do poskytovatele obsahu chatových zpráv."</string>
- <string name="im_label">"Chat"</string>
- <string name="landing_page_title">"Chat – vyberte účet"</string>
- <string name="menu_add_account">"Přidat účet"</string>
- <string name="menu_edit_account">"Upravit účet"</string>
- <string name="menu_remove_account">"Odstranit účet"</string>
- <string name="sign_in">"Přihlásit se"</string>
- <string name="menu_sign_out">"Odhlásit se"</string>
- <string name="menu_settings">"Nastavení"</string>
- <string name="menu_sign_out_all">"Odhlásit se ze všech služeb"</string>
- <string name="choose_account_title">"Chat – vyberte účet"</string>
- <!-- no translation found for conversations (6809253595345281731) -->
- <skip />
- <string name="add_account">"Přidat účet <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
- <string name="menu_view_contact_list">"Seznam kontaktů"</string>
- <string name="signing_in_wait">"Přihlašování..."</string>
</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 2e19b5f..c002120 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -19,18 +19,4 @@
<string name="ro_perm_desc">"Tillader programmer at læse data fra IM-indholdsleverandøren."</string>
<string name="wo_perm_label">"skriv chatbeskeder"</string>
<string name="wo_perm_desc">"Tillader programmer at skrive data til IM-indholdsleverandøren."</string>
- <string name="im_label">"IM"</string>
- <string name="landing_page_title">"Chat – Vælg en konto"</string>
- <string name="menu_add_account">"Tilføj konto"</string>
- <string name="menu_edit_account">"Rediger konto"</string>
- <string name="menu_remove_account">"Fjern konto"</string>
- <string name="sign_in">"Log ind"</string>
- <string name="menu_sign_out">"Log ud"</string>
- <string name="menu_settings">"Indstillinger"</string>
- <string name="menu_sign_out_all">"Log alle ud"</string>
- <string name="choose_account_title">"Chat – Vælg en konto"</string>
- <string name="conversations">"(%1$d)"</string>
- <string name="add_account">"Tilføj <xliff:g id="ACCOUNT">%1$s</xliff:g>-konto"</string>
- <string name="menu_view_contact_list">"Liste over kontaktpersoner"</string>
- <string name="signing_in_wait">"Logger ind ..."</string>
</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 79f89d7..b3d2dd9 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -19,19 +19,4 @@
<string name="ro_perm_desc">"Ermöglicht Anwendungen das Lesen von Daten des IM-Content-Providers."</string>
<string name="wo_perm_label">"Chat-Nachrichten verfassen"</string>
<string name="wo_perm_desc">"Ermöglicht Anwendungen das Schreiben von Daten an den IM-Content-Provider."</string>
- <string name="im_label">"IM"</string>
- <string name="landing_page_title">"Chat - Konto auswählen"</string>
- <string name="menu_add_account">"Konto hinzufügen"</string>
- <string name="menu_edit_account">"Konto bearbeiten"</string>
- <string name="menu_remove_account">"Konto entfernen"</string>
- <string name="sign_in">"Anmelden"</string>
- <string name="menu_sign_out">"Abmelden"</string>
- <string name="menu_settings">"Einstellungen"</string>
- <string name="menu_sign_out_all">"Alle abmelden"</string>
- <string name="choose_account_title">"Chat - Konto auswählen"</string>
- <!-- no translation found for conversations (6809253595345281731) -->
- <skip />
- <string name="add_account">"<xliff:g id="ACCOUNT">%1$s</xliff:g>-Konto hinzufügen"</string>
- <string name="menu_view_contact_list">"Kontaktliste"</string>
- <string name="signing_in_wait">"Anmeldung..."</string>
</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 95c7d0e..fc96a39 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -19,18 +19,4 @@
<string name="ro_perm_desc">"Επιτρέπει στις εφαρμογές την ανάγνωση δεδομένων από τον πάροχο περιεχομένου ανταλλαγής άμεσων μηνυμάτων (IM)."</string>
<string name="wo_perm_label">"εγγραφή άμεσων μηνυμάτων"</string>
<string name="wo_perm_desc">"Επιτρέπει στις εφαρμογές την εγγραφή δεδομένων από τον πάροχο περιεχομένου ανταλλαγής άμεσων μηνυμάτων (IM)."</string>
- <string name="im_label">"Ανταλλαγή άμεσων μηνυμάτων (IM)"</string>
- <string name="landing_page_title">"Συζήτηση - Επιλογή λογαριασμού"</string>
- <string name="menu_add_account">"Προσθήκη λογαριασμού"</string>
- <string name="menu_edit_account">"Επεξεργασία λογαριασμού"</string>
- <string name="menu_remove_account">"Κατάργηση λογαριασμού"</string>
- <string name="sign_in">"Σύνδεση"</string>
- <string name="menu_sign_out">"Αποσύνδεση"</string>
- <string name="menu_settings">"Ρυθμίσεις"</string>
- <string name="menu_sign_out_all">"Αποσύνδεση όλων"</string>
- <string name="choose_account_title">"Συζήτηση - Επιλογή λογαριασμού"</string>
- <string name="conversations">"(%1$d)"</string>
- <string name="add_account">"Προσθήκη λογαριασμού <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
- <string name="menu_view_contact_list">"Λίστα επαφών"</string>
- <string name="signing_in_wait">"Σύνδεση..."</string>
</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index fa272a6..b1faf75 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -19,18 +19,4 @@
<string name="ro_perm_desc">"Permite a una aplicación leer datos del proveedor de contenido de mensajería instantánea"</string>
<string name="wo_perm_label">"escribir mensajes instantáneos"</string>
<string name="wo_perm_desc">"Permite a una aplicación introducir datos en el proveedor de contenido de mensajería instantánea"</string>
- <string name="im_label">"Mensajería instantánea"</string>
- <string name="landing_page_title">"Chat - Seleccionar una cuenta"</string>
- <string name="menu_add_account">"Agregar cuenta"</string>
- <string name="menu_edit_account">"Editar cuenta"</string>
- <string name="menu_remove_account">"Suprimir cuenta"</string>
- <string name="sign_in">"Inicia sesión"</string>
- <string name="menu_sign_out">"Cerrar sesión"</string>
- <string name="menu_settings">"Configuración"</string>
- <string name="menu_sign_out_all">"Cerrar sesión de todo"</string>
- <string name="choose_account_title">"Chat - Seleccionar una cuenta"</string>
- <string name="conversations">"(%1$d)"</string>
- <string name="add_account">"Agregar cuenta <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
- <string name="menu_view_contact_list">"Lista de contactos"</string>
- <string name="signing_in_wait">"Iniciando sesión..."</string>
</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 128c806..4849e71 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -19,19 +19,4 @@
<string name="ro_perm_desc">"Permite que las aplicaciones lean datos del proveedor de contenido de MI."</string>
<string name="wo_perm_label">"escribir mensajes instantáneos"</string>
<string name="wo_perm_desc">"Permite que las aplicaciones escriban datos en el proveedor de contenido de MI."</string>
- <string name="im_label">"MI"</string>
- <string name="landing_page_title">"Chat: seleccionar una cuenta"</string>
- <string name="menu_add_account">"Añadir cuenta"</string>
- <string name="menu_edit_account">"Editar cuenta"</string>
- <string name="menu_remove_account">"Eliminar cuenta"</string>
- <string name="sign_in">"Acceder"</string>
- <string name="menu_sign_out">"Salir"</string>
- <string name="menu_settings">"Configuración"</string>
- <string name="menu_sign_out_all">"Salir de todo"</string>
- <string name="choose_account_title">"Chat: seleccionar una cuenta"</string>
- <!-- no translation found for conversations (6809253595345281731) -->
- <skip />
- <string name="add_account">"Añadir cuenta <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
- <string name="menu_view_contact_list">"Lista de contactos"</string>
- <string name="signing_in_wait">"Accediendo..."</string>
</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 3da7c82..761111a 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -19,19 +19,4 @@
<string name="ro_perm_desc">"Permet aux applications de lire les données du prestataire de contenu de messagerie instantanée."</string>
<string name="wo_perm_label">"écrire des messages instantanées"</string>
<string name="wo_perm_desc">"Permet aux applications d\'écrire les données pour le prestataire de contenu de messagerie instantanée."</string>
- <string name="im_label">"Chat"</string>
- <string name="landing_page_title">"Chat : sélectionner un compte"</string>
- <string name="menu_add_account">"Ajouter un compte"</string>
- <string name="menu_edit_account">"Modifier un compte"</string>
- <string name="menu_remove_account">"Supprimer un compte"</string>
- <string name="sign_in">"Connexion"</string>
- <string name="menu_sign_out">"Déconnexion"</string>
- <string name="menu_settings">"Paramètres"</string>
- <string name="menu_sign_out_all">"Se déconnecter de tout"</string>
- <string name="choose_account_title">"Chat : sélectionner un compte"</string>
- <!-- no translation found for conversations (6809253595345281731) -->
- <skip />
- <string name="add_account">"Ajouter le compte <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
- <string name="menu_view_contact_list">"Liste de contacts"</string>
- <string name="signing_in_wait">"Connexion..."</string>
</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 70065fb..cb7430e 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -19,19 +19,4 @@
<string name="ro_perm_desc">"Consente alle applicazioni di leggere dati del provider di contenuti IM."</string>
<string name="wo_perm_label">"scrivere messaggi immediati"</string>
<string name="wo_perm_desc">"Consente alle applicazioni di scrivere dati per il provider di contenuti IM."</string>
- <string name="im_label">"Chat"</string>
- <string name="landing_page_title">"Chat - Seleziona un account"</string>
- <string name="menu_add_account">"Aggiungi account"</string>
- <string name="menu_edit_account">"Modifica account"</string>
- <string name="menu_remove_account">"Rimuovi account"</string>
- <string name="sign_in">"Accedi"</string>
- <string name="menu_sign_out">"Esci"</string>
- <string name="menu_settings">"Impostazioni"</string>
- <string name="menu_sign_out_all">"Esci da tutto"</string>
- <string name="choose_account_title">"Chat - Seleziona un account"</string>
- <!-- no translation found for conversations (6809253595345281731) -->
- <skip />
- <string name="add_account">"Aggiungi account <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
- <string name="menu_view_contact_list">"Elenco contatti"</string>
- <string name="signing_in_wait">"Accesso..."</string>
</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 6f9a4ae..0e2c6fb 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -19,18 +19,4 @@
<string name="ro_perm_desc">"IMコンテンツプロバイダーからのデータ読み取りをアプリケーションに許可します。"</string>
<string name="wo_perm_label">"インスタントメッセージを作成"</string>
<string name="wo_perm_desc">"IMコンテンツプロバイダーからのデータ書き込みをアプリケーションに許可します。"</string>
- <string name="im_label">"チャット"</string>
- <string name="landing_page_title">"チャット: アカウントを選択"</string>
- <string name="menu_add_account">"アカウントを追加"</string>
- <string name="menu_edit_account">"アカウントを編集"</string>
- <string name="menu_remove_account">"アカウントを削除"</string>
- <string name="sign_in">"ログイン"</string>
- <string name="menu_sign_out">"ログアウト"</string>
- <string name="menu_settings">"設定"</string>
- <string name="menu_sign_out_all">"すべてログアウト"</string>
- <string name="choose_account_title">"チャット: アカウントを選択"</string>
- <string name="conversations">"(%1$d)"</string>
- <string name="add_account">"<xliff:g id="ACCOUNT">%1$s</xliff:g>アカウントを追加"</string>
- <string name="menu_view_contact_list">"連絡先リスト"</string>
- <string name="signing_in_wait">"ログイン中..."</string>
</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 94479e7..994ddea 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -19,19 +19,4 @@
<string name="ro_perm_desc">"응용프로그램이 메신저 콘텐츠 제공업체에서 제공한 데이터를 읽을 수 있도록 합니다."</string>
<string name="wo_perm_label">"인스턴트 메시지 쓰기"</string>
<string name="wo_perm_desc">"응용프로그램이 메신저 콘텐츠 제공업체에 데이터를 쓸 수 있도록 합니다."</string>
- <string name="im_label">"메신저"</string>
- <string name="landing_page_title">"채팅 - 계정 선택"</string>
- <string name="menu_add_account">"계정 추가"</string>
- <string name="menu_edit_account">"계정 수정"</string>
- <string name="menu_remove_account">"계정 삭제"</string>
- <string name="sign_in">"로그인"</string>
- <string name="menu_sign_out">"로그아웃"</string>
- <string name="menu_settings">"설정"</string>
- <string name="menu_sign_out_all">"모두 로그아웃"</string>
- <string name="choose_account_title">"채팅 - 계정 선택"</string>
- <!-- no translation found for conversations (6809253595345281731) -->
- <skip />
- <string name="add_account">"<xliff:g id="ACCOUNT">%1$s</xliff:g> 계정 추가"</string>
- <string name="menu_view_contact_list">"연락처 목록"</string>
- <string name="signing_in_wait">"로그인하는 중..."</string>
</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 1f22b81..3d11c47 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -23,25 +23,4 @@
<skip />
<!-- no translation found for wo_perm_desc (470416777693330370) -->
<skip />
- <string name="im_label">"Nettprat"</string>
- <!-- no translation found for landing_page_title (2177721703095999384) -->
- <skip />
- <!-- no translation found for menu_add_account (4184762314855405486) -->
- <skip />
- <!-- no translation found for menu_edit_account (6585077522972888350) -->
- <skip />
- <!-- no translation found for menu_remove_account (8013513817623405880) -->
- <skip />
- <string name="sign_in">"Logg inn"</string>
- <string name="menu_sign_out">"Logg ut"</string>
- <string name="menu_settings">"Innstillinger"</string>
- <!-- no translation found for menu_sign_out_all (945106187701517280) -->
- <skip />
- <!-- no translation found for choose_account_title (3179220583433723296) -->
- <skip />
- <!-- no translation found for conversations (6809253595345281731) -->
- <skip />
- <string name="add_account">"Legg til <xliff:g id="ACCOUNT">%1$s</xliff:g>-konto"</string>
- <string name="menu_view_contact_list">"Kontaktliste"</string>
- <string name="signing_in_wait">"Logger inn…"</string>
</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index dbaebbb..d06fc37 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -19,19 +19,4 @@
<string name="ro_perm_desc">"Toepassingen toestaan gegevens te lezen van de provider van chatinhoud."</string>
<string name="wo_perm_label">"chatberichten schrijven"</string>
<string name="wo_perm_desc">"Toepassingen toestaan gegevens te schrijven naar de provider van chatinhoud."</string>
- <string name="im_label">"Chat"</string>
- <string name="landing_page_title">"Chatten - Een account selecteren"</string>
- <string name="menu_add_account">"Account toevoegen"</string>
- <string name="menu_edit_account">"Account bewerken"</string>
- <string name="menu_remove_account">"Account verwijderen"</string>
- <string name="sign_in">"Aanmelden"</string>
- <string name="menu_sign_out">"Afmelden"</string>
- <string name="menu_settings">"Instellingen"</string>
- <string name="menu_sign_out_all">"Overal afmelden"</string>
- <string name="choose_account_title">"Chatten - Een account selecteren"</string>
- <!-- no translation found for conversations (6809253595345281731) -->
- <skip />
- <string name="add_account">"<xliff:g id="ACCOUNT">%1$s</xliff:g>-account toevoegen"</string>
- <string name="menu_view_contact_list">"Lijst met contactpersonen"</string>
- <string name="signing_in_wait">"Aanmelden..."</string>
</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index aaa8d55..86fc99d 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -19,19 +19,4 @@
<string name="ro_perm_desc">"Zezwala aplikacjom na odczytywanie danych od dostawcy zawartości czatu."</string>
<string name="wo_perm_label">"zapisz wiadomości czatu"</string>
<string name="wo_perm_desc">"Zezwala aplikacjom na zapisywanie danych do dostawcy zawartości czatu."</string>
- <string name="im_label">"Czat"</string>
- <string name="landing_page_title">"Czat: Wybierz konto"</string>
- <string name="menu_add_account">"Dodaj konto"</string>
- <string name="menu_edit_account">"Edytuj konto"</string>
- <string name="menu_remove_account">"Usuń konto"</string>
- <string name="sign_in">"Zaloguj się"</string>
- <string name="menu_sign_out">"Wyloguj się"</string>
- <string name="menu_settings">"Ustawienia"</string>
- <string name="menu_sign_out_all">"Wyloguj wszystkie"</string>
- <string name="choose_account_title">"Czat: Wybierz konto"</string>
- <!-- no translation found for conversations (6809253595345281731) -->
- <skip />
- <string name="add_account">"Dodaj konto <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
- <string name="menu_view_contact_list">"Lista kontaktów"</string>
- <string name="signing_in_wait">"Trwa logowanie..."</string>
</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 1d233ca..63c6c61 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -19,18 +19,4 @@
<string name="ro_perm_desc">"Permite que as aplicações leiam dados a partir do fornecedor de conteúdo de MI."</string>
<string name="wo_perm_label">"escrever mensagens instantâneas"</string>
<string name="wo_perm_desc">"Permite que as aplicações escrevam dados para o fornecedor de conteúdo de MI."</string>
- <string name="im_label">"MI"</string>
- <string name="landing_page_title">"Chat - Seleccione uma conta"</string>
- <string name="menu_add_account">"Adicionar conta"</string>
- <string name="menu_edit_account">"Editar conta"</string>
- <string name="menu_remove_account">"Remover conta"</string>
- <string name="sign_in">"Iniciar sessão"</string>
- <string name="menu_sign_out">"Terminar sessão"</string>
- <string name="menu_settings">"Definições"</string>
- <string name="menu_sign_out_all">"Terminar sessão em todos"</string>
- <string name="choose_account_title">"Chat - Seleccionar uma conta"</string>
- <string name="conversations">"(%1$d)"</string>
- <string name="add_account">"Adicionar a conta <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
- <string name="menu_view_contact_list">"Lista de contactos"</string>
- <string name="signing_in_wait">"A iniciar sessão..."</string>
</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 050cb09..2997226 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -19,18 +19,4 @@
<string name="ro_perm_desc">"Permite que os aplicativos leiam os dados do provedor de conteúdo de mensagem instantânea."</string>
<string name="wo_perm_label">"gravar mensagens instantâneas"</string>
<string name="wo_perm_desc">"Permite que os aplicativos gravem os dados no provedor de conteúdo de mensagem instantânea."</string>
- <string name="im_label">"Mensagem instantânea"</string>
- <string name="landing_page_title">"Bate-papo - Selecione uma conta"</string>
- <string name="menu_add_account">"Adicionar conta"</string>
- <string name="menu_edit_account">"Editar conta"</string>
- <string name="menu_remove_account">"Remover conta"</string>
- <string name="sign_in">"Fazer login"</string>
- <string name="menu_sign_out">"Sair"</string>
- <string name="menu_settings">"Configurações"</string>
- <string name="menu_sign_out_all">"Sair de todos"</string>
- <string name="choose_account_title">"Bate-papo - Selecione uma conta"</string>
- <string name="conversations">"(%1$d)"</string>
- <string name="add_account">"Adicionar conta <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
- <string name="menu_view_contact_list">"Lista de contatos"</string>
- <string name="signing_in_wait">"Fazendo login..."</string>
</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 86d0dae..6987e48 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -19,19 +19,4 @@
<string name="ro_perm_desc">"Позволяет приложениям считывать данные через поставщика чата."</string>
<string name="wo_perm_label">"писать мгновенные сообщения"</string>
<string name="wo_perm_desc">"Позволяет приложениям записывать данные через поставщика чата."</string>
- <string name="im_label">"Чат"</string>
- <string name="landing_page_title">"Чат – выберите аккаунт"</string>
- <string name="menu_add_account">"Добавить аккаунт"</string>
- <string name="menu_edit_account">"Изменить аккаунт"</string>
- <string name="menu_remove_account">"Удалить аккаунт"</string>
- <string name="sign_in">"Вход"</string>
- <string name="menu_sign_out">"Выход"</string>
- <string name="menu_settings">"Настройки"</string>
- <string name="menu_sign_out_all">"Выйти отовсюду"</string>
- <string name="choose_account_title">"Чат – выберите аккаунт"</string>
- <!-- no translation found for conversations (6809253595345281731) -->
- <skip />
- <string name="add_account">"Добавить аккаунт <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
- <string name="menu_view_contact_list">"Список контактов"</string>
- <string name="signing_in_wait">"Выполняется вход..."</string>
</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index c816dc4..4386c2a 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -19,18 +19,4 @@
<string name="ro_perm_desc">"Tillåter att ett program läser data från chattens innehållsleverantör."</string>
<string name="wo_perm_label">"skriva chattmeddelanden"</string>
<string name="wo_perm_desc">"Tillåter att ett program skriver data till innehållsleverantören för chatten."</string>
- <string name="im_label">"Chatt"</string>
- <string name="landing_page_title">"Chatt – välj ett konto"</string>
- <string name="menu_add_account">"Lägg till konto"</string>
- <string name="menu_edit_account">"Redigera konto"</string>
- <string name="menu_remove_account">"Ta bort konto"</string>
- <string name="sign_in">"Logga in"</string>
- <string name="menu_sign_out">"Logga ut"</string>
- <string name="menu_settings">"Inställningar"</string>
- <string name="menu_sign_out_all">"Logga ut från alla"</string>
- <string name="choose_account_title">"Chatt – Välj ett konto"</string>
- <string name="conversations">"(%1$d)"</string>
- <string name="add_account">"Lägg till kontot <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
- <string name="menu_view_contact_list">"Kontaktlista"</string>
- <string name="signing_in_wait">"Loggar in…"</string>
</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 4f51898..a90e096 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -19,18 +19,4 @@
<string name="ro_perm_desc">"Uygulamalara, IM içerik sağlayıcısından gelen verileri okuma izni verir."</string>
<string name="wo_perm_label">"anlık iletiler yazın"</string>
<string name="wo_perm_desc">"Uygulamaların IM içerik sağlayıcısına veri yazmasına izin verir."</string>
- <string name="im_label">"IM"</string>
- <string name="landing_page_title">"Sohbet - Bir hesap seçin"</string>
- <string name="menu_add_account">"Hesap ekle"</string>
- <string name="menu_edit_account">"Hesabı düzenle"</string>
- <string name="menu_remove_account">"Hesabı kaldır"</string>
- <string name="sign_in">"Oturum aç"</string>
- <string name="menu_sign_out">"Çıkış"</string>
- <string name="menu_settings">"Ayarlar"</string>
- <string name="menu_sign_out_all">"Tüm hizmetlerden çık"</string>
- <string name="choose_account_title">"Sohbet - Bir hesap seçin"</string>
- <string name="conversations">"(%1$d)"</string>
- <string name="add_account">"<xliff:g id="ACCOUNT">%1$s</xliff:g> hesabını ekle"</string>
- <string name="menu_view_contact_list">"Kişi listesi"</string>
- <string name="signing_in_wait">"Oturum açılıyor..."</string>
</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 828ebbc..5599a70 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -19,19 +19,4 @@
<string name="ro_perm_desc">"允许应用程序从即时消息内容提供者处读取数据。"</string>
<string name="wo_perm_label">"编写即时消息"</string>
<string name="wo_perm_desc">"允许应用程序向即时消息内容提供者写入数据。"</string>
- <string name="im_label">"即时消息"</string>
- <string name="landing_page_title">"聊天 - 选择一个帐户"</string>
- <string name="menu_add_account">"添加帐户"</string>
- <string name="menu_edit_account">"编辑帐户"</string>
- <string name="menu_remove_account">"删除帐户"</string>
- <string name="sign_in">"登录"</string>
- <string name="menu_sign_out">"退出"</string>
- <string name="menu_settings">"设置"</string>
- <string name="menu_sign_out_all">"全部退出"</string>
- <string name="choose_account_title">"聊天 - 选择一个帐户"</string>
- <!-- no translation found for conversations (6809253595345281731) -->
- <skip />
- <string name="add_account">"添加 <xliff:g id="ACCOUNT">%1$s</xliff:g> 帐户"</string>
- <string name="menu_view_contact_list">"联系人列表"</string>
- <string name="signing_in_wait">"正在登录..."</string>
</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 3d7b51f..d625e80 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -19,19 +19,4 @@
<string name="ro_perm_desc">"允許應用程式讀取來自即時訊息內容提供者的資料。"</string>
<string name="wo_perm_label">"撰寫即時訊息"</string>
<string name="wo_perm_desc">"允許應用程式將資料寫入即時訊息內容提供者。"</string>
- <string name="im_label">"即時訊息"</string>
- <string name="landing_page_title">"即時通訊 - 選取帳戶"</string>
- <string name="menu_add_account">"新增帳戶"</string>
- <string name="menu_edit_account">"編輯帳戶"</string>
- <string name="menu_remove_account">"移除帳戶"</string>
- <string name="sign_in">"登入"</string>
- <string name="menu_sign_out">"登出"</string>
- <string name="menu_settings">"設定"</string>
- <string name="menu_sign_out_all">"全部登出"</string>
- <string name="choose_account_title">"即時通訊 - 選取帳戶"</string>
- <!-- no translation found for conversations (6809253595345281731) -->
- <skip />
- <string name="add_account">"新增 <xliff:g id="ACCOUNT">%1$s</xliff:g> 帳戶"</string>
- <string name="menu_view_contact_list">"聯絡人"</string>
- <string name="signing_in_wait">"登入中…"</string>
</resources>
diff --git a/res/values/config.xml b/res/values/config.xml
deleted file mode 100644
index 8060c3d..0000000
--- a/res/values/config.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2009, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources>
- <!-- Flag indicating whether IM app should be shown in the application tray -->
- <bool name="enableLandingPageActivity">false</bool>
-</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2519476..6b06a45 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -28,40 +28,6 @@
</string>
<!-- The application label -->
- <string name="im_label">IM</string>
-
- <!-- These strings displayed on the landing page. -->
- <!-- The title of the landing page.-->
- <string name="landing_page_title">Chat - Select an account</string>
-
- <!-- Landing page screen menu and context menu items. -->
- <!-- Conext menu item: add a new account.-->
- <string name="menu_add_account">Add account</string>
- <!-- Conext menu item: edit an account.-->
- <string name="menu_edit_account">Edit account</string>
- <!-- Conext menu item: remove an account.-->
- <string name="menu_remove_account">Remove account</string>
- <!-- Context menu item: sign into service. -->
- <string name="sign_in">Sign in</string>
- <!-- Context menu item: sign out the service.-->
- <string name="menu_sign_out">Sign out</string>
- <!-- Context menu item: go to the setting page.-->
- <string name="menu_settings">Settings</string>
- <!-- Screen menu item: sign out all service.-->
- <string name="menu_sign_out_all">Sign out all</string>
-
- <!-- These strings displayed on the landing page. -->
- <!-- The title of the landing page.-->
- <string name="choose_account_title">Chat - Select an account</string>
- <!-- Displays the number of ongoing chats on the landing page.-->
- <string name="conversations">(%1$d)</string>
- <!-- The add account label on the landing page if there isn't any account.-->
- <string name="add_account">Add <xliff:g id="account">%1$s</xliff:g> account</string>
-
- <!-- Screen menu item: go the contact list screen. May be overrided by the plugin.-->
- <string name="menu_view_contact_list">Contact list</string>
-
- <!-- Connection status -->
- <string name="signing_in_wait">Signing in\u2026</string>
+ <string name="app_label">IM Storage</string>
</resources>
diff --git a/src/com/android/providers/im/BrandingResources.java b/src/com/android/providers/im/BrandingResources.java
deleted file mode 100644
index e232a96..0000000
--- a/src/com/android/providers/im/BrandingResources.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.providers.im;
-
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.res.Resources;
-import android.graphics.drawable.Drawable;
-import android.os.RemoteException;
-import android.util.Log;
-
-import java.util.Map;
-
-/**
- * The provider specific branding resources.
- */
-public class BrandingResources {
- private static final String TAG = "IM";
- private static final boolean LOCAL_DEBUG = false;
-
- private Map<Integer, Integer> mResMapping;
- private Resources mPackageRes;
-
- private BrandingResources mDefaultRes;
-
- /**
- * Creates a new BrandingResource of a specific plug-in. The resources will
- * be retrieved from the plug-in package.
- *
- * @param context The current application context.
- * @param pluginInfo The info about the plug-in.
- * @param provider the name of the IM service provider.
- * @param defaultRes The default branding resources. If the resource is not
- * found in the plug-in, the default resource will be returned.
- */
- public BrandingResources(Context context, LandingPage.PluginInfo pluginInfo, String provider,
- BrandingResources defaultRes) {
- String packageName = null;
- mDefaultRes = defaultRes;
-
- try {
- mResMapping = pluginInfo.mPlugin.getResourceMapForProvider(provider);
- packageName = pluginInfo.mPlugin.getResourcePackageNameForProvider(provider);
- } catch (RemoteException e) {
- Log.e(TAG, "Failed load the plugin resource map", e);
- }
-
- if (packageName == null) {
- packageName = pluginInfo.mPackageName;
- }
-
- PackageManager pm = context.getPackageManager();
- try {
- if (LOCAL_DEBUG) log("load resources from " + packageName);
- mPackageRes = pm.getResourcesForApplication(packageName);
- } catch (NameNotFoundException e) {
- Log.e(TAG, "Can not load resources from " + packageName);
- }
- }
-
- /**
- * Creates a BrandingResource with application context and the resource ID map.
- * The resource will be retrieved from the context directly instead from the plug-in package.
- *
- * @param context
- * @param resMapping
- */
- public BrandingResources(Context context, Map<Integer, Integer> resMapping,
- BrandingResources defaultRes) {
- mPackageRes = context.getResources();
- mResMapping = resMapping;
- mDefaultRes = defaultRes;
- }
-
- /**
- * Gets a drawable object associated with a particular resource ID defined
- * in {@link com.android.im.plugin.BrandingResourceIDs}
- *
- * @param id The ID defined in
- * {@link com.android.im.plugin.BrandingResourceIDs}
- * @return Drawable An object that can be used to draw this resource.
- */
- public Drawable getDrawable(int id) {
- int resId = getPackageResourceId(id);
- if (resId != 0) {
- return mPackageRes.getDrawable(resId);
- } else if (mDefaultRes != null){
- return mDefaultRes.getDrawable(id);
- } else {
- return null;
- }
- }
-
- /**
- * Gets the string value associated with a particular resource ID defined in
- * {@link com.android.im.plugin.BrandingResourceIDs}
- *
- * @param id The ID of the string resource defined in
- * {@link com.android.im.plugin.BrandingResourceIDs}
- * @param formatArgs The format arguments that will be used for
- * substitution.
- * @return The string data associated with the resource
- */
- public String getString(int id, Object... formatArgs) {
- int resId = getPackageResourceId(id);
- if (resId != 0) {
- return mPackageRes.getString(resId, formatArgs);
- } else if (mDefaultRes != null){
- return mDefaultRes.getString(id, formatArgs);
- } else {
- return null;
- }
- }
-
- /**
- * Gets the string array associated with a particular resource ID defined in
- * {@link com.android.im.plugin.BrandingResourceIDs}
- *
- * @param id The ID of the string resource defined in
- * {@link com.android.im.plugin.BrandingResourceIDs}
- * @return The string array associated with the resource.
- */
- public String[] getStringArray(int id) {
- int resId = getPackageResourceId(id);
- if (resId != 0) {
- return mPackageRes.getStringArray(resId);
- } else if (mDefaultRes != null){
- return mDefaultRes.getStringArray(id);
- } else {
- return null;
- }
- }
-
- private int getPackageResourceId(int id) {
- if (mResMapping == null || mPackageRes == null) {
- return 0;
- }
- Integer resId = mResMapping.get(id);
- return resId == null ? 0 : resId;
- }
-
- private void log(String msg) {
- Log.d(TAG, "[BrandingRes] " + msg);
- }
-}
diff --git a/src/com/android/providers/im/ImProvider.java b/src/com/android/providers/im/ImProvider.java
index dcb0309..744df23 100644
--- a/src/com/android/providers/im/ImProvider.java
+++ b/src/com/android/providers/im/ImProvider.java
@@ -756,6 +756,8 @@ public class ImProvider extends ContentProvider {
"accounts.pw AS account_pw");
sProviderAccountsProjectionMap.put(Im.Provider.ACTIVE_ACCOUNT_LOCKED,
"accounts.locked AS account_locked");
+ sProviderAccountsProjectionMap.put(Im.Provider.ACTIVE_ACCOUNT_KEEP_SIGNED_IN,
+ "accounts.keep_signed_in AS account_keepSignedIn");
sProviderAccountsProjectionMap.put(Im.Provider.ACCOUNT_PRESENCE_STATUS,
"accountStatus.presenceStatus AS account_presenceStatus");
sProviderAccountsProjectionMap.put(Im.Provider.ACCOUNT_CONNECTION_STATUS,
@@ -2851,6 +2853,12 @@ public class ImProvider extends ContentProvider {
idColumnName = Im.SessionCookies.ACCOUNT;
break;
+ case MATCH_PROVIDER_SETTINGS_BY_ID:
+ tableToChange = TABLE_PROVIDER_SETTINGS;
+ changedItemId = url.getPathSegments().get(1);
+ idColumnName = Im.ProviderSettings.PROVIDER;
+ break;
+
case MATCH_PROVIDER_SETTINGS_BY_ID_AND_NAME:
tableToChange = TABLE_PROVIDER_SETTINGS;
diff --git a/src/com/android/providers/im/LandingPage.java b/src/com/android/providers/im/LandingPage.java
deleted file mode 100644
index 2c09b02..0000000
--- a/src/com/android/providers/im/LandingPage.java
+++ /dev/null
@@ -1,710 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.providers.im;
-
-import android.app.ListActivity;
-import android.app.ActivityManagerNative;
-import android.app.ActivityThread;
-import android.app.Application;
-import android.content.ContentUris;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.content.pm.ServiceInfo;
-import android.database.Cursor;
-import android.im.IImPlugin;
-import android.im.ImPluginConsts;
-import android.im.BrandingResourceIDs;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.RemoteException;
-import android.os.IBinder;
-import android.provider.Im;
-import android.util.Log;
-import android.util.AttributeSet;
-import android.view.ContextMenu;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.LayoutInflater;
-import android.view.ContextMenu.ContextMenuInfo;
-import android.widget.AdapterView;
-import android.widget.ListView;
-import android.widget.CursorAdapter;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
-
-import com.android.providers.im.R;
-
-import dalvik.system.PathClassLoader;
-
-public class LandingPage extends ListActivity implements View.OnCreateContextMenuListener {
- private static final String TAG = "IM";
- private final static boolean LOCAL_DEBUG = false;
-
- private static final int ID_SIGN_IN = Menu.FIRST + 1;
- private static final int ID_SIGN_OUT = Menu.FIRST + 2;
- private static final int ID_EDIT_ACCOUNT = Menu.FIRST + 3;
- private static final int ID_REMOVE_ACCOUNT = Menu.FIRST + 4;
- private static final int ID_SIGN_OUT_ALL = Menu.FIRST + 5;
- private static final int ID_ADD_ACCOUNT = Menu.FIRST + 6;
- private static final int ID_VIEW_CONTACT_LIST = Menu.FIRST + 7;
- private static final int ID_SETTINGS = Menu.FIRST + 8;
-
- private ProviderAdapter mAdapter;
- private Cursor mProviderCursor;
-
- private static final String[] PROVIDER_PROJECTION = {
- Im.Provider._ID,
- Im.Provider.NAME,
- Im.Provider.FULLNAME,
- Im.Provider.CATEGORY,
- Im.Provider.ACTIVE_ACCOUNT_ID,
- Im.Provider.ACTIVE_ACCOUNT_USERNAME,
- Im.Provider.ACTIVE_ACCOUNT_PW,
- Im.Provider.ACTIVE_ACCOUNT_LOCKED,
- Im.Provider.ACCOUNT_PRESENCE_STATUS,
- Im.Provider.ACCOUNT_CONNECTION_STATUS,
- };
-
- private static final int PROVIDER_ID_COLUMN = 0;
- private static final int PROVIDER_NAME_COLUMN = 1;
- private static final int PROVIDER_FULLNAME_COLUMN = 2;
- private static final int PROVIDER_CATEGORY_COLUMN = 3;
- private static final int ACTIVE_ACCOUNT_ID_COLUMN = 4;
- private static final int ACTIVE_ACCOUNT_USERNAME_COLUMN = 5;
- private static final int ACTIVE_ACCOUNT_PW_COLUMN = 6;
- private static final int ACTIVE_ACCOUNT_LOCKED = 7;
- private static final int ACCOUNT_PRESENCE_STATUS = 8;
- private static final int ACCOUNT_CONNECTION_STATUS = 9;
-
- private static final String PROVIDER_SELECTION = "providers.name!=?";
-
- private HashMap<String, PluginInfo> mProviderToPluginMap;
- private HashMap<Long, PluginInfo> mAccountToPluginMap;
- private HashMap<Long, BrandingResources> mBrandingResources;
- private BrandingResources mDefaultBrandingResources;
-
- private String[] mProviderSelectionArgs = new String[1];
-
- public class PluginInfo {
- public IImPlugin mPlugin;
- /**
- * The name of the package that the plugin is in.
- */
- public String mPackageName;
-
- /**
- * The name of the class that implements {@link @ImFrontDoorPlugin} in this plugin.
- */
- public String mClassName;
-
- /**
- * The full path to the location of the package that the plugin is in.
- */
- public String mSrcPath;
-
- public PluginInfo(IImPlugin plugin, String packageName, String className,
- String srcPath) {
- mPackageName = packageName;
- mClassName = className;
- mSrcPath = srcPath;
- mPlugin = plugin;
- }
- };
-
- @Override
- protected void onCreate(Bundle icicle) {
- super.onCreate(icicle);
-
- setTitle(R.string.landing_page_title);
-
- if (!loadPlugins()) {
- Log.e(TAG, "[onCreate] load plugin failed, no plugin found!");
- finish();
- return;
- }
-
- startPlugins();
-
- // get everything except for Google Talk.
- mProviderSelectionArgs[0] = Im.ProviderNames.GTALK;
- mProviderCursor = managedQuery(Im.Provider.CONTENT_URI_WITH_ACCOUNT,
- PROVIDER_PROJECTION,
- PROVIDER_SELECTION /* selection */,
- mProviderSelectionArgs /* selection args */,
- Im.Provider.DEFAULT_SORT_ORDER);
- mAdapter = new ProviderAdapter(this, mProviderCursor);
- setListAdapter(mAdapter);
-
- rebuildAccountToPluginMap();
-
- mBrandingResources = new HashMap<Long, BrandingResources>();
- loadDefaultBrandingRes();
- loadBrandingResources();
-
- registerForContextMenu(getListView());
- }
-
- @Override
- protected void onRestart() {
- super.onRestart();
-
- // refresh the accountToPlugin map after mProviderCursor is requeried
- if (!rebuildAccountToPluginMap()) {
- Log.w(TAG, "[onRestart] rebuiltAccountToPluginMap failed, reload plugins...");
-
- if (!loadPlugins()) {
- Log.e(TAG, "[onRestart] load plugin failed, no plugin found!");
- finish();
- return;
- }
- rebuildAccountToPluginMap();
- }
-
- startPlugins();
- }
-
- @Override
- protected void onStop() {
- super.onStop();
- stopPlugins();
- }
-
- private boolean loadPlugins() {
- mProviderToPluginMap = new HashMap<String, PluginInfo>();
-
- PackageManager pm = getPackageManager();
- List<ResolveInfo> plugins = pm.queryIntentServices(
- new Intent(ImPluginConsts.PLUGIN_ACTION_NAME),
- PackageManager.GET_META_DATA);
- for (ResolveInfo info : plugins) {
- if (Log.isLoggable(TAG, Log.DEBUG)) log("loadPlugins: found plugin " + info);
-
- ServiceInfo serviceInfo = info.serviceInfo;
- if (serviceInfo == null) {
- Log.e(TAG, "Ignore bad IM frontdoor plugin: " + info);
- continue;
- }
-
- IImPlugin plugin = null;
-
- // Load the plug-in directly from the apk instead of binding the service
- // and calling through the IPC binder API. It's more effective in this way
- // and we can avoid the async behaviors of binding service.
- PathClassLoader classLoader = new PathClassLoader(serviceInfo.applicationInfo.sourceDir,
- getClassLoader());
- try {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- log("loadPlugin: load class " + serviceInfo.name);
- }
- Class cls = classLoader.loadClass(serviceInfo.name);
- Object newInstance = cls.newInstance();
- Method m;
-
- // call "attach" method, so the plugin will get initialized with the proper context
- m = cls.getMethod("attach", Context.class, ActivityThread.class, String.class,
- IBinder.class, Application.class, Object.class);
- m.invoke(newInstance,
- new Object[] {this, null, serviceInfo.name, null, getApplication(),
- ActivityManagerNative.getDefault()});
-
- // call "bind" to get the plugin object
- m = cls.getMethod("onBind", Intent.class);
- plugin = (IImPlugin)m.invoke(newInstance, new Object[]{null});
- } catch (ClassNotFoundException e) {
- Log.e(TAG, "Failed load the plugin", e);
- } catch (IllegalAccessException e) {
- Log.e(TAG, "Failed load the plugin", e);
- } catch (InstantiationException e) {
- Log.e(TAG, "Failed load the plugin", e);
- } catch (SecurityException e) {
- Log.e(TAG, "Failed load the plugin", e);
- } catch (NoSuchMethodException e) {
- Log.e(TAG, "Failed load the plugin", e);
- } catch (IllegalArgumentException e) {
- Log.e(TAG, "Failed load the plugin", e);
- } catch (InvocationTargetException e) {
- Log.e(TAG, "Failed load the plugin", e);
- }
-
- if (plugin != null) {
- if (Log.isLoggable(TAG, Log.DEBUG)) log("loadPlugin: plugin " + plugin + " loaded");
- ArrayList<String> providers = getSupportedProviders(plugin);
-
- if (providers == null || providers.size() == 0) {
- Log.e(TAG, "Ignore bad IM frontdoor plugin: " + info + ". No providers found");
- continue;
- }
-
- PluginInfo pluginInfo = new PluginInfo(plugin,
- serviceInfo.packageName,
- serviceInfo.name,
- serviceInfo.applicationInfo.sourceDir);
-
- for (String providerName : providers) {
- mProviderToPluginMap.put(providerName, pluginInfo);
- }
- }
- }
-
- return mProviderToPluginMap.size() > 0;
- }
-
- private void startPlugins() {
- Iterator<PluginInfo> itor = mProviderToPluginMap.values().iterator();
-
- while (itor.hasNext()) {
- PluginInfo pluginInfo = itor.next();
- try {
- pluginInfo.mPlugin.onStart();
- } catch (RemoteException e) {
- Log.e(TAG, "Could not start plugin " + pluginInfo.mPackageName, e);
- }
- }
- }
-
- private void stopPlugins() {
- Iterator<PluginInfo> itor = mProviderToPluginMap.values().iterator();
-
- while (itor.hasNext()) {
- PluginInfo pluginInfo = itor.next();
- try {
- pluginInfo.mPlugin.onStop();
- } catch (RemoteException e) {
- Log.e(TAG, "Could not stop plugin " + pluginInfo.mPackageName, e);
- }
- }
- }
-
- private ArrayList<String> getSupportedProviders(IImPlugin plugin) {
- ArrayList<String> providers = null;
-
- try {
- providers = (ArrayList<String>) plugin.getSupportedProviders();
- } catch (RemoteException ex) {
- Log.e(TAG, "getSupportedProviders caught ", ex);
- }
-
- return providers;
- }
-
- private void loadDefaultBrandingRes() {
- HashMap<Integer, Integer> resMapping = new HashMap<Integer, Integer>();
-
- resMapping.put(BrandingResourceIDs.DRAWABLE_LOGO, R.drawable.imlogo_s);
- resMapping.put(BrandingResourceIDs.DRAWABLE_PRESENCE_ONLINE,
- android.R.drawable.presence_online);
- resMapping.put(BrandingResourceIDs.DRAWABLE_PRESENCE_AWAY,
- android.R.drawable.presence_away);
- resMapping.put(BrandingResourceIDs.DRAWABLE_PRESENCE_BUSY,
- android.R.drawable.presence_busy);
- resMapping.put(BrandingResourceIDs.DRAWABLE_PRESENCE_INVISIBLE,
- android.R.drawable.presence_invisible);
- resMapping.put(BrandingResourceIDs.DRAWABLE_PRESENCE_OFFLINE,
- android.R.drawable.presence_offline);
- resMapping.put(BrandingResourceIDs.STRING_MENU_CONTACT_LIST,
- R.string.menu_view_contact_list);
-
- mDefaultBrandingResources = new BrandingResources(this, resMapping, null /* default res */);
- }
-
- private void loadBrandingResources() {
- mProviderCursor.moveToFirst();
- do {
- long providerId = mProviderCursor.getLong(PROVIDER_ID_COLUMN);
- String providerName = mProviderCursor.getString(PROVIDER_NAME_COLUMN);
- PluginInfo pluginInfo = mProviderToPluginMap.get(providerName);
-
- if (pluginInfo == null) {
- Log.w(TAG, "[LandingPage] loadBrandingResources: no plugin found for " + providerName);
- continue;
- }
-
- if (!mBrandingResources.containsKey(providerId)) {
- BrandingResources res = new BrandingResources(this, pluginInfo, providerName,
- mDefaultBrandingResources);
- mBrandingResources.put(providerId, res);
- }
- } while (mProviderCursor.moveToNext()) ;
- }
-
- public BrandingResources getBrandingResource(long providerId) {
- BrandingResources res = mBrandingResources.get(providerId);
- return res == null ? mDefaultBrandingResources : res;
- }
-
- private boolean rebuildAccountToPluginMap() {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- log("rebuildAccountToPluginMap");
- }
-
- if (mAccountToPluginMap != null) {
- mAccountToPluginMap.clear();
- }
-
- mAccountToPluginMap = new HashMap<Long, PluginInfo>();
-
- mProviderCursor.moveToFirst();
-
- boolean retVal = true;
-
- do {
- long accountId = mProviderCursor.getLong(ACTIVE_ACCOUNT_ID_COLUMN);
-
- if (accountId == 0) {
- continue;
- }
-
- String name = mProviderCursor.getString(PROVIDER_NAME_COLUMN);
- PluginInfo pluginInfo = mProviderToPluginMap.get(name);
- if (pluginInfo != null) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- log("rebuildAccountToPluginMap: add plugin for acct=" + accountId + ", provider=" + name);
- }
- mAccountToPluginMap.put(accountId, pluginInfo);
- } else {
- Log.w(TAG, "[LandingPage] no plugin found for " + name);
- retVal = false;
- }
- } while (mProviderCursor.moveToNext()) ;
-
- return retVal;
- }
-
- private void signIn(long accountId) {
- if (accountId == 0) {
- Log.w(TAG, "signIn: account id is 0, bail");
- return;
- }
-
- boolean isAccountEditible = mProviderCursor.getInt(ACTIVE_ACCOUNT_LOCKED) == 0;
- if (isAccountEditible && mProviderCursor.isNull(ACTIVE_ACCOUNT_PW_COLUMN)) {
- // no password, edit the account
- if (Log.isLoggable(TAG, Log.DEBUG)) log("no pw for account " + accountId);
- Intent intent = getEditAccountIntent();
- startActivity(intent);
- return;
- }
-
-
- PluginInfo pluginInfo = mAccountToPluginMap.get(accountId);
- if (pluginInfo == null) {
- Log.e(TAG, "signIn: cannot find plugin for account " + accountId);
- return;
- }
-
- try {
- if (Log.isLoggable(TAG, Log.DEBUG)) log("sign in for account " + accountId);
- pluginInfo.mPlugin.signIn(accountId);
- } catch (RemoteException ex) {
- Log.e(TAG, "signIn failed", ex);
- }
- }
-
- boolean isSigningIn(Cursor cursor) {
- int connectionStatus = cursor.getInt(ACCOUNT_CONNECTION_STATUS);
- return connectionStatus == Im.ConnectionStatus.CONNECTING;
- }
-
- boolean isSignedIn(Cursor cursor) {
- int connectionStatus = cursor.getInt(ACCOUNT_CONNECTION_STATUS);
- return connectionStatus == Im.ConnectionStatus.ONLINE;
- }
-
- private boolean allAccountsSignedOut() {
- mProviderCursor.moveToFirst();
- do {
- if (isSignedIn(mProviderCursor)) {
- return false;
- }
- } while (mProviderCursor.moveToNext()) ;
-
- return true;
- }
-
- private void signoutAll() {
- do {
- long accountId = mProviderCursor.getLong(ACTIVE_ACCOUNT_ID_COLUMN);
- signOut(accountId);
- } while (mProviderCursor.moveToNext()) ;
- }
-
- private void signOut(long accountId) {
- if (accountId == 0) {
- Log.w(TAG, "signOut: account id is 0, bail");
- return;
- }
-
- PluginInfo pluginInfo = mAccountToPluginMap.get(accountId);
- if (pluginInfo == null) {
- Log.e(TAG, "signOut: cannot find plugin for account " + accountId);
- return;
- }
-
- try {
- if (Log.isLoggable(TAG, Log.DEBUG)) log("sign out for account " + accountId);
- pluginInfo.mPlugin.signOut(accountId);
- } catch (RemoteException ex) {
- Log.e(TAG, "signOut failed", ex);
- }
- }
-
- @Override
- public boolean onPrepareOptionsMenu(Menu menu) {
- super.onPrepareOptionsMenu(menu);
- menu.findItem(ID_SIGN_OUT_ALL).setVisible(!allAccountsSignedOut());
- return true;
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- menu.add(0, ID_SIGN_OUT_ALL, 0, R.string.menu_sign_out_all)
- .setIcon(android.R.drawable.ic_menu_close_clear_cancel);
- return true;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case ID_SIGN_OUT_ALL:
- signoutAll();
- return true;
- }
- return super.onOptionsItemSelected(item);
- }
-
- @Override
- public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
- AdapterView.AdapterContextMenuInfo info;
- try {
- info = (AdapterView.AdapterContextMenuInfo) menuInfo;
- } catch (ClassCastException e) {
- Log.e(TAG, "bad menuInfo", e);
- return;
- }
-
- Cursor providerCursor = (Cursor) getListAdapter().getItem(info.position);
- menu.setHeaderTitle(providerCursor.getString(PROVIDER_FULLNAME_COLUMN));
-
- if (providerCursor.isNull(ACTIVE_ACCOUNT_ID_COLUMN)) {
- menu.add(0, ID_ADD_ACCOUNT, 0, R.string.menu_add_account);
- return;
- }
-
- long providerId = providerCursor.getLong(PROVIDER_ID_COLUMN);
- boolean isLoggingIn = isSigningIn(providerCursor);
- boolean isLoggedIn = isSignedIn(providerCursor);
-
- if (!isLoggedIn) {
- menu.add(0, ID_SIGN_IN, 0, R.string.sign_in).setIcon(com.android.internal.R.drawable.ic_menu_login);
- } else {
- BrandingResources brandingRes = getBrandingResource(providerId);
- menu.add(0, ID_VIEW_CONTACT_LIST, 0,
- brandingRes.getString(BrandingResourceIDs.STRING_MENU_CONTACT_LIST));
- menu.add(0, ID_SIGN_OUT, 0, R.string.menu_sign_out)
- .setIcon(android.R.drawable.ic_menu_close_clear_cancel);
- }
-
- boolean isAccountEditible = providerCursor.getInt(ACTIVE_ACCOUNT_LOCKED) == 0;
- if (isAccountEditible && !isLoggingIn && !isLoggedIn) {
- menu.add(0, ID_EDIT_ACCOUNT, 0, R.string.menu_edit_account)
- .setIcon(android.R.drawable.ic_menu_edit);
- menu.add(0, ID_REMOVE_ACCOUNT, 0, R.string.menu_remove_account)
- .setIcon(android.R.drawable.ic_menu_delete);
- }
-
- // always add a settings menu item
- menu.add(0, ID_SETTINGS, 0, R.string.menu_settings);
- }
-
- @Override
- public boolean onContextItemSelected(MenuItem item) {
- AdapterView.AdapterContextMenuInfo info;
- try {
- info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
- } catch (ClassCastException e) {
- Log.e(TAG, "bad menuInfo", e);
- return false;
- }
- long providerId = info.id;
- Cursor providerCursor = (Cursor) getListAdapter().getItem(info.position);
- long accountId = providerCursor.getLong(ACTIVE_ACCOUNT_ID_COLUMN);
-
- switch (item.getItemId()) {
- case ID_EDIT_ACCOUNT:
- {
- startActivity(getEditAccountIntent());
- return true;
- }
-
- case ID_REMOVE_ACCOUNT:
- {
- Uri accountUri = ContentUris.withAppendedId(Im.Account.CONTENT_URI, accountId);
- getContentResolver().delete(accountUri, null, null);
- // Requery the cursor to force refreshing screen
- providerCursor.requery();
- return true;
- }
-
- case ID_VIEW_CONTACT_LIST:
- {
- Intent intent = getViewContactsIntent();
- startActivity(intent);
- return true;
- }
- case ID_ADD_ACCOUNT:
- {
- startActivity(getCreateAccountIntent());
- return true;
- }
-
- case ID_SIGN_IN:
- {
- signIn(accountId);
- return true;
- }
-
- case ID_SIGN_OUT:
- {
- // TODO: progress bar
- signOut(accountId);
- return true;
- }
-
- case ID_SETTINGS:
- {
- Intent intent = new Intent(Intent.ACTION_VIEW, Im.ProviderSettings.CONTENT_URI);
- intent.addCategory(getProviderCategory(providerCursor));
- intent.putExtra("providerId", providerId);
- startActivity(intent);
- return true;
- }
-
- }
-
- return false;
- }
-
- @Override
- protected void onListItemClick(ListView l, View v, int position, long id) {
- Intent intent = null;
- mProviderCursor.moveToPosition(position);
-
- if (mProviderCursor.isNull(ACTIVE_ACCOUNT_ID_COLUMN)) {
- // add account
- intent = getCreateAccountIntent();
- } else {
- int state = mProviderCursor.getInt(ACCOUNT_CONNECTION_STATUS);
-
- if (state == Im.ConnectionStatus.OFFLINE || state == Im.ConnectionStatus.CONNECTING) {
- boolean isAccountEditible = mProviderCursor.getInt(ACTIVE_ACCOUNT_LOCKED) == 0;
- if (isAccountEditible && mProviderCursor.isNull(ACTIVE_ACCOUNT_PW_COLUMN)) {
- // no password, edit the account
- intent = getEditAccountIntent();
- } else {
- long accountId = mProviderCursor.getLong(ACTIVE_ACCOUNT_ID_COLUMN);
- signIn(accountId);
- }
- } else {
- intent = getViewContactsIntent();
- }
- }
-
- if (intent != null) {
- startActivity(intent);
- }
- }
-
- Intent getCreateAccountIntent() {
- Intent intent = new Intent();
- intent.setAction(Intent.ACTION_INSERT);
-
- long providerId = mProviderCursor.getLong(PROVIDER_ID_COLUMN);
- intent.setData(ContentUris.withAppendedId(Im.Provider.CONTENT_URI, providerId));
- intent.addCategory(getProviderCategory(mProviderCursor));
- return intent;
- }
-
- Intent getEditAccountIntent() {
- Intent intent = new Intent(Intent.ACTION_EDIT,
- ContentUris.withAppendedId(Im.Account.CONTENT_URI,
- mProviderCursor.getLong(ACTIVE_ACCOUNT_ID_COLUMN)));
- intent.addCategory(getProviderCategory(mProviderCursor));
- return intent;
- }
-
- Intent getViewContactsIntent() {
- Intent intent = new Intent(Intent.ACTION_VIEW);
- intent.setData(Im.Contacts.CONTENT_URI);
- intent.addCategory(getProviderCategory(mProviderCursor));
- intent.putExtra("accountId", mProviderCursor.getLong(ACTIVE_ACCOUNT_ID_COLUMN));
- return intent;
- }
-
- private String getProviderCategory(Cursor cursor) {
- return cursor.getString(PROVIDER_CATEGORY_COLUMN);
- }
-
-
- static void log(String msg) {
- Log.d(TAG, "[LandingPage]" + msg);
- }
-
- private class ProviderListItemFactory implements LayoutInflater.Factory {
- public View onCreateView(String name, Context context, AttributeSet attrs) {
- if (name != null && name.equals(ProviderListItem.class.getName())) {
- return new ProviderListItem(context, LandingPage.this);
- }
- return null;
- }
- }
-
- private final class ProviderAdapter extends CursorAdapter {
- private LayoutInflater mInflater;
-
- public ProviderAdapter(Context context, Cursor c) {
- super(context, c);
- mInflater = LayoutInflater.from(context).cloneInContext(context);
- mInflater.setFactory(new ProviderListItemFactory());
- }
-
- @Override
- public View newView(Context context, Cursor cursor, ViewGroup parent) {
- // create a custom view, so we can manage it ourselves. Mainly, we want to
- // initialize the widget views (by calling getViewById()) in newView() instead of in
- // bindView(), which can be called more often.
- ProviderListItem view = (ProviderListItem) mInflater.inflate(
- R.layout.account_view, parent, false);
- view.init(cursor);
- return view;
- }
-
- @Override
- public void bindView(View view, Context context, Cursor cursor) {
- ((ProviderListItem) view).bindView(cursor);
- }
- }
-
-}
diff --git a/src/com/android/providers/im/ProviderListItem.java b/src/com/android/providers/im/ProviderListItem.java
deleted file mode 100644
index 9032e94..0000000
--- a/src/com/android/providers/im/ProviderListItem.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.providers.im;
-
-import android.graphics.drawable.Drawable;
-import android.widget.LinearLayout;
-import android.widget.ImageView;
-import android.widget.TextView;
-import android.content.Context;
-import android.content.ContentResolver;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.im.BrandingResourceIDs;
-import android.provider.Im;
-import android.content.res.ColorStateList;
-import android.view.View;
-import android.util.Log;
-import com.android.providers.im.R;
-
-public class ProviderListItem extends LinearLayout {
- private static final String TAG = "IM";
- private static final boolean LOCAL_DEBUG = false;
-
- private LandingPage mActivity;
- private ImageView mProviderIcon;
- private ImageView mStatusIcon;
- private TextView mProviderName;
- private TextView mLoginName;
- private TextView mChatView;
- private View mUnderBubble;
- private Drawable mBubbleDrawable, mDefaultBackground;
-
- private int mProviderIdColumn;
- private int mProviderFullnameColumn;
- private int mActiveAccountIdColumn;
- private int mActiveAccountUserNameColumn;
- private int mAccountPresenceStatusColumn;
- private int mAccountConnectionStatusColumn;
-
- private ColorStateList mProviderNameColors;
- private ColorStateList mLoginNameColors;
- private ColorStateList mChatViewColors;
-
- public ProviderListItem(Context context, LandingPage activity) {
- super(context);
- mActivity = activity;
- }
-
- public void init(Cursor c) {
- mProviderIcon = (ImageView) findViewById(R.id.providerIcon);
- mStatusIcon = (ImageView) findViewById(R.id.statusIcon);
- mProviderName = (TextView) findViewById(R.id.providerName);
- mLoginName = (TextView) findViewById(R.id.loginName);
- mChatView = (TextView) findViewById(R.id.conversations);
- mUnderBubble = (View) findViewById(R.id.underBubble);
- mBubbleDrawable = getResources().getDrawable(R.drawable.bubble);
- mDefaultBackground = getResources().getDrawable(R.drawable.default_background);
-
- mProviderIdColumn = c.getColumnIndexOrThrow(Im.Provider._ID);
- mProviderFullnameColumn = c.getColumnIndexOrThrow(Im.Provider.FULLNAME);
- mActiveAccountIdColumn = c.getColumnIndexOrThrow(
- Im.Provider.ACTIVE_ACCOUNT_ID);
- mActiveAccountUserNameColumn = c.getColumnIndexOrThrow(
- Im.Provider.ACTIVE_ACCOUNT_USERNAME);
- mAccountPresenceStatusColumn = c.getColumnIndexOrThrow(
- Im.Provider.ACCOUNT_PRESENCE_STATUS);
- mAccountConnectionStatusColumn = c.getColumnIndexOrThrow(
- Im.Provider.ACCOUNT_CONNECTION_STATUS);
-
- mProviderNameColors = mProviderName.getTextColors();
- mLoginNameColors = mLoginName.getTextColors();
- mChatViewColors = mChatView.getTextColors();
- }
-
- public void bindView(Cursor cursor) {
- Resources r = getResources();
- ImageView providerIcon = mProviderIcon;
- ImageView statusIcon = mStatusIcon;
- TextView providerName = mProviderName;
- TextView loginName = mLoginName;
- TextView chatView = mChatView;
-
- int providerId = cursor.getInt(mProviderIdColumn);
- String providerDisplayName = cursor.getString(mProviderFullnameColumn);
-
- BrandingResources brandingRes = mActivity.getBrandingResource(providerId);
- providerIcon.setImageDrawable(
- brandingRes.getDrawable(BrandingResourceIDs.DRAWABLE_LOGO));
-
- mUnderBubble.setBackgroundDrawable(mDefaultBackground);
- statusIcon.setVisibility(View.GONE);
-
- providerName.setTextColor(mProviderNameColors);
- loginName.setTextColor(mLoginNameColors);
- chatView.setTextColor(mChatViewColors);
-
- if (!cursor.isNull(mActiveAccountIdColumn)) {
- mLoginName.setVisibility(View.VISIBLE);
- providerName.setVisibility(View.VISIBLE);
- providerName.setText(providerDisplayName);
-
- long accountId = cursor.getLong(mActiveAccountIdColumn);
- int connectionStatus = cursor.getInt(mAccountConnectionStatusColumn);
-
- String secondRowText;
-
- chatView.setVisibility(View.GONE);
-
- switch (connectionStatus) {
- case Im.ConnectionStatus.CONNECTING:
- secondRowText = r.getString(R.string.signing_in_wait);
- break;
-
- case Im.ConnectionStatus.ONLINE:
- int presenceIconId = getPresenceIconId(cursor);
- statusIcon.setImageDrawable(
- brandingRes.getDrawable(presenceIconId));
- statusIcon.setVisibility(View.VISIBLE);
- ContentResolver cr = mActivity.getContentResolver();
-
- int count = getConversationCount(cr, accountId);
- if (count > 0) {
- mUnderBubble.setBackgroundDrawable(mBubbleDrawable);
- chatView.setVisibility(View.VISIBLE);
- chatView.setText(r.getString(R.string.conversations, count));
-
- providerName.setTextColor(0xff000000);
- loginName.setTextColor(0xff000000);
- chatView.setTextColor(0xff000000);
- } else {
- chatView.setVisibility(View.GONE);
- }
-
- secondRowText = cursor.getString(mActiveAccountUserNameColumn);
- break;
-
- default:
- secondRowText = cursor.getString(mActiveAccountUserNameColumn);
- break;
- }
-
- loginName.setText(secondRowText);
-
- } else {
- // No active account, show add account
- mLoginName.setVisibility(View.GONE);
-
- mProviderName.setText(providerDisplayName);
- }
- }
-
- private int getConversationCount(ContentResolver cr, long accountId) {
- // TODO: this is code used to get Google Talk's chat count. Not sure if this will work
- // for IMPS chat count.
- StringBuilder where = new StringBuilder();
- where.append(Im.Chats.CONTACT_ID);
- where.append(" in (select _id from contacts where ");
- where.append(Im.Contacts.ACCOUNT);
- where.append("=");
- where.append(accountId);
- where.append(")");
-
- Cursor cursor = cr.query(Im.Chats.CONTENT_URI, null, where.toString(), null, null);
-
- try {
- return cursor.getCount();
- } finally {
- cursor.close();
- }
- }
-
- private int getPresenceIconId(Cursor cursor) {
- int presenceStatus = cursor.getInt(mAccountPresenceStatusColumn);
-
- if (LOCAL_DEBUG) log("getPresenceIconId: presenceStatus=" + presenceStatus);
-
- switch (presenceStatus) {
- case Im.Presence.AVAILABLE:
- return BrandingResourceIDs.DRAWABLE_PRESENCE_ONLINE;
-
- case Im.Presence.IDLE:
- case Im.Presence.AWAY:
- return BrandingResourceIDs.DRAWABLE_PRESENCE_AWAY;
-
- case Im.Presence.DO_NOT_DISTURB:
- return BrandingResourceIDs.DRAWABLE_PRESENCE_BUSY;
-
- case Im.Presence.INVISIBLE:
- return BrandingResourceIDs.DRAWABLE_PRESENCE_INVISIBLE;
-
- default:
- return BrandingResourceIDs.DRAWABLE_PRESENCE_OFFLINE;
- }
- }
-
- private void log(String msg) {
- Log.d(TAG, msg);
- }
-}