Merge commit 'remotes/korg/cupcake' into merge
diff --git a/Android.mk b/Android.mk
index 6a84c0c..a570324 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,7 +1,7 @@
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
-LOCAL_MODULE_TAGS := user development
+LOCAL_MODULE_TAGS := user
LOCAL_SRC_FILES := $(call all-java-files-under, src)
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 2a4bf80..962fc54 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -57,11 +57,12 @@
<!-- Tab container for TwelveKeyDialer and RecentCallsList -->
<activity android:name="DialtactsActivity"
- android:label="@string/dialerIconLabel"
+ android:label="@string/launcherDialer"
android:theme="@android:style/Theme.NoTitleBar"
android:launchMode="singleTask"
android:clearTaskOnLaunch="true"
android:icon="@drawable/ic_launcher_phone"
+ android:screenOrientation="nosensor"
>
<intent-filter>
<action android:name="android.intent.action.DIAL" />
@@ -109,7 +110,7 @@
<!-- An empty activity that presents the DialtactActivity's Contacts tab -->
<activity-alias android:name="DialtactsContactsEntryActivity"
android:targetActivity="DialtactsActivity"
- android:label="@string/contactsIconLabel"
+ android:label="@string/contactsList"
android:icon="@drawable/ic_launcher_contacts"
>
<intent-filter>
@@ -130,6 +131,18 @@
</intent-filter>
</activity-alias>
+ <!-- An empty activity that presents the DialtactActivity's Favorites tab -->
+ <activity-alias android:name="DialtactsFavoritesEntryActivity"
+ android:targetActivity="DialtactsActivity"
+ android:label="@string/strequentList"
+ android:icon="@drawable/ic_launcher_contacts"
+ >
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ </activity-alias>
+
<!-- The actual list of contacts, usually embedded in ContactsActivity -->
<activity android:name="ContactsListActivity"
android:label="@string/contactsList"
@@ -211,6 +224,13 @@
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
+ <intent-filter>
+ <action android:name="com.android.contacts.action.SHOW_OR_CREATE_CONTACT" />
+ <data android:scheme="mailto" />
+ <data android:scheme="tel" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable"
/>
@@ -229,6 +249,7 @@
<activity android:name="CallDetailActivity"
android:label="@string/callDetailTitle"
+ android:theme="@android:style/Theme.NoTitleBar"
>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
diff --git a/res/drawable-finger/border.xml b/res/drawable-finger/border.xml
deleted file mode 100644
index b5d2f28..0000000
--- a/res/drawable-finger/border.xml
+++ /dev/null
@@ -1,22 +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.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/border_selected" />
- <item android:state_pressed="true" android:drawable="@drawable/border_pressed" />
- <item android:drawable="@drawable/border_default" />
-</selector>
-
diff --git a/res/drawable-finger/border_default.9.png b/res/drawable-finger/border_default.9.png
deleted file mode 100644
index e65051d..0000000
--- a/res/drawable-finger/border_default.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-finger/border_pressed.9.png b/res/drawable-finger/border_pressed.9.png
deleted file mode 100644
index 74bc281..0000000
--- a/res/drawable-finger/border_pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-finger/border_selected.9.png b/res/drawable-finger/border_selected.9.png
deleted file mode 100644
index e1d6cc1..0000000
--- a/res/drawable-finger/border_selected.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-finger/btn_circle.xml b/res/drawable-finger/btn_circle.xml
new file mode 100644
index 0000000..9208010
--- /dev/null
+++ b/res/drawable-finger/btn_circle.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_window_focused="false" android:state_enabled="true"
+ android:drawable="@drawable/btn_circle_normal" />
+ <item android:state_window_focused="false" android:state_enabled="false"
+ android:drawable="@drawable/btn_circle_disable" />
+ <item android:state_pressed="true"
+ android:drawable="@drawable/btn_circle_pressed" />
+ <item android:state_focused="true" android:state_enabled="true"
+ android:drawable="@drawable/btn_circle_selected" />
+ <item android:state_enabled="true"
+ android:drawable="@drawable/btn_circle_normal" />
+ <item android:state_focused="true"
+ android:drawable="@drawable/btn_circle_disable_focused" />
+ <item
+ android:drawable="@drawable/btn_circle_disable" />
+</selector>
diff --git a/res/drawable-finger/btn_circle_disable.png b/res/drawable-finger/btn_circle_disable.png
new file mode 100644
index 0000000..33b74a6
--- /dev/null
+++ b/res/drawable-finger/btn_circle_disable.png
Binary files differ
diff --git a/res/drawable-finger/btn_circle_disable_focused.png b/res/drawable-finger/btn_circle_disable_focused.png
new file mode 100644
index 0000000..005ad8d
--- /dev/null
+++ b/res/drawable-finger/btn_circle_disable_focused.png
Binary files differ
diff --git a/res/drawable-finger/btn_circle_longpress.png b/res/drawable-finger/btn_circle_longpress.png
new file mode 100644
index 0000000..f27d411
--- /dev/null
+++ b/res/drawable-finger/btn_circle_longpress.png
Binary files differ
diff --git a/res/drawable-finger/btn_circle_normal.png b/res/drawable-finger/btn_circle_normal.png
new file mode 100644
index 0000000..fc5af1c
--- /dev/null
+++ b/res/drawable-finger/btn_circle_normal.png
Binary files differ
diff --git a/res/drawable-finger/btn_circle_pressed.png b/res/drawable-finger/btn_circle_pressed.png
new file mode 100644
index 0000000..8f40afd
--- /dev/null
+++ b/res/drawable-finger/btn_circle_pressed.png
Binary files differ
diff --git a/res/drawable-finger/btn_circle_selected.png b/res/drawable-finger/btn_circle_selected.png
new file mode 100644
index 0000000..c74fac2
--- /dev/null
+++ b/res/drawable-finger/btn_circle_selected.png
Binary files differ
diff --git a/res/drawable-finger/btn_contact_picture.xml b/res/drawable-finger/btn_contact_picture.xml
new file mode 100644
index 0000000..643231a
--- /dev/null
+++ b/res/drawable-finger/btn_contact_picture.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_window_focused="false"
+ android:drawable="@drawable/contact_picture_border_normal" />
+ <item android:state_pressed="true"
+ android:drawable="@drawable/contact_picture_border_pressed" />
+ <item android:state_focused="true"
+ android:drawable="@drawable/contact_picture_border_highlight" />
+ <item
+ android:drawable="@drawable/contact_picture_border_normal" />
+</selector>
diff --git a/res/drawable-finger/contact_picture_border_highlight.9.png b/res/drawable-finger/contact_picture_border_highlight.9.png
new file mode 100644
index 0000000..fc4e01d
--- /dev/null
+++ b/res/drawable-finger/contact_picture_border_highlight.9.png
Binary files differ
diff --git a/res/drawable-finger/contact_picture_border_longpress.9.png b/res/drawable-finger/contact_picture_border_longpress.9.png
new file mode 100644
index 0000000..c89a55a
--- /dev/null
+++ b/res/drawable-finger/contact_picture_border_longpress.9.png
Binary files differ
diff --git a/res/drawable-finger/contact_picture_border_normal.9.png b/res/drawable-finger/contact_picture_border_normal.9.png
new file mode 100644
index 0000000..37451ae
--- /dev/null
+++ b/res/drawable-finger/contact_picture_border_normal.9.png
Binary files differ
diff --git a/res/drawable-finger/contact_picture_border_pressed.9.png b/res/drawable-finger/contact_picture_border_pressed.9.png
new file mode 100644
index 0000000..11eaae5
--- /dev/null
+++ b/res/drawable-finger/contact_picture_border_pressed.9.png
Binary files differ
diff --git a/res/drawable-finger/dark_header.9.png b/res/drawable-finger/dark_header.9.png
deleted file mode 100644
index 5b1d71f..0000000
--- a/res/drawable-finger/dark_header.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-finger/ic_btn_round_minus.png b/res/drawable-finger/ic_btn_round_minus.png
new file mode 100644
index 0000000..96dbb17
--- /dev/null
+++ b/res/drawable-finger/ic_btn_round_minus.png
Binary files differ
diff --git a/res/drawable-finger/ic_btn_round_more.png b/res/drawable-finger/ic_btn_round_more.png
new file mode 100644
index 0000000..ebdc55c
--- /dev/null
+++ b/res/drawable-finger/ic_btn_round_more.png
Binary files differ
diff --git a/res/drawable-finger/ic_btn_round_plus.png b/res/drawable-finger/ic_btn_round_plus.png
new file mode 100644
index 0000000..1ec8a95
--- /dev/null
+++ b/res/drawable-finger/ic_btn_round_plus.png
Binary files differ
diff --git a/res/drawable-finger/ic_default_number.png b/res/drawable-finger/ic_default_number.png
index a04e327..a27685e 100644
--- a/res/drawable-finger/ic_default_number.png
+++ b/res/drawable-finger/ic_default_number.png
Binary files differ
diff --git a/res/drawable-finger/sym_action_add.png b/res/drawable-finger/sym_action_add.png
new file mode 100644
index 0000000..af637b3
--- /dev/null
+++ b/res/drawable-finger/sym_action_add.png
Binary files differ
diff --git a/res/drawable-finger/sym_action_call.png b/res/drawable-finger/sym_action_call.png
deleted file mode 100644
index 058ec4b..0000000
--- a/res/drawable-finger/sym_action_call.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-finger/sym_action_chat.png b/res/drawable-finger/sym_action_chat.png
deleted file mode 100644
index 88bfa0d..0000000
--- a/res/drawable-finger/sym_action_chat.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-finger/sym_action_edit.png b/res/drawable-finger/sym_action_edit.png
new file mode 100644
index 0000000..bacf850
--- /dev/null
+++ b/res/drawable-finger/sym_action_edit.png
Binary files differ
diff --git a/res/drawable-finger/sym_action_email.png b/res/drawable-finger/sym_action_email.png
deleted file mode 100644
index 9110bc6..0000000
--- a/res/drawable-finger/sym_action_email.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-finger/sym_action_map.png b/res/drawable-finger/sym_action_map.png
index ab7a70c..12719cc 100644
--- a/res/drawable-finger/sym_action_map.png
+++ b/res/drawable-finger/sym_action_map.png
Binary files differ
diff --git a/res/drawable-finger/sym_action_organization.png b/res/drawable-finger/sym_action_organization.png
new file mode 100644
index 0000000..994d3f5
--- /dev/null
+++ b/res/drawable-finger/sym_action_organization.png
Binary files differ
diff --git a/res/drawable-finger/sym_action_remove.png b/res/drawable-finger/sym_action_remove.png
new file mode 100644
index 0000000..f5ca2f9
--- /dev/null
+++ b/res/drawable-finger/sym_action_remove.png
Binary files differ
diff --git a/res/drawable-finger/sym_action_search.png b/res/drawable-finger/sym_action_search.png
new file mode 100644
index 0000000..dab3ed6
--- /dev/null
+++ b/res/drawable-finger/sym_action_search.png
Binary files differ
diff --git a/res/drawable-finger/sym_action_sms.png b/res/drawable-finger/sym_action_sms.png
index df9603f..e0ce4bb 100644
--- a/res/drawable-finger/sym_action_sms.png
+++ b/res/drawable-finger/sym_action_sms.png
Binary files differ
diff --git a/res/drawable-finger/sym_action_view_contact.png b/res/drawable-finger/sym_action_view_contact.png
new file mode 100644
index 0000000..118d8b3
--- /dev/null
+++ b/res/drawable-finger/sym_action_view_contact.png
Binary files differ
diff --git a/res/drawable-finger/sym_note.png b/res/drawable-finger/sym_note.png
new file mode 100644
index 0000000..e4dbdf5
--- /dev/null
+++ b/res/drawable-finger/sym_note.png
Binary files differ
diff --git a/res/drawable-finger/sym_ringtone.png b/res/drawable-finger/sym_ringtone.png
new file mode 100644
index 0000000..cb2a65b
--- /dev/null
+++ b/res/drawable-finger/sym_ringtone.png
Binary files differ
diff --git a/res/drawable-finger/sym_send_to_voicemail.png b/res/drawable-finger/sym_send_to_voicemail.png
new file mode 100644
index 0000000..8743115
--- /dev/null
+++ b/res/drawable-finger/sym_send_to_voicemail.png
Binary files differ
diff --git a/res/drawable-finger/title_bar_shadow.9.png b/res/drawable-finger/title_bar_shadow.9.png
new file mode 100644
index 0000000..0872366
--- /dev/null
+++ b/res/drawable-finger/title_bar_shadow.9.png
Binary files differ
diff --git a/res/layout-finger/call_detail.xml b/res/layout-finger/call_detail.xml
index c9fc500..69bfa9e 100644
--- a/res/layout-finger/call_detail.xml
+++ b/res/layout-finger/call_detail.xml
@@ -14,9 +14,76 @@
limitations under the License.
-->
-<ListView xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@android:id/list"
- android:layout_width="fill_parent"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
android:layout_height="fill_parent"
- android:scrollbarStyle="outsideOverlay"
-/>
\ No newline at end of file
+ android:orientation="vertical"
+>
+
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:background="@android:drawable/title_bar_tall"
+ android:orientation="horizontal"
+ android:gravity="center_vertical"
+ android:paddingLeft="9dip"
+ android:paddingRight="5dip"
+ >
+
+ <ImageView android:id="@+id/icon"
+ android:layout_width="32dip"
+ android:layout_height="32dip"
+ android:layout_marginRight="5dip"
+ />
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="center_vertical"
+ android:orientation="vertical"
+ android:layout_marginLeft="5dip"
+ >
+
+ <TextView android:id="@+id/type"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ />
+
+ <TextView android:id="@+id/time"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textColor="?android:attr/textColorPrimaryInverse"
+ />
+
+ <TextView android:id="@+id/duration"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textColor="?android:attr/textColorPrimaryInverse"
+ />
+
+ </LinearLayout>
+
+ </LinearLayout>
+
+ <FrameLayout
+ android:layout_height="0dip"
+ android:layout_width="fill_parent"
+ android:layout_weight="1"
+ >
+ <ListView android:id="@android:id/list"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:scrollbarStyle="outsideOverlay"
+ />
+
+ <View
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:background="@drawable/title_bar_shadow"
+ />
+
+ </FrameLayout>
+</LinearLayout>
diff --git a/res/layout-finger/call_detail_item.xml b/res/layout-finger/call_detail_item.xml
deleted file mode 100644
index 7970735..0000000
--- a/res/layout-finger/call_detail_item.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 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.
--->
-
-<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:stretchColumns="1"
- android:shrinkColumns="0,1,2"
- android:paddingLeft="12dip"
- android:paddingRight="12dip"
->
-
- <TableRow
- android:paddingTop="12dip"
- android:paddingBottom="12dip"
- android:gravity="center_vertical"
- >
-
- <TextView
- android:text="@string/call_type"
- android:layout_width="80dip"
- android:layout_marginRight="12dip"
- android:textAppearance="?android:attr/textAppearanceSmall"
- />
-
- <TextView android:id="@+id/call_type"
- android:textAppearance="?android:attr/textAppearanceMedium"
- />
-
- <ImageView android:id="@+id/call_type_icon" />
-
- </TableRow>
-
- <TableRow
- android:paddingBottom="12dip"
- android:gravity="center_vertical"
- >
-
- <TextView
- android:text="@string/call_time"
- android:layout_marginRight="12dip"
- android:textAppearance="?android:attr/textAppearanceSmall"
- />
-
- <TextView android:id="@+id/call_time"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_span="2"
- />
-
- </TableRow>
-
- <TableRow android:id="@+id/call_duration_row"
- android:paddingBottom="12dip"
- android:gravity="center_vertical"
- >
-
- <TextView
- android:text="@string/call_duration"
- android:layout_marginRight="12dip"
- android:textAppearance="?android:attr/textAppearanceSmall"
- />
-
- <TextView android:id="@+id/call_duration"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_span="2"
- />
-
- </TableRow>
-
-</TableLayout>
diff --git a/res/layout-finger/call_detail_list_item.xml b/res/layout-finger/call_detail_list_item.xml
new file mode 100644
index 0000000..6c61690
--- /dev/null
+++ b/res/layout-finger/call_detail_list_item.xml
@@ -0,0 +1,78 @@
+<?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.
+ */
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:orientation="horizontal"
+ android:paddingLeft="9dip"
+ android:paddingRight="5dip"
+ android:gravity="center_vertical"
+>
+
+ <ImageView android:id="@+id/icon"
+ android:layout_width="32dip"
+ android:layout_height="32dip"
+ android:layout_marginRight="5dip"
+ android:gravity="center"
+ android:scaleType="centerInside"
+ />
+
+ <LinearLayout
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:layout_marginLeft="5dip"
+ android:paddingTop="5dip"
+ android:paddingBottom="7dip"
+ android:orientation="vertical"
+ android:gravity="center_vertical"
+ >
+
+ <TextView android:id="@android:id/text1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ />
+
+
+ <LinearLayout android:id="@+id/line2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ >
+ <TextView android:id="@+id/label"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginRight="5dip"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textStyle="bold"
+ />
+
+ <TextView android:id="@+id/number"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ />
+ </LinearLayout>
+
+ </LinearLayout>
+
+</LinearLayout>
diff --git a/res/layout-finger/contacts_list_item.xml b/res/layout-finger/contacts_list_item.xml
index 3d3b58c..e695f90 100644
--- a/res/layout-finger/contacts_list_item.xml
+++ b/res/layout-finger/contacts_list_item.xml
@@ -1,52 +1,82 @@
<?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.
+<!--
+/*
+ * 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.
+ */
-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:minHeight="?android:attr/listPreferredItemHeight"
- android:paddingLeft="5dip"
- android:orientation="vertical"
+ android:layout_height="?android:attr/listPreferredItemHeight"
+ android:paddingLeft="14dip"
+ android:paddingRight="5dip"
>
- <TextView android:id="@+id/name"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="6dip"
- android:singleLine="true"
- android:textAppearance="?android:attr/textAppearanceLarge"
- android:layout_alignParentTop="true"
+
+ <ImageView android:id="@+id/presence"
+ android:layout_width="32dip"
+ android:layout_height="32dip"
+ android:layout_alignParentRight="true"
+ android:layout_marginLeft="5dip"
+ android:layout_centerVertical="true"
+
+ android:gravity="center"
+ android:scaleType="centerInside"
/>
<TextView android:id="@+id/label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="2dip"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentBottom="true"
+ android:layout_marginBottom="8dip"
+ android:layout_marginTop="-8dip"
+
android:singleLine="true"
+ android:ellipsize="marquee"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textStyle="bold"
- android:layout_below="@id/name"
/>
<TextView android:id="@+id/number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
- android:singleLine="true"
- android:textAppearance="?android:attr/textAppearanceSmall"
android:layout_toRightOf="@id/label"
android:layout_alignBaseline="@id/label"
+ android:layout_toLeftOf="@id/presence"
+ android:layout_alignWithParentIfMissing="true"
+
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:textAppearance="?android:attr/textAppearanceSmall"
/>
+
+ <TextView android:id="@+id/name"
+ android:layout_width="0dip"
+ android:layout_height="0dip"
+ android:layout_above="@id/label"
+ android:layout_alignWithParentIfMissing="true"
+ android:layout_alignParentTop="true"
+ android:layout_alignParentLeft="true"
+ android:layout_toLeftOf="@id/presence"
+ android:layout_marginBottom="1dip"
+
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:gravity="center_vertical|left"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ />
+
</RelativeLayout>
diff --git a/res/layout-finger/contacts_list_item_photo.xml b/res/layout-finger/contacts_list_item_photo.xml
new file mode 100644
index 0000000..d2821e1
--- /dev/null
+++ b/res/layout-finger/contacts_list_item_photo.xml
@@ -0,0 +1,92 @@
+<?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.
+ */
+-->
+
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="?android:attr/listPreferredItemHeight"
+ android:paddingLeft="0dip"
+ android:paddingRight="5dip"
+>
+
+ <ImageView android:id="@+id/presence"
+ android:layout_width="32dip"
+ android:layout_height="32dip"
+ android:layout_alignParentRight="true"
+ android:layout_marginLeft="5dip"
+ android:layout_centerVertical="true"
+
+ android:gravity="center"
+ android:scaleType="centerInside"
+ />
+
+ <ImageView android:id="@+id/photo"
+ android:layout_width="64dip"
+ android:layout_height="64dip"
+ android:layout_alignParentLeft="true"
+ android:layout_marginRight="9dip"
+
+ android:gravity="center"
+ android:scaleType="fitCenter"
+ />
+
+ <TextView android:id="@+id/label"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_toRightOf="@id/photo"
+ android:layout_alignParentBottom="true"
+ android:layout_marginBottom="8dip"
+ android:layout_marginTop="-8dip"
+
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textStyle="bold"
+ />
+
+ <TextView android:id="@+id/number"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="5dip"
+ android:layout_toRightOf="@id/label"
+ android:layout_alignBaseline="@id/label"
+ android:layout_toLeftOf="@id/presence"
+ android:layout_alignWithParentIfMissing="true"
+
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ />
+
+ <TextView android:id="@+id/name"
+ android:layout_width="0dip"
+ android:layout_height="0dip"
+ android:layout_above="@id/label"
+ android:layout_alignWithParentIfMissing="true"
+ android:layout_alignParentTop="true"
+ android:layout_toRightOf="@id/photo"
+ android:layout_toLeftOf="@id/presence"
+ android:layout_marginBottom="1dip"
+
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:gravity="center_vertical|left"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ />
+
+</RelativeLayout>
diff --git a/res/layout-finger/edit_contact.xml b/res/layout-finger/edit_contact.xml
index 027af9a..a3a1849 100644
--- a/res/layout-finger/edit_contact.xml
+++ b/res/layout-finger/edit_contact.xml
@@ -18,7 +18,6 @@
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
- android:scrollbarStyle="insideInset"
android:fillViewport="true">
<LinearLayout
@@ -29,34 +28,29 @@
<LinearLayout android:id="@+id/banner"
android:layout_width="fill_parent"
- android:layout_height="?android:attr/listPreferredItemHeight"
+ android:layout_height="wrap_content"
android:orientation="horizontal"
- android:background="@android:drawable/bottom_bar"
android:padding="0dip"
android:gravity="center_vertical"
android:baselineAligned="false"
>
<FrameLayout
- android:layout_width="58dip"
- android:layout_height="58dip"
+ android:layout_width="76dip"
+ android:layout_height="76dip"
+ android:layout_marginTop="4dip"
android:layout_marginLeft="6dip"
- android:layout_marginRight="10dip"
+ android:layout_marginBottom="6dip"
+ android:layout_marginRight="2dip"
>
- <ImageButton android:id="@+id/photoButton"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:src="@drawable/ic_menu_add_picture"
- android:gravity="center"
- />
-
<ImageView android:id="@+id/photoImage"
- style="?android:attr/imageWellStyle"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:focusable="true"
- android:background="@drawable/border"
+ android:src="@drawable/ic_menu_add_picture"
+ android:scaleType="center"
+ android:background="@drawable/btn_contact_picture"
/>
</FrameLayout>
@@ -64,7 +58,7 @@
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="wrap_content"
- android:layout_marginRight="4dip"
+ android:layout_marginRight="?android:attr/scrollbarSize"
android:gravity="center_vertical"
android:inputType="textPersonName|textCapWords"
android:hint="@string/ghostData_name"
@@ -80,18 +74,12 @@
<!-- "Phonetic name" entry widget, visible only in certain locales -->
<include layout="@layout/edit_phonetic_name"/>
- <View
- android:layout_width="fill_parent"
- android:layout_height="1dip"
- android:background="?android:attr/listDivider"
- />
-
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:orientation="vertical"
- >
+ >
<!-- The edit items -->
<LinearLayout android:id="@+id/list"
@@ -100,76 +88,30 @@
android:orientation="vertical"
/>
- <!-- Send to voicemail checkbox -->
- <RelativeLayout
- android:layout_width="fill_parent"
- android:layout_height="?android:attr/listPreferredItemHeight"
- >
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerVertical="true"
- android:layout_alignParentLeft="true"
- android:layout_marginLeft="4dip"
- android:text="@string/send_to_voicemail_checkbox"
- android:textAppearance="?android:attr/textAppearanceMedium"
- />
-
- <CheckBox android:id="@+id/send_to_voicemail"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerVertical="true"
- android:layout_alignParentRight="true"
- android:nextFocusDown="@+id/saveButton"
- />
-
- </RelativeLayout>
-
- <View
- android:layout_width="fill_parent"
- android:layout_height="1dip"
- android:background="?android:attr/listDivider"
- />
-
- <!-- The add more button -->
- <Button android:id="@+id/addMore"
- android:layout_width="fill_parent"
- android:layout_height="?android:attr/listPreferredItemHeight"
- android:layout_marginTop="3dip"
- android:textAppearance="?android:attr/textAppearanceLarge"
- android:text="@string/menu_addItem"
- android:gravity="left|center_vertical"
- android:drawableLeft="@android:drawable/ic_input_add"
- />
-
</LinearLayout>
- <RelativeLayout
+ <LinearLayout
android:layout_width="fill_parent"
- android:layout_height="?android:attr/listPreferredItemHeight"
- android:layout_marginTop="1dip"
- android:background="@android:drawable/bottom_bar"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ style="@android:style/ButtonBar"
>
+
<Button android:id="@+id/saveButton"
- android:layout_width="wrap_content"
+ android:layout_width="0dip"
android:layout_height="wrap_content"
- android:layout_centerVertical="true"
- android:layout_alignParentLeft="true"
- android:text="@string/button_save"
- android:minWidth="120dip"
- android:minHeight="48dip"
+ android:layout_weight="1"
+ android:text="@string/menu_done"
/>
<Button android:id="@+id/discardButton"
- android:layout_width="wrap_content"
+ android:layout_width="0dip"
android:layout_height="wrap_content"
- android:layout_centerVertical="true"
- android:layout_alignParentRight="true"
- android:text="@string/button_discard"
- android:minWidth="120dip"
- android:minHeight="48dip"
+ android:layout_weight="1"
+ android:text="@string/menu_doNotSave"
/>
- </RelativeLayout>
+
+ </LinearLayout>
+
</LinearLayout>
</ScrollView>
diff --git a/res/layout-finger/edit_contact_entry.xml b/res/layout-finger/edit_contact_entry.xml
index eb01782..d17fdf7 100644
--- a/res/layout-finger/edit_contact_entry.xml
+++ b/res/layout-finger/edit_contact_entry.xml
@@ -17,40 +17,35 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:orientation="vertical"
->
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:minHeight="?android:attr/listPreferredItemHeight"
- android:orientation="horizontal"
- android:baselineAligned="false"
- android:gravity="center_vertical"
+ android:layout_marginLeft="4dip"
+ android:layout_marginBottom="3dip"
+ android:orientation="horizontal"
+ android:baselineAligned="false"
+ android:gravity="top"
+ android:paddingRight="?android:attr/scrollbarSize"
>
- <Button android:id="@+id/label"
- android:layout_width="100dip"
- android:layout_height="wrap_content"
- android:gravity="left|center_vertical"
+ <Button android:id="@+id/label"
+ android:layout_width="80dip"
+ android:layout_height="wrap_content"
+ android:gravity="left|center_vertical"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:fadingEdge="horizontal"
/>
- <EditText android:id="@+id/data"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:layout_height="wrap_content"
- android:layout_marginLeft="8dip"
+ <EditText android:id="@+id/data"
+ android:layout_width="0dip"
+ android:layout_weight="1"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="2dip"
+ android:layout_marginRight="2dip"
/>
- <ImageButton android:id="@+id/delete"
- android:src="@android:drawable/ic_delete"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ <ImageButton android:id="@+id/delete"
+ style="@style/MinusButton"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
/>
- </LinearLayout>
- <View
- android:layout_width="fill_parent"
- android:layout_height="1dip"
- android:background="@android:drawable/divider_horizontal_dark"
- />
</LinearLayout>
diff --git a/res/layout-finger/edit_contact_entry_org.xml b/res/layout-finger/edit_contact_entry_org.xml
index f29696b..9daf3d1 100644
--- a/res/layout-finger/edit_contact_entry_org.xml
+++ b/res/layout-finger/edit_contact_entry_org.xml
@@ -17,76 +17,45 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:orientation="vertical"
->
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:baselineAligned="false"
- android:gravity="center_vertical"
+ android:orientation="horizontal"
+ android:baselineAligned="false"
+ android:gravity="top"
+ android:paddingRight="?android:attr/scrollbarSize"
>
- <Button android:id="@+id/label"
- android:layout_width="100dip"
- android:layout_height="wrap_content"
- android:gravity="left|center_vertical"
+ <Button android:id="@+id/label"
+ android:layout_width="100dip"
+ android:layout_height="wrap_content"
+ android:gravity="left|center_vertical"
/>
- <LinearLayout
+ <LinearLayout
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:orientation="vertical"
+ android:baselineAligned="false"
+ android:gravity="center_vertical"
+ >
+
+ <EditText android:id="@+id/data"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:orientation="vertical"
- >
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:baselineAligned="false"
- android:gravity="center_vertical"
- >
+ android:layout_marginLeft="4dip"
+ />
- <EditText android:id="@+id/data"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:layout_height="wrap_content"
- android:layout_marginLeft="8dip"
- />
+ <EditText android:id="@+id/data2"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="4dip"
+ />
- <ImageButton android:id="@+id/delete"
- android:src="@android:drawable/ic_delete"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- />
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:baselineAligned="false"
- android:gravity="center_vertical"
- >
-
- <EditText android:id="@+id/data2"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:layout_height="wrap_content"
- android:layout_marginLeft="8dip"
- />
-
- <ImageButton android:id="@+id/delete2"
- android:src="@android:drawable/ic_delete"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- />
- </LinearLayout>
- </LinearLayout>
</LinearLayout>
- <View
- android:layout_width="fill_parent"
- android:layout_height="1dip"
- android:background="@android:drawable/divider_horizontal_dark"
- />
+ <ImageButton android:id="@+id/delete"
+ style="@style/MinusButton"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ />
+
</LinearLayout>
diff --git a/res/layout-finger/edit_contact_entry_ringtone.xml b/res/layout-finger/edit_contact_entry_ringtone.xml
index e566e31..f2a171f 100644
--- a/res/layout-finger/edit_contact_entry_ringtone.xml
+++ b/res/layout-finger/edit_contact_entry_ringtone.xml
@@ -15,45 +15,54 @@
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/entry_ringtone"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:layout_marginTop="3dip"
- android:orientation="vertical"
->
-
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="?android:attr/listPreferredItemHeight"
- android:layout_marginTop="2dip"
- android:orientation="horizontal"
- android:baselineAligned="false"
- android:gravity="center_vertical"
+ android:paddingRight="?android:attr/scrollbarSize"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:background="@android:drawable/list_selector_background"
+ android:orientation="horizontal"
+ android:gravity="center_vertical"
+ android:focusable="true"
+ android:clickable="true"
>
+ <RelativeLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="14dip"
+ android:layout_marginTop="6dip"
+ android:layout_marginBottom="6dip"
+ android:layout_weight="1"
+ android:duplicateParentState="true"
+ >
+
<TextView android:id="@+id/label"
- android:layout_width="102dip"
- android:layout_height="fill_parent"
- android:paddingLeft="4dip"
- android:gravity="left|center_vertical"
- android:textAppearance="?android:attr/textAppearanceMedium"
- />
-
- <Button android:id="@+id/data"
- android:layout_width="0dip"
- android:layout_weight="1"
+ android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceLargeInverse"
- android:baselineAligned="false"
- android:background="@android:drawable/btn_dropdown"
- android:gravity="center_vertical"
- android:maxLines="1"
- />
-
- </LinearLayout>
+ android:singleLine="true"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:ellipsize="marquee"
+ android:fadingEdge="horizontal"
+ android:duplicateParentState="true"
+ />
- <View
- android:layout_width="fill_parent"
- android:layout_height="1dip"
- android:background="@android:drawable/divider_horizontal_dark"
- />
+ <TextView android:id="@+id/data"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@+id/label"
+ android:layout_alignLeft="@+id/label"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:maxLines="2"
+ android:duplicateParentState="true"
+ />
+
+ </RelativeLayout>
+
+ <ImageView
+ style="@style/MoreButton"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ />
+
</LinearLayout>
diff --git a/res/layout-finger/edit_contact_entry_static_label.xml b/res/layout-finger/edit_contact_entry_static_label.xml
index 830872a..5e40631 100644
--- a/res/layout-finger/edit_contact_entry_static_label.xml
+++ b/res/layout-finger/edit_contact_entry_static_label.xml
@@ -17,43 +17,38 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:orientation="vertical"
->
-
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:minHeight="?android:attr/listPreferredItemHeight"
- android:orientation="horizontal"
- android:baselineAligned="false"
- android:gravity="center_vertical"
+ android:layout_marginLeft="4dip"
+ android:layout_marginBottom="3dip"
+ android:orientation="horizontal"
+ android:baselineAligned="false"
+ android:gravity="top"
+ android:paddingRight="?android:attr/scrollbarSize"
>
- <TextView android:id="@+id/label"
- android:layout_width="102dip"
- android:layout_height="fill_parent"
- android:paddingLeft="4dip"
- android:gravity="left|center_vertical"
- android:textAppearance="?android:attr/textAppearanceMedium"
+ <!-- Hide this TextView because this layout is only used for Note entries -->
+ <TextView android:id="@+id/label"
+ android:layout_width="80dip"
+ android:layout_height="wrap_content"
+ android:gravity="left|center_vertical"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:fadingEdge="horizontal"
+ android:visibility="gone"
/>
- <EditText android:id="@+id/data"
- android:layout_width="0dip"
- android:layout_weight="1"
- android:layout_height="wrap_content"
- android:layout_marginLeft="8dip"
+ <EditText android:id="@+id/data"
+ android:layout_width="0dip"
+ android:layout_weight="1"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="2dip"
+ android:layout_marginRight="2dip"
+ android:gravity="top"
/>
- <ImageButton android:id="@+id/delete"
- android:src="@android:drawable/ic_delete"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ <ImageButton android:id="@+id/delete"
+ style="@style/MinusButton"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
/>
- </LinearLayout>
- <View
- android:layout_width="fill_parent"
- android:layout_height="1dip"
- android:background="@android:drawable/divider_horizontal_dark"
- />
</LinearLayout>
diff --git a/res/layout-finger/edit_contact_entry_voicemail.xml b/res/layout-finger/edit_contact_entry_voicemail.xml
new file mode 100644
index 0000000..7b66500
--- /dev/null
+++ b/res/layout-finger/edit_contact_entry_voicemail.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/checkable"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:paddingRight="?android:attr/scrollbarSize"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:background="@android:drawable/list_selector_background"
+ android:orientation="horizontal"
+ android:gravity="center_vertical"
+ android:focusable="true"
+ android:clickable="true"
+ >
+
+ <RelativeLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="14dip"
+ android:layout_marginTop="6dip"
+ android:layout_marginBottom="6dip"
+ android:layout_weight="1"
+ android:duplicateParentState="true"
+ >
+
+ <TextView android:id="@+id/label"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:ellipsize="marquee"
+ android:fadingEdge="horizontal"
+ android:duplicateParentState="true"
+ />
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@+id/label"
+ android:layout_alignLeft="@+id/label"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:text="@string/send_to_voicemail_checkbox"
+ android:maxLines="2"
+ android:duplicateParentState="true"
+ />
+
+ </RelativeLayout>
+
+ <CheckBox android:id="@+id/checkbox"
+ android:layout_width="wrap_content"
+ android:layout_height="fill_parent"
+ android:focusable="false"
+ android:clickable="false"
+ />
+
+ <!-- Need to provide a data view to make binder happy -->
+ <TextView android:id="@+id/data"
+ android:layout_width="0dip"
+ android:layout_height="0dip"
+ android:visibility="gone"
+ />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/res/drawable-finger/dark_header_dithered.xml b/res/layout-finger/edit_divider.xml
similarity index 75%
rename from res/drawable-finger/dark_header_dithered.xml
rename to res/layout-finger/edit_divider.xml
index 36994a7..1dbb563 100644
--- a/res/drawable-finger/dark_header_dithered.xml
+++ b/res/layout-finger/edit_divider.xml
@@ -4,9 +4,9 @@
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.
@@ -14,7 +14,8 @@
limitations under the License.
-->
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/dark_header"
- android:dither="true"
-/>
+<View xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:background="?android:attr/listDivider"
+ />
diff --git a/res/layout-finger/edit_separator.xml b/res/layout-finger/edit_separator.xml
index 57bb53a..1fe799d 100644
--- a/res/layout-finger/edit_separator.xml
+++ b/res/layout-finger/edit_separator.xml
@@ -19,25 +19,42 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
+ android:layout_marginBottom="3dip"
android:orientation="vertical"
->
+ >
- <TextView android:id="@+id/text"
+ <LinearLayout
+ android:id="@+id/separator"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:gravity="center_vertical"
- android:background="@drawable/dark_header_dithered"
- android:textColor="?android:attr/textColorSecondary"
- android:textStyle="bold"
- android:textSize="14sp"
- android:paddingLeft="8dip"
- />
+ android:layout_marginLeft="14dip"
+ android:layout_marginTop="3dip"
+ android:layout_marginBottom="1dip"
+ android:layout_marginRight="?android:attr/scrollbarSize"
+ android:orientation="horizontal"
+ android:gravity="bottom"
+ android:focusable="true"
+ android:clickable="true"
+ >
- <View
- android:layout_width="fill_parent"
- android:layout_height="1dip"
- android:background="?android:attr/listDivider"
- />
+ <TextView android:id="@+id/text"
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:layout_marginBottom="8dip"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:fadingEdge="horizontal"
+ />
+
+ <ImageView android:id="@+id/add"
+ style="@style/PlusButton"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:duplicateParentState="true"
+ />
+
+ </LinearLayout>
</LinearLayout>
-
diff --git a/res/layout-finger/edit_separator_alone.xml b/res/layout-finger/edit_separator_alone.xml
new file mode 100644
index 0000000..7d4aa88
--- /dev/null
+++ b/res/layout-finger/edit_separator_alone.xml
@@ -0,0 +1,51 @@
+<?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.
+-->
+
+<!-- Layout used for edit separators. -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/separator"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:paddingLeft="14dip"
+ android:paddingRight="?android:attr/scrollbarSize"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:background="@android:drawable/list_selector_background"
+ android:orientation="horizontal"
+ android:gravity="center_vertical"
+ android:focusable="true"
+ android:clickable="true"
+ >
+
+ <TextView android:id="@+id/text"
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:duplicateParentState="true"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:fadingEdge="horizontal"
+ />
+
+ <ImageView android:id="@+id/add"
+ style="@style/PlusButton"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="center_vertical"
+ />
+
+</LinearLayout>
diff --git a/res/layout-finger/list_item_text_icons.xml b/res/layout-finger/list_item_text_icons.xml
new file mode 100644
index 0000000..7f6ad1c
--- /dev/null
+++ b/res/layout-finger/list_item_text_icons.xml
@@ -0,0 +1,71 @@
+<?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.
+ */
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:orientation="horizontal"
+ android:paddingLeft="9dip"
+ android:paddingRight="5dip"
+ android:gravity="center_vertical"
+>
+
+ <ImageView android:id="@+id/icon1"
+ android:layout_width="32dip"
+ android:layout_height="32dip"
+ android:layout_marginRight="5dip"
+ android:gravity="center"
+ android:scaleType="centerInside"
+ />
+
+ <LinearLayout
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:layout_marginLeft="5dip"
+ android:paddingTop="5dip"
+ android:paddingBottom="7dip"
+ android:orientation="vertical"
+ android:gravity="center_vertical"
+ >
+
+ <TextView android:id="@android:id/text1"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ />
+
+ <TextView android:id="@android:id/text2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ />
+
+ </LinearLayout>
+
+ <ImageView android:id="@+id/icon2"
+ android:layout_width="32dip"
+ android:layout_height="32dip"
+ android:layout_marginLeft="5dip"
+ android:gravity="center"
+ android:scaleType="centerInside"
+ />
+
+</LinearLayout>
diff --git a/res/layout-finger/list_separator.xml b/res/layout-finger/list_separator.xml
index e6f75ab..5d93d36 100644
--- a/res/layout-finger/list_separator.xml
+++ b/res/layout-finger/list_separator.xml
@@ -19,7 +19,7 @@
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
- android:background="@drawable/dark_header_dithered"
+ android:background="@android:drawable/dark_header"
android:textColor="?android:attr/textColorSecondary"
android:textStyle="bold"
android:textSize="14sp"
diff --git a/res/layout-finger/view_contact.xml b/res/layout-finger/view_contact.xml
index e02e143..4a0f252 100644
--- a/res/layout-finger/view_contact.xml
+++ b/res/layout-finger/view_contact.xml
@@ -24,18 +24,19 @@
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
- android:background="@android:drawable/title_bar"
- android:padding="0dip"
+ android:background="@android:drawable/title_bar_tall"
+ android:paddingRight="5dip"
android:gravity="center_vertical"
>
<ImageView android:id="@+id/photo"
style="?android:attr/imageWellStyle"
- android:layout_width="84dip"
- android:layout_height="84dip"
- android:layout_marginRight="10dip"
+ android:layout_width="78dip"
+ android:layout_height="78dip"
+ android:layout_marginRight="7dip"
+ android:layout_marginLeft="2dip"
android:scaleType="fitCenter"
- android:background="@drawable/border"
+ android:background="@drawable/btn_contact_picture"
/>
<!-- "Name" field is locale-specific. -->
@@ -49,11 +50,22 @@
</LinearLayout>
- <ListView android:id="@android:id/list"
+ <FrameLayout
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
- android:layout_marginTop="1dip"
- android:scrollbarStyle="outsideOverlay"
- />
+ >
+
+ <View
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:background="@drawable/title_bar_shadow"
+ />
+
+ <ListView android:id="@android:id/list"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:scrollbarStyle="outsideOverlay"
+ />
+ </FrameLayout>
</LinearLayout>
diff --git a/res/layout-finger/view_contact_name.xml b/res/layout-finger/view_contact_name.xml
index 01a361b..126c69b 100644
--- a/res/layout-finger/view_contact_name.xml
+++ b/res/layout-finger/view_contact_name.xml
@@ -23,4 +23,6 @@
android:textAppearance="?android:attr/textAppearanceLarge"
android:shadowColor="#BB000000"
android:shadowRadius="2.75"
+ android:maxLines="2"
+ android:ellipsize="end"
/>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index d299e7f..e82b09b 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -16,6 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="contactsList">"Kontakty"</string>
+ <!-- no translation found for launcherDialer (140610573639849799) -->
+ <skip />
<string name="shortcutContact">"Kontakt"</string>
<string name="starredList">"Označené hvězdičkou"</string>
<string name="frequentList">"Časté"</string>
@@ -28,7 +30,7 @@
<string name="menu_newContact">"Nový kontakt"</string>
<string name="menu_viewContact">"Zobrazit kontakt"</string>
<string name="menu_callNumber">"Volat kontakt <xliff:g id="NAME">%s</xliff:g>"</string>
- <string name="menu_addStar">"Přidat k oblíbeným položkám"</string>
+ <string name="menu_addStar">"Přidat do oblíbených"</string>
<string name="menu_removeStar">"Odebrat z oblíbených položek"</string>
<string name="menu_showBarcode">"Zobrazit čárový kód"</string>
<string name="menu_editContact">"Upravit kontakt"</string>
@@ -40,20 +42,17 @@
<string name="menu_makeDefaultNumber">"Nastavit jako výchozí číslo"</string>
<string name="deleteConfirmation_title">"Smazat"</string>
<string name="deleteConfirmation">"Tento kontakt bude smazán."</string>
- <string name="menu_done">"Uložit"</string>
- <string name="menu_doNotSave">"Zrušit změny"</string>
- <string name="button_save">"Uložit"</string>
- <string name="button_discard">"Zrušit změny"</string>
+ <string name="menu_done">"Hotovo"</string>
+ <!-- no translation found for menu_doNotSave (2174577548513895144) -->
+ <skip />
<string name="editContact_title_edit">"Upravit kontakt"</string>
<string name="editContact_title_insert">"Nový kontakt"</string>
<string name="menu_addItem">"Další informace"</string>
- <!-- no translation found for label_phonetic_name (2288082649573927286) -->
- <skip />
+ <string name="label_phonetic_name">"Foneticky"</string>
<string name="label_notes">"Poznámky"</string>
<string name="label_ringtone">"Vyzváněcí tón"</string>
<string name="ghostData_name">"Jméno a příjmení"</string>
- <!-- no translation found for ghostData_phonetic_name (7852749081984070902) -->
- <skip />
+ <string name="ghostData_phonetic_name">"Jméno (foneticky)"</string>
<string name="ghostData_company">"Společnost"</string>
<string name="ghostData_title">"Funkce"</string>
<string name="ghostData_im">"Název v chatu"</string>
@@ -76,11 +75,11 @@
<string name="errorDialogTitle">"Žádné fotografie"</string>
<string name="photoPickerNotFoundText">"V telefonu nejsou žádné fotografie."</string>
<string name="attachToContact">"Ikona kontaktu"</string>
- <string name="customLabelPickerTitle">"Vlastní název štítku"</string>
+ <string name="customLabelPickerTitle">"Název vlastního štítku"</string>
<string name="menu_displayGroup">"Zobrazit skupinu"</string>
<string name="syncGroupPreference">"Upravit synchronizované skupiny"</string>
<string name="importFromSim">"Importovat kontakty"</string>
- <string name="send_to_voicemail_checkbox">"Přesměrovat hovory přímo do hlasové schránky."</string>
+ <string name="send_to_voicemail_checkbox">"Odesílat hovory přímo do hlasové pošty"</string>
<string name="send_to_voicemail_view">"Hovory jsou přesměrovány přímo do hlasové schránky."</string>
<string name="default_ringtone">"Výchozí"</string>
<string name="addPicture">"Přidat ikonu"</string>
@@ -97,12 +96,18 @@
<string name="contactCreatedToast">"Kontakt byl vytvořen."</string>
<string name="contactSavedToast">"Kontakt byl uložen."</string>
<string name="listSeparatorCallNumber">"Vytočit číslo"</string>
+ <string name="listSeparatorCallNumber_edit">"Telefonní čísla"</string>
<string name="listSeparatorSendSmsMms">"Odeslat SMS nebo MMS"</string>
<string name="listSeparatorSendEmail">"Odeslat e-mail"</string>
+ <string name="listSeparatorSendEmail_edit">"E-mailové adresy"</string>
<string name="listSeparatorSendIm">"Odeslat zprávu chatu"</string>
+ <string name="listSeparatorSendIm_edit">"Adresa chatu"</string>
<string name="listSeparatorMapAddress">"Adresa na mapě"</string>
+ <string name="listSeparatorMapAddress_edit">"Poštovní adresa"</string>
<string name="listSeparatorOrganizations">"Organizace"</string>
<string name="listSeparatorOtherInformation">"Ostatní informace"</string>
+ <string name="listSeparatorOtherInformation_edit">"Další možnosti"</string>
+ <string name="listSeparatorMore_edit">"Další"</string>
<string name="contactsIconLabel">"Kontakty"</string>
<string name="contactsFavoritesLabel">"Oblíbené"</string>
<string name="dialerIconLabel">"Vytáčení"</string>
@@ -126,7 +131,10 @@
<string name="simContacts_emptyLoading">"Načítání z karty SIM..."</string>
<string name="simContacts_title">"Kontakty na kartě SIM"</string>
<string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Synchronizujte své kontakty Google!"</font>" "\n"Po synchronizaci telefonu budete mít kontaktní informace vždy u sebe."</string>
- <string name="noContactsHelpText">"Nemáte žádné kontakty."\n\n"Chcete-li přidat kontakty, stiskněte tlačítko "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" a vyberte:"\n\n" "\n<li><font fgcolor="#ffffffff"><b>"Upravit synchronizované skupiny"</b></font>", chcete-li přidat kontakty z nového nebo existujícího účtu Google"\n</li>\n" "\n<li><font fgcolor="#ffffffff"><b>"Nový kontakt"</b></font>", chcete-li vytvořit zcela nový kontakt"\n</li>\n" "\n<li><font fgcolor="#ffffffff"><b>"Importovat kontakty"</b></font>", chcete-li přidat kontakty ze své karty SIM"\n</li></string>
+ <!-- no translation found for noContactsHelpText (2249195687463896364) -->
+ <skip />
+ <!-- no translation found for noContactsHelpTextWithSync (4927701496550314555) -->
+ <skip />
<string name="seclectSyncGroups_title">"Vyberte skupiny, které chcete synchronizovat"</string>
<string name="liveFolder_all_label">"Všechny kontakty"</string>
<string name="liveFolder_favorites_label">"S hvězdičkou"</string>
@@ -134,24 +142,31 @@
<string name="dialer_useDtmfDialpad">"Použít dotykovou tónovou klávesnici"</string>
<string name="dialer_returnToInCallScreen">"Návrat k probíhajícímu hovoru"</string>
<string name="dialer_addAnotherCall">"Přidat hovor"</string>
- <!-- no translation found for callDetailTitle (5340227785196217938) -->
+ <string name="callDetailTitle">"Detaily hovoru"</string>
+ <string name="toast_call_detail_error">"Detaily požadovaného hovoru nelze načíst."</string>
+ <string name="call_type">"Typ"</string>
+ <string name="type_incoming">"Příchozí volání"</string>
+ <string name="type_outgoing">"Odchozí volání"</string>
+ <string name="type_missed">"Zmeškané volání"</string>
+ <string name="call_time">"Čas"</string>
+ <string name="datetime_relative">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
+ <string name="call_duration">"Trvání"</string>
+ <string name="header_actions">"Akce"</string>
+ <string name="ringtone_spinner">"Vyzváněcí tón: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
+ <string name="add_more_items">"Přidat další položky"</string>
+ <string name="actionCall">"Volat: <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionEmail">"E-mail: <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionText">"Text: <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionChat">"Chatovat pomocí služby <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionMap">"Zobrazit adresu: <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionIncomingCall">"Příchozí volání"</string>
+ <string name="detailIncomingCallsGoToVoicemail">"Budou odeslány přímo do hlasové pošty."</string>
+ <string name="detailsRingtone">"Nastavit vyzvánění <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</string>
+ <string name="callBack">"Zavolat zpět"</string>
+ <!-- no translation found for callAgain (3197312117049874778) -->
<skip />
- <!-- no translation found for toast_call_detail_error (7200975244804730096) -->
+ <!-- no translation found for returnCall (8171961914203617813) -->
<skip />
- <!-- no translation found for call_type (3213526349444862087) -->
- <skip />
- <!-- no translation found for type_incoming (6502076603836088532) -->
- <skip />
- <!-- no translation found for type_outgoing (343108709599392641) -->
- <skip />
- <!-- no translation found for type_missed (2720502601640509542) -->
- <skip />
- <!-- no translation found for call_time (5805575214626630975) -->
- <skip />
- <!-- no translation found for datetime_relative (2906207446040994658) -->
- <skip />
- <!-- no translation found for call_duration (3941950339482985532) -->
- <skip />
- <!-- no translation found for header_actions (229583643365836321) -->
+ <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
<skip />
</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index f004268..507d69d 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -16,6 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="contactsList">"Kontakte"</string>
+ <!-- no translation found for launcherDialer (140610573639849799) -->
+ <skip />
<string name="shortcutContact">"Kontakt"</string>
<string name="starredList">"Markiert"</string>
<string name="frequentList">"Häufig"</string>
@@ -28,10 +30,9 @@
<string name="menu_newContact">"Neuer Kontakt"</string>
<string name="menu_viewContact">"Kontakt anzeigen"</string>
<string name="menu_callNumber">"<xliff:g id="NAME">%s</xliff:g> anrufen"</string>
- <string name="menu_addStar">"Zu Favoriten hinzufügen"</string>
+ <string name="menu_addStar">"Favoriten hinzufügen"</string>
<string name="menu_removeStar">"Aus Favoriten entfernen"</string>
- <!-- no translation found for menu_showBarcode (309973637178814132) -->
- <skip />
+ <string name="menu_showBarcode">"Barcode anzeigen"</string>
<string name="menu_editContact">"Kontakt bearbeiten"</string>
<string name="menu_deleteContact">"Kontakt löschen"</string>
<string name="menu_call">"Anruf"</string>
@@ -41,23 +42,20 @@
<string name="menu_makeDefaultNumber">"Als Standardnummer festlegen"</string>
<string name="deleteConfirmation_title">"Löschen"</string>
<string name="deleteConfirmation">"Dieser Kontakt wird gelöscht."</string>
- <string name="menu_done">"Speichern"</string>
- <string name="menu_doNotSave">"Änderungen löschen"</string>
- <string name="button_save">"Speichern"</string>
- <string name="button_discard">"Änderungen löschen"</string>
+ <string name="menu_done">"Fertig"</string>
+ <!-- no translation found for menu_doNotSave (2174577548513895144) -->
+ <skip />
<string name="editContact_title_edit">"Kontakt bearbeiten"</string>
<string name="editContact_title_insert">"Neuer Kontakt"</string>
<string name="menu_addItem">"Weitere Informationen"</string>
- <!-- no translation found for label_phonetic_name (2288082649573927286) -->
- <skip />
+ <string name="label_phonetic_name">"Phonetisch"</string>
<string name="label_notes">"Notizen"</string>
<string name="label_ringtone">"Klingelton"</string>
<string name="ghostData_name">"Vor- und Nachname"</string>
- <!-- no translation found for ghostData_phonetic_name (7852749081984070902) -->
- <skip />
+ <string name="ghostData_phonetic_name">"Phonetischer Name"</string>
<string name="ghostData_company">"Unternehmen"</string>
<string name="ghostData_title">"Position"</string>
- <string name="ghostData_im">"IM-Name"</string>
+ <string name="ghostData_im">"Chat-Name"</string>
<string name="ghostData_notes">"Meine Notiz"</string>
<string name="ghostData_phone">"Telefonnummer"</string>
<string name="ghostData_email">"E-Mail-Adresse"</string>
@@ -67,7 +65,7 @@
<string name="selectLabel">"Wählen Sie ein Label aus."</string>
<string name="phoneLabelsGroup">"Telefon"</string>
<string name="emailLabelsGroup">"E-Mail"</string>
- <string name="imLabelsGroup">"IM"</string>
+ <string name="imLabelsGroup">"Chat"</string>
<string name="postalLabelsGroup">"Postanschrift"</string>
<string name="otherLabelsGroup">"Sonstiges"</string>
<string-array name="otherLabels">
@@ -77,12 +75,11 @@
<string name="errorDialogTitle">"Keine Bilder"</string>
<string name="photoPickerNotFoundText">"Auf dem Telefon sind keine Bilder verfügbar."</string>
<string name="attachToContact">"Kontaktsymbol"</string>
- <!-- no translation found for customLabelPickerTitle (1081475101983255212) -->
- <skip />
+ <string name="customLabelPickerTitle">"Name des benutzerdefinierten Labels"</string>
<string name="menu_displayGroup">"Gruppe anzeigen"</string>
- <string name="syncGroupPreference">"Synchron. bearbeiten"</string>
+ <string name="syncGroupPreference">"Synchronisierte Gruppen bearbeiten"</string>
<string name="importFromSim">"Kontakte importieren"</string>
- <string name="send_to_voicemail_checkbox">"Anrufe direkt an Mailbox senden"</string>
+ <string name="send_to_voicemail_checkbox">"Anrufe direkt an Voicemail senden"</string>
<string name="send_to_voicemail_view">"Anrufe werden direkt an Mailbox gesendet"</string>
<string name="default_ringtone">"Standard"</string>
<string name="addPicture">"Symbol hinzufügen"</string>
@@ -90,8 +87,7 @@
<string name="noContacts">"Keine Kontakte"</string>
<string name="noContactsWithPhoneNumbers">"Keine Kontakte mit Telefonnummern"</string>
<string name="noFavorites">"Keine Favoriten"</string>
- <!-- no translation found for select_group_title (7955698611959835612) -->
- <skip />
+ <string name="select_group_title">"Gruppen"</string>
<string name="groupEmpty">"Ihre Gruppe \"<xliff:g id="GROUPNAME">%s</xliff:g>\" ist leer."</string>
<string name="showAllGroups">"Alle Kontakte"</string>
<string name="syncAllGroups">"Alle Kontakte synchronisieren"</string>
@@ -100,26 +96,29 @@
<string name="contactCreatedToast">"Kontakt erstellt"</string>
<string name="contactSavedToast">"Kontakt gespeichert"</string>
<string name="listSeparatorCallNumber">"Rufnummer"</string>
+ <string name="listSeparatorCallNumber_edit">"Telefonnummern"</string>
<string name="listSeparatorSendSmsMms">"SMS/MMS senden"</string>
<string name="listSeparatorSendEmail">"E-Mail senden"</string>
- <string name="listSeparatorSendIm">"Per Chat (IM) kontaktieren"</string>
+ <string name="listSeparatorSendEmail_edit">"E-Mail-Adressen"</string>
+ <string name="listSeparatorSendIm">"Per Chat kontaktieren"</string>
+ <string name="listSeparatorSendIm_edit">"Chat-Adressen"</string>
<string name="listSeparatorMapAddress">"Adresse in Maps"</string>
+ <string name="listSeparatorMapAddress_edit">"Postanschrift"</string>
<string name="listSeparatorOrganizations">"Organisationen"</string>
<string name="listSeparatorOtherInformation">"Mehr Informationen"</string>
+ <string name="listSeparatorOtherInformation_edit">"Sonstige Optionen"</string>
+ <string name="listSeparatorMore_edit">"Mehr"</string>
<string name="contactsIconLabel">"Kontakte"</string>
<string name="contactsFavoritesLabel">"Favoriten"</string>
<string name="dialerIconLabel">"Telefon"</string>
<string name="recentCallsIconLabel">"Anrufe"</string>
- <!-- no translation found for liveFolderAll (4789010460767506206) -->
- <skip />
- <!-- no translation found for liveFolderFavorites (3100957542927222282) -->
- <skip />
- <!-- no translation found for liveFolderPhone (3739376066610926780) -->
- <skip />
+ <string name="liveFolderAll">"Alle Kontakte"</string>
+ <string name="liveFolderFavorites">"Markierte Kontakte"</string>
+ <string name="liveFolderPhone">"Kontakte mit Telefonnummern"</string>
<string name="menu_sendTextMessage">"SMS-Nachricht senden"</string>
<string name="recentCalls_callNumber">"<xliff:g id="NAME">%s</xliff:g> anrufen"</string>
<string name="recentCalls_editNumberBeforeCall">"Nummer vor Anruf bearbeiten"</string>
- <string name="recentCalls_addToContact">"Kontakten hinzufügen"</string>
+ <string name="recentCalls_addToContact">"Zu Kontakten hinzufügen"</string>
<string name="recentCalls_removeFromRecentList">"Aus Anrufliste entfernen"</string>
<string name="recentCalls_deleteAll">"Anrufliste löschen"</string>
<string name="recentCalls_empty">"Anrufliste ist leer"</string>
@@ -128,43 +127,46 @@
<string name="unknown">"Unbekannt"</string>
<string name="private_num">"Private Nummer"</string>
<string name="dialerKeyboardHintText">"Mit Tastatur wählen"</string>
- <!-- no translation found for dialerDialpadHintText (5824490365898349041) -->
- <skip />
+ <string name="dialerDialpadHintText">"Zum Hinzufügen eines Anrufs wählen"</string>
<string name="simContacts_emptyLoading">"Ladevorgang von SIM-Karte läuft..."</string>
<string name="simContacts_title">"Kontakte auf SIM-Karte"</string>
<string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Synchronisieren Sie Ihre Google-Kontakte!"</font>" "\n"Nach der Synchronisierung stehen Ihnen Ihre Kontakte überall zur Verfügung."</string>
- <string name="noContactsHelpText">"Sie haben keine Kontakte."\n\n"Um Kontakte hinzuzufügen, klicken Sie auf "<font fgcolor="#ffffffff"><b>"Menü"</b></font>" und wählen Sie "\n\n" "\n<li><font fgcolor="#ffffffff"><b>"Synchronisierte Gruppen bearbeiten"</b></font>", um Kontakte aus einem neuen oder bestehenden Google-Konto hinzuzufügen,"\n</li>\n" "\n<li><font fgcolor="#ffffffff"><b>"Neuer Kontakt"</b></font>", um einen ganz neuen Kontakt hinzuzufügen"\n</li>\n" "\n<li><font fgcolor="#ffffffff"><b>"Kontakte importieren"</b></font>", um Kontakte von Ihrer SIM-Karte hinzuzufügen"\n</li></string>
+ <!-- no translation found for noContactsHelpText (2249195687463896364) -->
+ <skip />
+ <!-- no translation found for noContactsHelpTextWithSync (4927701496550314555) -->
+ <skip />
<string name="seclectSyncGroups_title">"Zu synchronisierende Gruppen auswählen"</string>
- <!-- no translation found for liveFolder_all_label (1552523730090319259) -->
+ <string name="liveFolder_all_label">"Alle Kontakte"</string>
+ <string name="liveFolder_favorites_label">"Markiert"</string>
+ <string name="liveFolder_phones_label">"Telefone"</string>
+ <string name="dialer_useDtmfDialpad">"Telefontastatur verwenden"</string>
+ <string name="dialer_returnToInCallScreen">"Zurück zum Anruf läuft"</string>
+ <string name="dialer_addAnotherCall">"Anruf hinzufügen"</string>
+ <string name="callDetailTitle">"Anrufdetails"</string>
+ <string name="toast_call_detail_error">"Details für den angeforderten Anruf konnten nicht gelesen werden."</string>
+ <string name="call_type">"Typ"</string>
+ <string name="type_incoming">"Eingehender Anruf"</string>
+ <string name="type_outgoing">"Ausgehender Anruf"</string>
+ <string name="type_missed">"Verpasster Anruf"</string>
+ <string name="call_time">"Zeit"</string>
+ <string name="datetime_relative">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
+ <string name="call_duration">"Dauer"</string>
+ <string name="header_actions">"Aktionen"</string>
+ <string name="ringtone_spinner">"Klingelton: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
+ <string name="add_more_items">"Weitere Elemente hinzufügen"</string>
+ <string name="actionCall">"<xliff:g id="TYPE">%s</xliff:g> anrufen"</string>
+ <string name="actionEmail">"E-Mail an <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionText">"Text <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionChat">"Chat mit <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionMap">"<xliff:g id="TYPE">%s</xliff:g>-Adresse anzeigen"</string>
+ <string name="actionIncomingCall">"Eingehende Anrufe"</string>
+ <string name="detailIncomingCallsGoToVoicemail">"Wird direkt an Voicemail weitergeleitet"</string>
+ <string name="detailsRingtone">"Eingestellt auf <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</string>
+ <string name="callBack">"Rückruf"</string>
+ <!-- no translation found for callAgain (3197312117049874778) -->
<skip />
- <!-- no translation found for liveFolder_favorites_label (2674341514070517105) -->
+ <!-- no translation found for returnCall (8171961914203617813) -->
<skip />
- <!-- no translation found for liveFolder_phones_label (1709786878793436245) -->
- <skip />
- <!-- no translation found for dialer_useDtmfDialpad (1707548397435075040) -->
- <skip />
- <!-- no translation found for dialer_returnToInCallScreen (3719386377550913067) -->
- <skip />
- <!-- no translation found for dialer_addAnotherCall (4205688819890074468) -->
- <skip />
- <!-- no translation found for callDetailTitle (5340227785196217938) -->
- <skip />
- <!-- no translation found for toast_call_detail_error (7200975244804730096) -->
- <skip />
- <!-- no translation found for call_type (3213526349444862087) -->
- <skip />
- <!-- no translation found for type_incoming (6502076603836088532) -->
- <skip />
- <!-- no translation found for type_outgoing (343108709599392641) -->
- <skip />
- <!-- no translation found for type_missed (2720502601640509542) -->
- <skip />
- <!-- no translation found for call_time (5805575214626630975) -->
- <skip />
- <!-- no translation found for datetime_relative (2906207446040994658) -->
- <skip />
- <!-- no translation found for call_duration (3941950339482985532) -->
- <skip />
- <!-- no translation found for header_actions (229583643365836321) -->
+ <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
<skip />
</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
deleted file mode 100644
index b26e9ae..0000000
--- a/res/values-en-rGB/strings.xml
+++ /dev/null
@@ -1,125 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="contactsList">"Contacts"</string>
- <string name="shortcutContact">"Contact"</string>
- <string name="starredList">"Starred"</string>
- <string name="frequentList">"Frequent"</string>
- <string name="strequentList">"Favourites"</string>
- <string name="viewContactTitle">"Contact details"</string>
- <string name="viewContactDesription">"View contact"</string>
- <string name="editContactDescription">"Edit contact"</string>
- <string name="insertContactDescription">"Create contact"</string>
- <string name="searchHint">"Search contacts"</string>
- <string name="menu_newContact">"New contact"</string>
- <string name="menu_viewContact">"View contact"</string>
- <!-- unknown placeholder CONTACT in menu_callNumber -->
- <skip />
- <string name="menu_addStar">"Add to favourites"</string>
- <string name="menu_removeStar">"Remove from favourites"</string>
- <!-- no translation found for menu_showBarcode (4627916987700748636) -->
- <skip />
- <string name="menu_editContact">"Edit contact"</string>
- <string name="menu_deleteContact">"Delete contact"</string>
- <string name="menu_call">"Call"</string>
- <string name="menu_sendSMS">"Send SMS/MMS"</string>
- <string name="menu_sendEmail">"Send email"</string>
- <string name="menu_viewAddress">"Map address"</string>
- <string name="menu_makeDefaultNumber">"Make default number"</string>
- <string name="deleteConfirmation_title">"Delete"</string>
- <string name="deleteConfirmation">"This contact will be deleted."</string>
- <string name="menu_done">"Save"</string>
- <string name="menu_doNotSave">"Discard changes"</string>
- <string name="button_save">"Save"</string>
- <string name="button_discard">"Discard changes"</string>
- <string name="editContact_title_edit">"Edit contact"</string>
- <string name="editContact_title_insert">"New contact"</string>
- <string name="menu_addItem">"More info"</string>
- <string name="label_notes">"Notes"</string>
- <string name="label_ringtone">"Ringtone"</string>
- <string name="ghostData_name">"First and Last"</string>
- <string name="ghostData_company">"Company"</string>
- <string name="ghostData_title">"Position"</string>
- <string name="ghostData_im">"IM name"</string>
- <string name="ghostData_notes">"My note"</string>
- <string name="ghostData_phone">"Phone number"</string>
- <string name="ghostData_email">"Email address"</string>
- <string name="ghostData_postal">"Postal address"</string>
- <string name="invalidContactMessage">"The contact does not exist."</string>
- <string name="pickerNewContactHeader">"Create new contact"</string>
- <string name="selectLabel">"Select label"</string>
- <string name="phoneLabelsGroup">"Phone"</string>
- <string name="emailLabelsGroup">"Email"</string>
- <string name="imLabelsGroup">"IM"</string>
- <string name="postalLabelsGroup">"Postal address"</string>
- <string name="otherLabelsGroup">"Other"</string>
- <!-- no translation found for otherLabels:0 (3318569574569948132) -->
- <!-- no translation found for otherLabels:1 (3325413568383685728) -->
- <string name="errorDialogTitle">"No pictures"</string>
- <string name="photoPickerNotFoundText">"No pictures are available on the phone."</string>
- <string name="attachToContact">"Contact icon"</string>
- <string name="customLabelPickerTitle">"Custom label"</string>
- <string name="menu_displayGroup">"Display group"</string>
- <string name="syncGroupPreference">"Sync groups"</string>
- <string name="importFromSim">"Import from SIM card"</string>
- <string name="send_to_voicemail_checkbox">"Send calls directly to voicemail."</string>
- <string name="send_to_voicemail_view">"Calls are sent directly to voicemail."</string>
- <string name="default_ringtone">"Default"</string>
- <string name="addPicture">"Add icon"</string>
- <string name="removePicture">"Remove icon"</string>
- <string name="noContacts">"No contacts."</string>
- <string name="noContactsWithPhoneNumbers">"No contacts with phone numbers."</string>
- <string name="noFavorites">"No favourites."</string>
- <string name="select_group_title">"Select group to display"</string>
- <string name="groupEmpty">"Your \"<xliff:g id="GROUPNAME">%s</xliff:g>\" group is empty."</string>
- <string name="showAllGroups">"All contacts"</string>
- <string name="syncAllGroups">"Sync all contacts"</string>
- <string name="groupNameMyContacts">"My Contacts"</string>
- <string name="groupNameWithPhones">"Contacts with phone numbers"</string>
- <string name="contactCreatedToast">"Contact created."</string>
- <string name="contactSavedToast">"Contact saved."</string>
- <string name="listSeparatorCallNumber">"Dial number"</string>
- <string name="listSeparatorSendSmsMms">"Send SMS/MMS"</string>
- <string name="listSeparatorSendEmail">"Send email"</string>
- <string name="listSeparatorSendIm">"Send instant message"</string>
- <string name="listSeparatorMapAddress">"Map address"</string>
- <string name="listSeparatorOrganizations">"Organisations"</string>
- <string name="listSeparatorOtherInformation">"Other information"</string>
- <string name="contactsIconLabel">"Contacts"</string>
- <string name="contactsFavoritesLabel">"Favourites"</string>
- <string name="dialerIconLabel">"Dialer"</string>
- <string name="recentCallsIconLabel">"Call log"</string>
- <!-- no translation found for liveFolderAll (5991510762804226223) -->
- <skip />
- <!-- no translation found for liveFolderFavorites (8755759874416875970) -->
- <skip />
- <!-- no translation found for liveFolderPhone (3440101264360244544) -->
- <skip />
- <string name="menu_sendTextMessage">"Send SMS message"</string>
- <!-- unknown placeholder WHO in recentCalls_callNumber -->
- <skip />
- <string name="recentCalls_editNumberBeforeCall">"Edit number before call"</string>
- <string name="recentCalls_addToContact">"Add to contacts"</string>
- <string name="recentCalls_removeFromRecentList">"Remove from call log"</string>
- <string name="recentCalls_deleteAll">"Clear call log"</string>
- <string name="recentCalls_empty">"Call log is empty."</string>
- <string name="imei">"IMEI"</string>
- <string name="voicemail">"Voicemail"</string>
- <string name="unknown">"Unknown"</string>
- <string name="private_num">"Private number"</string>
- <string name="dialerKeyboardHintText">"Use keyboard to dial"</string>
- <string name="simContacts_emptyLoading">"Loading from SIM card…"</string>
- <string name="simContacts_title">"SIM card contacts"</string>
- <!-- no translation found for contactsSyncPlug (1549212649158409469) -->
- <skip />
- <!-- no translation found for noContactsHelpText (6155730972704522463) -->
- <skip />
- <!-- no translation found for seclectSyncGroups_title (7675331949118054911) -->
- <skip />
- <!-- no translation found for liveFolder_all_label (3716551598022430019) -->
- <skip />
- <!-- no translation found for liveFolder_favorites_label (9053985659909059395) -->
- <skip />
- <!-- no translation found for liveFolder_phones_label (8943901400107401868) -->
- <skip />
-</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
deleted file mode 100644
index 2f8a286..0000000
--- a/res/values-es-rUS/strings.xml
+++ /dev/null
@@ -1,177 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="contactsList">"Contactos"</string>
- <!-- no translation found for shortcutContact (1520089872483067797) -->
- <skip />
- <string name="starredList">"Con estrella"</string>
- <string name="frequentList">"Frecuente"</string>
- <string name="strequentList">"Favoritos"</string>
- <!-- no translation found for viewContactTitle (5340316765801746261) -->
- <skip />
- <!-- no translation found for viewContactDesription (5593543465183236254) -->
- <skip />
- <!-- no translation found for editContactDescription (207393633337592309) -->
- <skip />
- <!-- no translation found for insertContactDescription (8392185611221432248) -->
- <skip />
- <string name="searchHint">"Buscar contactos"</string>
- <string name="menu_newContact">"Nuevo contacto"</string>
- <string name="menu_viewContact">"Ver contacto"</string>
- <!-- unknown placeholder CONTACT in menu_callNumber -->
- <skip />
- <string name="menu_addStar">"Agregar estrella"</string>
- <string name="menu_removeStar">"Quitar estrella"</string>
- <!-- no translation found for menu_showBarcode (4627916987700748636) -->
- <skip />
- <string name="menu_editContact">"Editar contacto"</string>
- <string name="menu_deleteContact">"Eliminar contacto"</string>
- <string name="menu_call">"Llamar"</string>
- <string name="menu_sendSMS">"Enviar texto"</string>
- <string name="menu_sendEmail">"Enviar correo electrónico"</string>
- <string name="menu_viewAddress">"Dirección en el mapa"</string>
- <string name="menu_makeDefaultNumber">"Convertir en número predeterminado"</string>
- <!-- no translation found for deleteConfirmation_title (1628057421142368583) -->
- <skip />
- <string name="deleteConfirmation">"¿Eliminar este contacto?"</string>
- <string name="menu_done">"Guardar"</string>
- <string name="menu_doNotSave">"Rechazar cambios"</string>
- <string name="button_save">"Guardar"</string>
- <string name="button_discard">"Rechazar cambios"</string>
- <string name="editContact_title_edit">"Editar contacto"</string>
- <string name="editContact_title_insert">"Nuevo contacto"</string>
- <string name="menu_addItem">"Agregar más"</string>
- <string name="label_notes">"Notas"</string>
- <!-- no translation found for label_ringtone (1269538172838343970) -->
- <skip />
- <string name="ghostData_name">"Nombre y apellido"</string>
- <string name="ghostData_company">"Organización"</string>
- <string name="ghostData_title">"Puesto"</string>
- <string name="ghostData_im">"Nombre MI"</string>
- <string name="ghostData_notes">"Mi nota"</string>
- <string name="ghostData_phone">"Número de teléfono"</string>
- <string name="ghostData_email">"Dirección de correo electrónico"</string>
- <!-- unknown placeholder BREAK_0 in ghostData_postal -->
- <skip />
- <string name="invalidContactMessage">"Los contactos deben tener nombres"</string>
- <string name="pickerNewContactHeader">"Crear nuevo contacto"</string>
- <string name="selectLabel">"Seleccionar etiqueta"</string>
- <string name="phoneLabelsGroup">"Teléfono"</string>
- <string name="emailLabelsGroup">"C. electrónico"</string>
- <string name="imLabelsGroup">"MI"</string>
- <string name="postalLabelsGroup">"Dirección postal"</string>
- <string name="otherLabelsGroup">"Otros"</string>
- <!-- no translation found for otherLabels:0 (3318569574569948132) -->
- <!-- no translation found for otherLabels:1 (3325413568383685728) -->
- <string name="errorDialogTitle">"¡Atención!"</string>
- <string name="photoPickerNotFoundText">"Ninguna imagen disponible."</string>
- <string name="attachToContact">"Foto de los contactos"</string>
- <string name="customLabelPickerTitle">"Etiqueta personalizada"</string>
- <!-- no translation found for menu_displayGroup (2835746769742496686) -->
- <skip />
- <!-- no translation found for syncGroupPreference (759121296595419145) -->
- <skip />
- <string name="importFromSim">"Importar de tarjeta SIM"</string>
- <!-- no translation found for alphabet (4977128516779796464) -->
- <skip />
- <!-- no translation found for send_to_voicemail_checkbox (1699633783417579410) -->
- <skip />
- <!-- no translation found for send_to_voicemail_view (4299389800446371057) -->
- <skip />
- <!-- no translation found for default_ringtone (3998437793418131562) -->
- <skip />
- <!-- no translation found for addPicture (7010902051370875352) -->
- <skip />
- <!-- no translation found for removePicture (2322840177008417519) -->
- <skip />
- <!-- no translation found for noContacts (7515781671301309298) -->
- <skip />
- <!-- no translation found for noContactsWithPhoneNumbers (3105170743499016241) -->
- <skip />
- <!-- no translation found for noFavorites (7957536428532225634) -->
- <skip />
- <!-- no translation found for select_group_title (8821785850959403592) -->
- <skip />
- <!-- no translation found for groupEmpty (1733723844723885242) -->
- <skip />
- <!-- no translation found for showAllGroups (4524662887308889400) -->
- <skip />
- <!-- no translation found for syncAllGroups (8415112909188430211) -->
- <skip />
- <!-- no translation found for groupNameMyContacts (1298661863710879264) -->
- <skip />
- <!-- no translation found for groupNameWithPhones (4051877952712463294) -->
- <skip />
- <!-- no translation found for contactCreatedToast (5309869712901550955) -->
- <skip />
- <!-- no translation found for contactSavedToast (1228932477738680325) -->
- <skip />
- <!-- no translation found for listSeparatorCallNumber (9142725721395758026) -->
- <skip />
- <!-- no translation found for listSeparatorSendSmsMms (8878062000446372333) -->
- <skip />
- <!-- no translation found for listSeparatorSendEmail (3813935531061488274) -->
- <skip />
- <!-- no translation found for listSeparatorSendIm (3885045096980470847) -->
- <skip />
- <!-- no translation found for listSeparatorMapAddress (7749519405208811410) -->
- <skip />
- <!-- no translation found for listSeparatorOrganizations (5731454670822188295) -->
- <skip />
- <!-- no translation found for listSeparatorOtherInformation (3399084175925138065) -->
- <skip />
- <!-- no translation found for contactsIconLabel (392729648321810378) -->
- <skip />
- <!-- no translation found for contactsFavoritesLabel (6274307000699136596) -->
- <skip />
- <!-- no translation found for dialerIconLabel (396765298398417139) -->
- <skip />
- <!-- no translation found for recentCallsIconLabel (7432201162713288826) -->
- <skip />
- <!-- no translation found for liveFolderAll (5991510762804226223) -->
- <skip />
- <!-- no translation found for liveFolderFavorites (8755759874416875970) -->
- <skip />
- <!-- no translation found for liveFolderPhone (3440101264360244544) -->
- <skip />
- <!-- no translation found for menu_sendTextMessage (3055919380461974147) -->
- <skip />
- <!-- no translation found for recentCalls_callNumber (924407199258234369) -->
- <skip />
- <!-- no translation found for recentCalls_editNumberBeforeCall (7859145185424954030) -->
- <skip />
- <!-- no translation found for recentCalls_addToContact (6950267092567953305) -->
- <skip />
- <!-- no translation found for recentCalls_removeFromRecentList (5273789011391059975) -->
- <skip />
- <!-- no translation found for recentCalls_deleteAll (425798199678070888) -->
- <skip />
- <!-- no translation found for recentCalls_empty (7787624895504983911) -->
- <skip />
- <!-- no translation found for imei (1052536402066249452) -->
- <skip />
- <!-- no translation found for voicemail (1135686231023059817) -->
- <skip />
- <!-- no translation found for unknown (6231893925212017656) -->
- <skip />
- <!-- no translation found for private_num (3065614133902647350) -->
- <skip />
- <!-- no translation found for dialerKeyboardHintText (2013777173021862941) -->
- <skip />
- <!-- no translation found for simContacts_emptyLoading (4828419758306519589) -->
- <skip />
- <!-- no translation found for simContacts_title (4162577066960174009) -->
- <skip />
- <!-- no translation found for contactsSyncPlug (1549212649158409469) -->
- <skip />
- <!-- no translation found for noContactsHelpText (6155730972704522463) -->
- <skip />
- <!-- no translation found for seclectSyncGroups_title (7675331949118054911) -->
- <skip />
- <!-- no translation found for liveFolder_all_label (3716551598022430019) -->
- <skip />
- <!-- no translation found for liveFolder_favorites_label (9053985659909059395) -->
- <skip />
- <!-- no translation found for liveFolder_phones_label (8943901400107401868) -->
- <skip />
-</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 9251140..f41406d 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -16,6 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="contactsList">"Contactos"</string>
+ <string name="launcherDialer">"Llamadas"</string>
<string name="shortcutContact">"Contacto"</string>
<string name="starredList">"Destacados"</string>
<string name="frequentList">"Frecuentes"</string>
@@ -40,20 +41,16 @@
<string name="menu_makeDefaultNumber">"Convertir en número predeterminado"</string>
<string name="deleteConfirmation_title">"Suprimir"</string>
<string name="deleteConfirmation">"El contacto se eliminará."</string>
- <string name="menu_done">"Guardar"</string>
- <string name="menu_doNotSave">"Descartar cambios"</string>
- <string name="button_save">"Guardar"</string>
- <string name="button_discard">"Descartar cambios"</string>
+ <string name="menu_done">"Listo"</string>
+ <string name="menu_doNotSave">"Volver"</string>
<string name="editContact_title_edit">"Editar contacto"</string>
<string name="editContact_title_insert">"Contacto nuevo"</string>
<string name="menu_addItem">"Más información"</string>
- <!-- no translation found for label_phonetic_name (2288082649573927286) -->
- <skip />
+ <string name="label_phonetic_name">"Pronunciación"</string>
<string name="label_notes">"Notas"</string>
<string name="label_ringtone">"Tono"</string>
<string name="ghostData_name">"Nombre y apellido"</string>
- <!-- no translation found for ghostData_phonetic_name (7852749081984070902) -->
- <skip />
+ <string name="ghostData_phonetic_name">"Transcripción fonética del nombre"</string>
<string name="ghostData_company">"Empresa"</string>
<string name="ghostData_title">"Posición"</string>
<string name="ghostData_im">"Nombre de MI"</string>
@@ -80,7 +77,7 @@
<string name="menu_displayGroup">"Mostrar grupo"</string>
<string name="syncGroupPreference">"Editar grupos de sincronización"</string>
<string name="importFromSim">"Importar contactos"</string>
- <string name="send_to_voicemail_checkbox">"Enviar llamadas directamente al buzón de voz"</string>
+ <string name="send_to_voicemail_checkbox">"Enviar llamadas directamente como mensajes de voz"</string>
<string name="send_to_voicemail_view">"Las llamadas se envían directamente al buzón de voz."</string>
<string name="default_ringtone">"Predeterminado"</string>
<string name="addPicture">"Añadir icono"</string>
@@ -97,15 +94,21 @@
<string name="contactCreatedToast">"Se ha creado el contacto."</string>
<string name="contactSavedToast">"El contacto se ha guardado."</string>
<string name="listSeparatorCallNumber">"Marcar número"</string>
+ <string name="listSeparatorCallNumber_edit">"Números de teléfono"</string>
<string name="listSeparatorSendSmsMms">"Enviar SMS/MMS"</string>
<string name="listSeparatorSendEmail">"Enviar mensaje de correo electrónico"</string>
+ <string name="listSeparatorSendEmail_edit">"Direcciones de correo electrónico"</string>
<string name="listSeparatorSendIm">"Enviar mensaje instantáneo"</string>
+ <string name="listSeparatorSendIm_edit">"Direcciones de chat"</string>
<string name="listSeparatorMapAddress">"Dirección en mapa"</string>
+ <string name="listSeparatorMapAddress_edit">"Direcciones postales"</string>
<string name="listSeparatorOrganizations">"Organizaciones"</string>
<string name="listSeparatorOtherInformation">"Otra información"</string>
+ <string name="listSeparatorOtherInformation_edit">"Otras opciones"</string>
+ <string name="listSeparatorMore_edit">"Más"</string>
<string name="contactsIconLabel">"Contactos"</string>
<string name="contactsFavoritesLabel">"Favoritos"</string>
- <string name="dialerIconLabel">"Marcación"</string>
+ <string name="dialerIconLabel">"Llamar"</string>
<string name="recentCallsIconLabel">"Registro de llamadas"</string>
<string name="liveFolderAll">"Todos los contactos"</string>
<string name="liveFolderFavorites">"Contactos destacados"</string>
@@ -126,7 +129,8 @@
<string name="simContacts_emptyLoading">"Cargando desde tarjeta SIM…"</string>
<string name="simContacts_title">"Contactos de tarjeta SIM"</string>
<string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Sincroniza tus contactos de Google"</font>" "\n"Después de sincronizarlos con tu teléfono, podrás acceder a tus contactos desde cualquier lugar."</string>
- <string name="noContactsHelpText">"No tienes ningún contacto."\n\n"Para añadir contactos, pulsa "<font fgcolor="#ffffffff"><b>"Menú"</b></font>" y selecciona:"\n\n" "\n<li><font fgcolor="#ffffffff"><b>"Editar grupos de sincronización"</b></font>" para añadir contactos de una cuenta de Google nueva o existente"\n</li>\n" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un contacto desde cero"\n</li>\n" "\n<li><font fgcolor="#ffffffff"><b>"Importar contactos"</b></font>" para añadir contactos de tu tarjeta SIM"\n</li></string>
+ <string name="noContactsHelpText">"No tienes contactos."\n\n"Para añadir contactos, pulsa la tecla "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" y selecciona:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para añadir un nuevo contacto"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar contactos"</b></font>" para añadir contactos de la tarjeta SIM"\n</li></string>
+ <string name="noContactsHelpTextWithSync">"No tienes contactos."\n\n"Para añadir contactos, pulsa la tecla "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" y selecciona:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Editar grupos de sincronización"</b></font>" para añadirlos desde una cuenta de Google nueva o existente"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Contacto nuevo"</b></font>" para crear un contacto"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importar contactos"</b></font>" para añadir contactos de la tarjeta SIM"\n</li></string>
<string name="seclectSyncGroups_title">"Seleccionar grupos para la sincronización"</string>
<string name="liveFolder_all_label">"Todos los contactos"</string>
<string name="liveFolder_favorites_label">"Destacados"</string>
@@ -134,24 +138,28 @@
<string name="dialer_useDtmfDialpad">"Usar el teclado de tonos"</string>
<string name="dialer_returnToInCallScreen">"Volver a la llamada en curso"</string>
<string name="dialer_addAnotherCall">"Añadir llamada"</string>
- <!-- no translation found for callDetailTitle (5340227785196217938) -->
- <skip />
- <!-- no translation found for toast_call_detail_error (7200975244804730096) -->
- <skip />
- <!-- no translation found for call_type (3213526349444862087) -->
- <skip />
- <!-- no translation found for type_incoming (6502076603836088532) -->
- <skip />
- <!-- no translation found for type_outgoing (343108709599392641) -->
- <skip />
- <!-- no translation found for type_missed (2720502601640509542) -->
- <skip />
- <!-- no translation found for call_time (5805575214626630975) -->
- <skip />
- <!-- no translation found for datetime_relative (2906207446040994658) -->
- <skip />
- <!-- no translation found for call_duration (3941950339482985532) -->
- <skip />
- <!-- no translation found for header_actions (229583643365836321) -->
- <skip />
+ <string name="callDetailTitle">"Detalles de la llamada"</string>
+ <string name="toast_call_detail_error">"No se han podido leer los detalles de la llamada solicitada."</string>
+ <string name="call_type">"Tipo"</string>
+ <string name="type_incoming">"Llamada entrante"</string>
+ <string name="type_outgoing">"Llamada saliente"</string>
+ <string name="type_missed">"Llamada perdida"</string>
+ <string name="call_time">"Hora"</string>
+ <string name="datetime_relative">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
+ <string name="call_duration">"Duración"</string>
+ <string name="header_actions">"Acciones"</string>
+ <string name="ringtone_spinner">"Tono de llamada: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
+ <string name="add_more_items">"Añadir más elementos"</string>
+ <string name="actionCall">"Llamar a <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionEmail">"Enviar email a <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionText">"Enviar SMS a <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionChat">"Chatear mediante <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionMap">"Ver dirección de <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionIncomingCall">"Llamadas entrantes"</string>
+ <string name="detailIncomingCallsGoToVoicemail">"Pasarán directamente al correo de voz"</string>
+ <string name="detailsRingtone">"Establecido como <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</string>
+ <string name="callBack">"Volver a llamar"</string>
+ <string name="callAgain">"Llamar de nuevo"</string>
+ <string name="returnCall">"Devolver llamada"</string>
+ <string name="callDetailsDurationFormat">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> seg."</string>
</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 88285b0..ce00813 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -16,6 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="contactsList">"Contacts"</string>
+ <string name="launcherDialer">"Appeler"</string>
<string name="shortcutContact">"Contact"</string>
<string name="starredList">"Marqués d\'une étoile"</string>
<string name="frequentList">"Contacts fréquents"</string>
@@ -40,33 +41,29 @@
<string name="menu_makeDefaultNumber">"Numéro téléphone par défaut"</string>
<string name="deleteConfirmation_title">"Supprimer"</string>
<string name="deleteConfirmation">"Ce contact sera supprimé."</string>
- <string name="menu_done">"Enregistrer"</string>
- <string name="menu_doNotSave">"Annuler les modifications"</string>
- <string name="button_save">"Enregistrer"</string>
- <string name="button_discard">"Annuler les modifications"</string>
+ <string name="menu_done">"OK"</string>
+ <string name="menu_doNotSave">"Annuler"</string>
<string name="editContact_title_edit">"Modifier le contact"</string>
<string name="editContact_title_insert">"Nouveau contact"</string>
<string name="menu_addItem">"Plus d\'infos"</string>
- <!-- no translation found for label_phonetic_name (2288082649573927286) -->
- <skip />
- <string name="label_notes">"Remarques"</string>
+ <string name="label_phonetic_name">"Prononciation phonétique"</string>
+ <string name="label_notes">"Notes"</string>
<string name="label_ringtone">"Sonnerie"</string>
- <string name="ghostData_name">"Premier et dernier"</string>
- <!-- no translation found for ghostData_phonetic_name (7852749081984070902) -->
- <skip />
+ <string name="ghostData_name">"Nom et prénom"</string>
+ <string name="ghostData_phonetic_name">"Nom phonétique"</string>
<string name="ghostData_company">"Société"</string>
<string name="ghostData_title">"Position"</string>
- <string name="ghostData_im">"Nom du compte de MI"</string>
+ <string name="ghostData_im">"Nom du compte"</string>
<string name="ghostData_notes">"Mon commentaire"</string>
<string name="ghostData_phone">"Numéro téléphone"</string>
<string name="ghostData_email">"Adresse e-mail"</string>
<string name="ghostData_postal">"Adresse postale"</string>
<string name="invalidContactMessage">"Ce contact n\'existe pas."</string>
<string name="pickerNewContactHeader">"Créer un nouveau contact"</string>
- <string name="selectLabel">"Sélectionner un libellé"</string>
+ <string name="selectLabel">"Sélectionnez un libellé"</string>
<string name="phoneLabelsGroup">"Téléphone"</string>
<string name="emailLabelsGroup">"E-mail"</string>
- <string name="imLabelsGroup">"MI"</string>
+ <string name="imLabelsGroup">"Chat"</string>
<string name="postalLabelsGroup">"Adresse postale"</string>
<string name="otherLabelsGroup">"Autre"</string>
<string-array name="otherLabels">
@@ -78,7 +75,7 @@
<string name="attachToContact">"Icône de contact"</string>
<string name="customLabelPickerTitle">"Libellé personnalisé"</string>
<string name="menu_displayGroup">"Afficher les groupes"</string>
- <string name="syncGroupPreference">"Modifier les groupes à synchroniser"</string>
+ <string name="syncGroupPreference">"Param. sync. groupes"</string>
<string name="importFromSim">"Importer des contacts"</string>
<string name="send_to_voicemail_checkbox">"Renvoyer les appels directement vers la boîte vocale."</string>
<string name="send_to_voicemail_view">"Les appels sont renvoyés directement vers la boîte vocale."</string>
@@ -93,20 +90,26 @@
<string name="showAllGroups">"Tous les contacts"</string>
<string name="syncAllGroups">"Synchroniser tous les contacts"</string>
<string name="groupNameMyContacts">"Mes contacts"</string>
- <string name="groupNameWithPhones">"Contacts avec des numéros téléphone"</string>
+ <string name="groupNameWithPhones">"Contacts avec des n° de téléphone"</string>
<string name="contactCreatedToast">"Contact créé."</string>
<string name="contactSavedToast">"Contact enregistré."</string>
<string name="listSeparatorCallNumber">"Composer le numéro"</string>
+ <string name="listSeparatorCallNumber_edit">"Numéros de téléphone"</string>
<string name="listSeparatorSendSmsMms">"Envoyer un SMS/MMS"</string>
<string name="listSeparatorSendEmail">"Envoyer un e-mail"</string>
+ <string name="listSeparatorSendEmail_edit">"Adresses e-mail"</string>
<string name="listSeparatorSendIm">"Envoyer un message instantané"</string>
+ <string name="listSeparatorSendIm_edit">"Adresses de chat"</string>
<string name="listSeparatorMapAddress">"Adresse sur un plan"</string>
+ <string name="listSeparatorMapAddress_edit">"Adresses postales"</string>
<string name="listSeparatorOrganizations">"Organisations"</string>
<string name="listSeparatorOtherInformation">"Autres informations"</string>
+ <string name="listSeparatorOtherInformation_edit">"Autres options"</string>
+ <string name="listSeparatorMore_edit">"Plus"</string>
<string name="contactsIconLabel">"Contacts"</string>
<string name="contactsFavoritesLabel">"Favoris"</string>
- <string name="dialerIconLabel">"Numéroteur"</string>
- <string name="recentCallsIconLabel">"Journal des appels"</string>
+ <string name="dialerIconLabel">"Appeler"</string>
+ <string name="recentCallsIconLabel">"Appels"</string>
<string name="liveFolderAll">"Tous les contacts"</string>
<string name="liveFolderFavorites">"Contacts suivis"</string>
<string name="liveFolderPhone">"Contacts avec numéro de téléphone"</string>
@@ -114,19 +117,20 @@
<string name="recentCalls_callNumber">"Appeler <xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall">"Modifier le numéro avant d\'effectuer l\'appel"</string>
<string name="recentCalls_addToContact">"Ajouter aux contacts"</string>
- <string name="recentCalls_removeFromRecentList">"Supprimer du journal des appels"</string>
- <string name="recentCalls_deleteAll">"Effacer le journal des appels"</string>
- <string name="recentCalls_empty">"Le journal des appels est vide."</string>
+ <string name="recentCalls_removeFromRecentList">"Supprimer de la liste des appels"</string>
+ <string name="recentCalls_deleteAll">"Effacer tous les appels"</string>
+ <string name="recentCalls_empty">"Aucun appel."</string>
<string name="imei">"IMEI"</string>
<string name="voicemail">"Boîte vocale"</string>
<string name="unknown">"Inconnu"</string>
<string name="private_num">"Numéro privée"</string>
- <string name="dialerKeyboardHintText">"Utilisez le clavier pour effectuer la numérotation"</string>
+ <string name="dialerKeyboardHintText">"Utilisez le clavier pour composer le numéro"</string>
<string name="dialerDialpadHintText">"Composer le numéro pour ajouter un appel"</string>
<string name="simContacts_emptyLoading">"Chargement depuis la carte SIM..."</string>
<string name="simContacts_title">"Contacts de carte SIM"</string>
- <string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Synchronisez vos contacts Google !"</font>" "\n"Une fois que vous aurez synchronisé votre téléphone, vos contacts seront disponibles, où que vous soyez."</string>
- <string name="noContactsHelpText">"Vous n\'avez pas de contacts."\n\n"Pour ajouter des contacts, appuyez sur "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" et sélectionnez :"\n\n" "\n<li><font fgcolor="#ffffffff"><b>"Modifier les groupes à synchroniser"</b></font>" pour ajouter des contacts d\'un compte existant ou d\'un nouveau compte Google"\n</li>\n" "\n<li><font fgcolor="#ffffffff"><b>"Nouveau contact"</b></font>" pour créer un tout nouveau contact"\n</li>\n" "\n<li><font fgcolor="#ffffffff"><b>"Importer des contacts"</b></font>" pour ajouter des contacts de votre carte SIM"\n</li>"."</string>
+ <string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Synchronisez vos contacts Google !"</font>" "\n"Vos contacts seront disponibles, où que vous soyez, dès que vous aurez synchronisé votre téléphone."</string>
+ <string name="noContactsHelpText">"Aucun contact."\n\n"Pour ajouter des contacts, appuyez sur "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" et sélectionnez :"\n" "\n<li><font fgcolor="#ffffffff"><b>"Nouveau contact"</b></font>" pour créer un tout nouveau contact"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer des contacts"</b></font>" pour ajouter des contacts à partir de votre carte SIM"\n</li></string>
+ <string name="noContactsHelpTextWithSync">"Aucun contact."\n\n"Pour ajouter des contacts, appuyez sur "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" et sélectionnez :"\n" "\n<li><font fgcolor="#ffffffff"><b>"Param. sync. groupes"</b></font>" pour ajouter des contacts depuis un nouveau compte Google ou un compte existant."\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nouveau contact"</b></font>" pour créer un tout nouveau contact"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importer des contacts"</b></font>" pour ajouter des contacts à partir de votre carte SIM"\n</li></string>
<string name="seclectSyncGroups_title">"Sélectionner les groupes à synchroniser"</string>
<string name="liveFolder_all_label">"Tous les contacts"</string>
<string name="liveFolder_favorites_label">"Suivis"</string>
@@ -134,24 +138,28 @@
<string name="dialer_useDtmfDialpad">"Utiliser le clavier DTMF"</string>
<string name="dialer_returnToInCallScreen">"Reprendre l\'appel en cours"</string>
<string name="dialer_addAnotherCall">"Ajouter un appel"</string>
- <!-- no translation found for callDetailTitle (5340227785196217938) -->
- <skip />
- <!-- no translation found for toast_call_detail_error (7200975244804730096) -->
- <skip />
- <!-- no translation found for call_type (3213526349444862087) -->
- <skip />
- <!-- no translation found for type_incoming (6502076603836088532) -->
- <skip />
- <!-- no translation found for type_outgoing (343108709599392641) -->
- <skip />
- <!-- no translation found for type_missed (2720502601640509542) -->
- <skip />
- <!-- no translation found for call_time (5805575214626630975) -->
- <skip />
- <!-- no translation found for datetime_relative (2906207446040994658) -->
- <skip />
- <!-- no translation found for call_duration (3941950339482985532) -->
- <skip />
- <!-- no translation found for header_actions (229583643365836321) -->
- <skip />
+ <string name="callDetailTitle">"Détails sur l\'appel"</string>
+ <string name="toast_call_detail_error">"Impossible de consulter les détails de l\'appel demandé."</string>
+ <string name="call_type">"Type"</string>
+ <string name="type_incoming">"Appel entrant"</string>
+ <string name="type_outgoing">"Appel sortant"</string>
+ <string name="type_missed">"Appel manqué"</string>
+ <string name="call_time">"Heure"</string>
+ <string name="datetime_relative">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
+ <string name="call_duration">"Durée"</string>
+ <string name="header_actions">"Actions"</string>
+ <string name="ringtone_spinner">"Sonnerie : <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
+ <string name="add_more_items">"Ajouter d\'autres éléments"</string>
+ <string name="actionCall">"Appeler <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionEmail">"Envoyer un e-mail à <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionText">"Envoyer un SMS à <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionChat">"Chatter à l\'aide de <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionMap">"Afficher l\'adresse <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionIncomingCall">"Appels entrants"</string>
+ <string name="detailIncomingCallsGoToVoicemail">"Seront envoyés directement en tant que message vocal"</string>
+ <string name="detailsRingtone">"Associer à <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</string>
+ <string name="callBack">"Rappeler"</string>
+ <string name="callAgain">"Rappeler"</string>
+ <string name="returnCall">"Rappeler"</string>
+ <string name="callDetailsDurationFormat">"<xliff:g id="MINUTES">%s</xliff:g> mn <xliff:g id="SECONDS">%s</xliff:g> s"</string>
</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 2b16d13..59064f0 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -16,6 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="contactsList">"Contatti"</string>
+ <string name="launcherDialer">"Telefono"</string>
<string name="shortcutContact">"Contatto"</string>
<string name="starredList">"Speciali"</string>
<string name="frequentList">"Frequenti"</string>
@@ -41,22 +42,18 @@
<string name="deleteConfirmation_title">"Elimina"</string>
<string name="deleteConfirmation">"Il contatto verrà eliminato."</string>
<string name="menu_done">"Salva"</string>
- <string name="menu_doNotSave">"Ignora modifiche"</string>
- <string name="button_save">"Salva"</string>
- <string name="button_discard">"Ignora modifiche"</string>
+ <string name="menu_doNotSave">"Annulla"</string>
<string name="editContact_title_edit">"Modifica contatto"</string>
<string name="editContact_title_insert">"Nuovo contatto"</string>
<string name="menu_addItem">"Altre info"</string>
- <!-- no translation found for label_phonetic_name (2288082649573927286) -->
- <skip />
+ <string name="label_phonetic_name">"Fonetica"</string>
<string name="label_notes">"Note"</string>
<string name="label_ringtone">"Suoneria"</string>
<string name="ghostData_name">"Nome e cognome"</string>
- <!-- no translation found for ghostData_phonetic_name (7852749081984070902) -->
- <skip />
+ <string name="ghostData_phonetic_name">"Nome fonetico"</string>
<string name="ghostData_company">"Società"</string>
<string name="ghostData_title">"Mansione"</string>
- <string name="ghostData_im">"Nome IM"</string>
+ <string name="ghostData_im">"Nome account chat"</string>
<string name="ghostData_notes">"La mia nota"</string>
<string name="ghostData_phone">"Numero di telefono"</string>
<string name="ghostData_email">"Indirizzo email"</string>
@@ -66,7 +63,7 @@
<string name="selectLabel">"Seleziona etichetta"</string>
<string name="phoneLabelsGroup">"Telefono"</string>
<string name="emailLabelsGroup">"Email"</string>
- <string name="imLabelsGroup">"IM"</string>
+ <string name="imLabelsGroup">"Chat"</string>
<string name="postalLabelsGroup">"Indirizzo postale"</string>
<string name="otherLabelsGroup">"Altro"</string>
<string-array name="otherLabels">
@@ -80,7 +77,7 @@
<string name="menu_displayGroup">"Visualizza gruppo"</string>
<string name="syncGroupPreference">"Modifica sincr. gruppi"</string>
<string name="importFromSim">"Importa contatti"</string>
- <string name="send_to_voicemail_checkbox">"Inoltra chiamate direttamente a segreteria."</string>
+ <string name="send_to_voicemail_checkbox">"Inoltra chiamate direttamente alla segreteria"</string>
<string name="send_to_voicemail_view">"Le chiamate vengono inoltrate direttamente alla segreteria."</string>
<string name="default_ringtone">"Predefinita"</string>
<string name="addPicture">"Aggiungi icona"</string>
@@ -97,24 +94,30 @@
<string name="contactCreatedToast">"Contatto creato."</string>
<string name="contactSavedToast">"Contatto salvato."</string>
<string name="listSeparatorCallNumber">"Componi numero"</string>
+ <string name="listSeparatorCallNumber_edit">"Numeri di telefono"</string>
<string name="listSeparatorSendSmsMms">"Invia SMS/MMS"</string>
<string name="listSeparatorSendEmail">"Invia email"</string>
- <string name="listSeparatorSendIm">"Invia msg IM"</string>
+ <string name="listSeparatorSendEmail_edit">"Indirizzi email"</string>
+ <string name="listSeparatorSendIm">"Invia messagio chat"</string>
+ <string name="listSeparatorSendIm_edit">"Indirizzi chat"</string>
<string name="listSeparatorMapAddress">"Indirizzo su mappa"</string>
+ <string name="listSeparatorMapAddress_edit">"Indirizzi postali"</string>
<string name="listSeparatorOrganizations">"Organizzazioni"</string>
<string name="listSeparatorOtherInformation">"Altre informazioni"</string>
+ <string name="listSeparatorOtherInformation_edit">"Altre opzioni"</string>
+ <string name="listSeparatorMore_edit">"Altro"</string>
<string name="contactsIconLabel">"Contatti"</string>
<string name="contactsFavoritesLabel">"Preferiti"</string>
- <string name="dialerIconLabel">"Dialer"</string>
+ <string name="dialerIconLabel">"Telefono"</string>
<string name="recentCallsIconLabel">"Reg. chiamate"</string>
<string name="liveFolderAll">"Tutti i contatti"</string>
<string name="liveFolderFavorites">"Contatti speciali"</string>
<string name="liveFolderPhone">"Contatti con numeri di telefono"</string>
<string name="menu_sendTextMessage">"Invia SMS"</string>
<string name="recentCalls_callNumber">"Chiama <xliff:g id="NAME">%s</xliff:g>"</string>
- <string name="recentCalls_editNumberBeforeCall">"Modifica numero prima di chiamare"</string>
+ <string name="recentCalls_editNumberBeforeCall">"Modifica prima di chiamare"</string>
<string name="recentCalls_addToContact">"Aggiungi a contatti"</string>
- <string name="recentCalls_removeFromRecentList">"Rimuovi da registro chiamate"</string>
+ <string name="recentCalls_removeFromRecentList">"Rimuovi da registro"</string>
<string name="recentCalls_deleteAll">"Cancella registro chiamate"</string>
<string name="recentCalls_empty">"Il registro chiamate è vuoto."</string>
<string name="imei">"IMEI"</string>
@@ -126,32 +129,37 @@
<string name="simContacts_emptyLoading">"Caricamento da SIM..."</string>
<string name="simContacts_title">"Contatti SIM"</string>
<string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Sincronizza i tuoi contatti Google."</font>" "\n"Dopo la sincronizzazione con il telefono, i tuoi contatti saranno sempre a tua disposizione."</string>
- <string name="noContactsHelpText">"Non esistono contatti."\n\n"Per aggiungere contatti, premi "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e seleziona:"\n\n" "\n<li><font fgcolor="#ffffffff"><b>"Modifica sincr. gruppi"</b></font>" per aggiungere contatti da un account Google nuovo o esistente"\n</li>\n" "\n<li><font fgcolor="#ffffffff"><b>"Nuovo contatto"</b></font>" per creare un nuovo contatto"\n</li>\n" "\n<li><font fgcolor="#ffffffff"><b>"Importa contatti"</b></font>" per aggiungere contatti dalla SIM"\n</li></string>
+ <string name="noContactsHelpText">"Non hai nessun contatto."\n\n"Per aggiungere dei contatti, premi "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e seleziona:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Nuovo contatto"</b></font>" per creare un nuovo contatto"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importa contatti"</b></font>" per aggiungere i contatti salvati sulla scheda SIM card"\n</li></string>
+ <string name="noContactsHelpTextWithSync">"Non hai nessun contatto."\n\n"Per aggiungere i contatti, premi "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" e seleziona:"\n" "\n<li><font fgcolor="#ffffffff"><b>"Modifica sincr. gruppi"</b></font>" per aggiungere contatti da un account Google nuovo o già esistente"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Nuovo contatto"</b></font>" per creare un contatto nuovo"\n</li>" "\n<li><font fgcolor="#ffffffff"><b>"Importa contatti"</b></font>" per aggiungere i contatti salvati sulla scheda SIM"\n</li></string>
<string name="seclectSyncGroups_title">"Seleziona i gruppi da sincronizzare"</string>
<string name="liveFolder_all_label">"Tutti i contatti"</string>
<string name="liveFolder_favorites_label">"Speciali"</string>
<string name="liveFolder_phones_label">"Telefoni"</string>
- <string name="dialer_useDtmfDialpad">"Usa la tastiera per la selezione a toni"</string>
+ <string name="dialer_useDtmfDialpad">"Usa tastierino per selezione a toni"</string>
<string name="dialer_returnToInCallScreen">"Torna alla chiamata in corso"</string>
- <string name="dialer_addAnotherCall">"Aggiungi chiamata"</string>
- <!-- no translation found for callDetailTitle (5340227785196217938) -->
- <skip />
- <!-- no translation found for toast_call_detail_error (7200975244804730096) -->
- <skip />
- <!-- no translation found for call_type (3213526349444862087) -->
- <skip />
- <!-- no translation found for type_incoming (6502076603836088532) -->
- <skip />
- <!-- no translation found for type_outgoing (343108709599392641) -->
- <skip />
- <!-- no translation found for type_missed (2720502601640509542) -->
- <skip />
- <!-- no translation found for call_time (5805575214626630975) -->
- <skip />
- <!-- no translation found for datetime_relative (2906207446040994658) -->
- <skip />
- <!-- no translation found for call_duration (3941950339482985532) -->
- <skip />
- <!-- no translation found for header_actions (229583643365836321) -->
- <skip />
+ <string name="dialer_addAnotherCall">"Aggiungi"</string>
+ <string name="callDetailTitle">"Dettagli chiamata"</string>
+ <string name="toast_call_detail_error">"Impossibile leggere i dettagli per la chiamata richiesta."</string>
+ <string name="call_type">"Tipo"</string>
+ <string name="type_incoming">"Chiamata in arrivo"</string>
+ <string name="type_outgoing">"Chiamata in uscita"</string>
+ <string name="type_missed">"Chiamata persa"</string>
+ <string name="call_time">"Ora"</string>
+ <string name="datetime_relative">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
+ <string name="call_duration">"Durata"</string>
+ <string name="header_actions">"Azioni"</string>
+ <string name="ringtone_spinner">"Suoneria: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
+ <string name="add_more_items">"Aggiungi altri elementi"</string>
+ <string name="actionCall">"Chiama n. <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionEmail">"Invia email a ind. <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionText">"Invia SMS a n. <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionChat">"Chatta su <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionMap">"Visualizza indirizzo <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionIncomingCall">"Chiamate in arrivo"</string>
+ <string name="detailIncomingCallsGoToVoicemail">"Il messaggio verrà inviato direttamente alla segreteria"</string>
+ <string name="detailsRingtone">"Impostato su <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</string>
+ <string name="callBack">"Richiama"</string>
+ <string name="callAgain">"Richiama"</string>
+ <string name="returnCall">"Chiama numero"</string>
+ <string name="callDetailsDurationFormat">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sec"</string>
</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 18a280e..117c015 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -16,6 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="contactsList">"連絡先"</string>
+ <!-- no translation found for launcherDialer (140610573639849799) -->
+ <skip />
<string name="shortcutContact">"連絡先"</string>
<string name="starredList">"スター付き"</string>
<string name="frequentList">"よく連絡する連絡先"</string>
@@ -23,9 +25,9 @@
<string name="viewContactTitle">"連絡先情報"</string>
<string name="viewContactDesription">"連絡先を表示"</string>
<string name="editContactDescription">"連絡先を編集"</string>
- <string name="insertContactDescription">"連絡先を作成"</string>
+ <string name="insertContactDescription">"連絡先を新規登録"</string>
<string name="searchHint">"連絡先を検索"</string>
- <string name="menu_newContact">"新しい連絡先"</string>
+ <string name="menu_newContact">"連絡先を新規登録"</string>
<string name="menu_viewContact">"連絡先を表示"</string>
<string name="menu_callNumber">"<xliff:g id="NAME">%s</xliff:g>さんに発信"</string>
<string name="menu_addStar">"お気に入りに追加"</string>
@@ -37,23 +39,20 @@
<string name="menu_sendSMS">"SMS/MMSを送信"</string>
<string name="menu_sendEmail">"メールを送信"</string>
<string name="menu_viewAddress">"地図でみる"</string>
- <string name="menu_makeDefaultNumber">"デフォルトの番号に設定"</string>
+ <string name="menu_makeDefaultNumber">"メインの番号に設定する"</string>
<string name="deleteConfirmation_title">"削除"</string>
<string name="deleteConfirmation">"この連絡先を削除します。"</string>
- <string name="menu_done">"保存"</string>
- <string name="menu_doNotSave">"変更を破棄"</string>
- <string name="button_save">"保存"</string>
- <string name="button_discard">"変更を破棄"</string>
- <string name="editContact_title_edit">"連絡先を編集"</string>
- <string name="editContact_title_insert">"新しい連絡先"</string>
- <string name="menu_addItem">"情報を追加"</string>
- <!-- no translation found for label_phonetic_name (2288082649573927286) -->
+ <string name="menu_done">"完了"</string>
+ <!-- no translation found for menu_doNotSave (2174577548513895144) -->
<skip />
+ <string name="editContact_title_edit">"連絡先を編集"</string>
+ <string name="editContact_title_insert">"連絡先を新規登録"</string>
+ <string name="menu_addItem">"情報を追加"</string>
+ <string name="label_phonetic_name">"音声"</string>
<string name="label_notes">"メモ"</string>
<string name="label_ringtone">"着信音"</string>
<string name="ghostData_name">"名前"</string>
- <!-- no translation found for ghostData_phonetic_name (7852749081984070902) -->
- <skip />
+ <string name="ghostData_phonetic_name">"音声名"</string>
<string name="ghostData_company">"会社"</string>
<string name="ghostData_title">"役職"</string>
<string name="ghostData_im">"IM名"</string>
@@ -61,97 +60,113 @@
<string name="ghostData_phone">"電話番号"</string>
<string name="ghostData_email">"メールアドレス"</string>
<string name="ghostData_postal">"住所"</string>
- <string name="invalidContactMessage">"連絡先が存在しません。"</string>
- <string name="pickerNewContactHeader">"新しい連絡先を登録"</string>
- <string name="selectLabel">"ラベルを選択"</string>
+ <string name="invalidContactMessage">"この連絡先は消去されています。"</string>
+ <string name="pickerNewContactHeader">"連絡先を新規登録"</string>
+ <string name="selectLabel">"選択してください"</string>
<string name="phoneLabelsGroup">"電話番号"</string>
<string name="emailLabelsGroup">"メール"</string>
<string name="imLabelsGroup">"IM"</string>
<string name="postalLabelsGroup">"住所"</string>
<string name="otherLabelsGroup">"その他"</string>
<string-array name="otherLabels">
- <item>"組織"</item>
+ <item>"勤務先情報"</item>
<item>"メモ"</item>
</string-array>
<string name="errorDialogTitle">"写真なし"</string>
- <string name="photoPickerNotFoundText">"使用できる写真が携帯電話にありません。"</string>
+ <string name="photoPickerNotFoundText">"写真がありません。"</string>
<string name="attachToContact">"連絡先のアイコン"</string>
<string name="customLabelPickerTitle">"新しいラベル名"</string>
<string name="menu_displayGroup">"グループを表示"</string>
<string name="syncGroupPreference">"同期グループを編集"</string>
<string name="importFromSim">"連絡先をインポート"</string>
- <string name="send_to_voicemail_checkbox">"電話はボイスメールに送信する"</string>
- <string name="send_to_voicemail_view">"着信はボイスメールに直接転送されます。"</string>
- <string name="default_ringtone">"デフォルト"</string>
+ <string name="send_to_voicemail_checkbox">"ボイスメールに直接電話します。"</string>
+ <string name="send_to_voicemail_view">"この番号にかけるとボイスメールに送信されます。"</string>
+ <string name="default_ringtone">"端末既定"</string>
<string name="addPicture">"アイコンを追加"</string>
<string name="removePicture">"アイコンを削除"</string>
<string name="noContacts">"連絡先がありません。"</string>
- <string name="noContactsWithPhoneNumbers">"電話番号のある連絡先がありません。"</string>
- <string name="noFavorites">"お気に入りがありません。"</string>
+ <string name="noContactsWithPhoneNumbers">"電話番号付きの連絡先はありません。"</string>
+ <string name="noFavorites">"お気に入りなし"</string>
<string name="select_group_title">"グループ"</string>
<string name="groupEmpty">"「<xliff:g id="GROUPNAME">%s</xliff:g>」グループには何も登録されていません。"</string>
<string name="showAllGroups">"すべての連絡先"</string>
- <string name="syncAllGroups">"全連絡先の同期を取る"</string>
+ <string name="syncAllGroups">"全連絡先を同期"</string>
<string name="groupNameMyContacts">"Myコンタクト"</string>
<string name="groupNameWithPhones">"電話番号のある連絡先"</string>
<string name="contactCreatedToast">"連絡先を作成しました。"</string>
<string name="contactSavedToast">"連絡先を保存しました。"</string>
<string name="listSeparatorCallNumber">"電話をかける"</string>
+ <string name="listSeparatorCallNumber_edit">"電話番号"</string>
<string name="listSeparatorSendSmsMms">"SMS/MMSを送信"</string>
<string name="listSeparatorSendEmail">"メールを送信"</string>
+ <string name="listSeparatorSendEmail_edit">"メールアドレス"</string>
<string name="listSeparatorSendIm">"インスタントメッセージを送信"</string>
- <string name="listSeparatorMapAddress">"住所を地図でみる"</string>
- <string name="listSeparatorOrganizations">"組織"</string>
+ <string name="listSeparatorSendIm_edit">"チャットアドレス"</string>
+ <string name="listSeparatorMapAddress">"地図でみる"</string>
+ <string name="listSeparatorMapAddress_edit">"住所"</string>
+ <string name="listSeparatorOrganizations">"勤務先情報"</string>
<string name="listSeparatorOtherInformation">"その他の情報"</string>
+ <string name="listSeparatorOtherInformation_edit">"その他のオプション"</string>
+ <string name="listSeparatorMore_edit">"開く"</string>
<string name="contactsIconLabel">"連絡先"</string>
<string name="contactsFavoritesLabel">"お気に入り"</string>
<string name="dialerIconLabel">"通話"</string>
- <string name="recentCallsIconLabel">"通話ログ"</string>
+ <string name="recentCallsIconLabel">"通話履歴"</string>
<string name="liveFolderAll">"すべての連絡先"</string>
<string name="liveFolderFavorites">"スター付きの連絡先"</string>
<string name="liveFolderPhone">"電話番号のある連絡先"</string>
<string name="menu_sendTextMessage">"SMSメッセージを送信"</string>
<string name="recentCalls_callNumber">"<xliff:g id="NAME">%s</xliff:g>さんに発信"</string>
- <string name="recentCalls_editNumberBeforeCall">"番号を編集して発信"</string>
+ <string name="recentCalls_editNumberBeforeCall">"発信前に番号を編集"</string>
<string name="recentCalls_addToContact">"連絡先に追加"</string>
- <string name="recentCalls_removeFromRecentList">"通話ログを削除"</string>
- <string name="recentCalls_deleteAll">"すべてのログをクリア"</string>
- <string name="recentCalls_empty">"通話ログはありません。"</string>
- <string name="imei">"IMEI"</string>
+ <string name="recentCalls_removeFromRecentList">"通話履歴から消去"</string>
+ <string name="recentCalls_deleteAll">"通話履歴を全件消去"</string>
+ <string name="recentCalls_empty">"通話履歴なし"</string>
+ <string name="imei">"IMEI(端末識別番号)"</string>
<string name="voicemail">"ボイスメール"</string>
<string name="unknown">"不明"</string>
<string name="private_num">"非通知番号"</string>
- <string name="dialerKeyboardHintText">"番号をキーボードから入力してください"</string>
- <string name="dialerDialpadHintText">"ダイヤルして通話を追加"</string>
- <string name="simContacts_emptyLoading">"SIMカードからロードしています..."</string>
+ <string name="dialerKeyboardHintText">"キーボードで番号を入力してください"</string>
+ <string name="dialerDialpadHintText">"ダイヤルして追加"</string>
+ <string name="simContacts_emptyLoading">"SIMカードから読み取り中..."</string>
<string name="simContacts_title">"SIMカードの連絡先"</string>
- <string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Googleコンタクトと同期を取ります。"</font>" "\n"同期が終わると、いつでもこの携帯電話で連絡先を使用できます。"</string>
- <string name="noContactsHelpText">"登録されている連絡先がありません。"\n\n"連絡先を追加するには["<font fgcolor="#ffffffff"><b>"メニュー"</b></font>"]を押して、次のどれかを選択します。"\n\n" "\n<li>"["<font fgcolor="#ffffffff"><b>"同期グループを編集"</b></font>"]-新規または既存のGoogleアカウントから追加する場合"\n</li>\n" "\n<li>"["<font fgcolor="#ffffffff"><b>"新しい連絡先"</b></font>"]-最初から新しい連絡先を作成する場合"\n</li>\n" "\n<li>"["<font fgcolor="#ffffffff"><b>"連絡先をインポート"</b></font>"]-SIMカードから連絡先を追加する場合"\n</li></string>
- <string name="seclectSyncGroups_title">"同期を取るグループを選択"</string>
+ <string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Googleアカウントの連絡先同期"</font>" "\n"Googleサービスで使っている連絡先をこの携帯電話でも使えるようになります。"</string>
+ <!-- no translation found for noContactsHelpText (2249195687463896364) -->
+ <skip />
+ <!-- no translation found for noContactsHelpTextWithSync (4927701496550314555) -->
+ <skip />
+ <string name="seclectSyncGroups_title">"同期するグループを選択"</string>
<string name="liveFolder_all_label">"すべての連絡先"</string>
<string name="liveFolder_favorites_label">"スター付き"</string>
<string name="liveFolder_phones_label">"電話"</string>
<string name="dialer_useDtmfDialpad">"プッシュホン式キーパッドを使う"</string>
<string name="dialer_returnToInCallScreen">"保留中の通話に戻る"</string>
<string name="dialer_addAnotherCall">"別の通話を追加"</string>
- <!-- no translation found for callDetailTitle (5340227785196217938) -->
+ <string name="callDetailTitle">"通話詳細"</string>
+ <string name="toast_call_detail_error">"通話要求の詳細が読み込めませんでした。"</string>
+ <string name="call_type">"入力"</string>
+ <string name="type_incoming">"通話着信"</string>
+ <string name="type_outgoing">"通話送信"</string>
+ <string name="type_missed">"不在着信"</string>
+ <string name="call_time">"時間"</string>
+ <string name="datetime_relative">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
+ <string name="call_duration">"経過時間"</string>
+ <string name="header_actions">"操作"</string>
+ <string name="ringtone_spinner">"着信音: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
+ <string name="add_more_items">"その他の項目を追加"</string>
+ <string name="actionCall">"<xliff:g id="TYPE">%s</xliff:g>に発信"</string>
+ <string name="actionEmail">"<xliff:g id="TYPE">%s</xliff:g>にメールを送信"</string>
+ <string name="actionText">"<xliff:g id="TYPE">%s</xliff:g>にテキストを送信"</string>
+ <string name="actionChat">"<xliff:g id="TYPE">%s</xliff:g>を使用してチャット"</string>
+ <string name="actionMap">"<xliff:g id="TYPE">%s</xliff:g>の住所を表示"</string>
+ <string name="actionIncomingCall">"着信"</string>
+ <string name="detailIncomingCallsGoToVoicemail">"直接ボイスメールに送信します"</string>
+ <string name="detailsRingtone">"<xliff:g id="RINGTONE_NAME">%s</xliff:g>に設定"</string>
+ <string name="callBack">"コールバック"</string>
+ <!-- no translation found for callAgain (3197312117049874778) -->
<skip />
- <!-- no translation found for toast_call_detail_error (7200975244804730096) -->
+ <!-- no translation found for returnCall (8171961914203617813) -->
<skip />
- <!-- no translation found for call_type (3213526349444862087) -->
- <skip />
- <!-- no translation found for type_incoming (6502076603836088532) -->
- <skip />
- <!-- no translation found for type_outgoing (343108709599392641) -->
- <skip />
- <!-- no translation found for type_missed (2720502601640509542) -->
- <skip />
- <!-- no translation found for call_time (5805575214626630975) -->
- <skip />
- <!-- no translation found for datetime_relative (2906207446040994658) -->
- <skip />
- <!-- no translation found for call_duration (3941950339482985532) -->
- <skip />
- <!-- no translation found for header_actions (229583643365836321) -->
+ <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
<skip />
</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
new file mode 100644
index 0000000..aafe0d0
--- /dev/null
+++ b/res/values-ko/strings.xml
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="contactsList">"연락처"</string>
+ <!-- no translation found for launcherDialer (140610573639849799) -->
+ <skip />
+ <string name="shortcutContact">"연락처"</string>
+ <string name="starredList">"별표 표시된 연락처"</string>
+ <string name="frequentList">"자주 거는 전화"</string>
+ <string name="strequentList">"자주 거는 전화"</string>
+ <string name="viewContactTitle">"연락처 상세정보"</string>
+ <string name="viewContactDesription">"연락처 보기"</string>
+ <string name="editContactDescription">"연락처 편집"</string>
+ <string name="insertContactDescription">"연락처 만들기"</string>
+ <string name="searchHint">"연락처 검색"</string>
+ <string name="menu_newContact">"새 연락처"</string>
+ <string name="menu_viewContact">"연락처 보기"</string>
+ <string name="menu_callNumber">"<xliff:g id="NAME">%s</xliff:g>에게 전화걸기"</string>
+ <string name="menu_addStar">"즐겨찾기에 추가"</string>
+ <string name="menu_removeStar">"즐겨찾기에서 삭제"</string>
+ <string name="menu_showBarcode">"바코드 표시"</string>
+ <string name="menu_editContact">"연락처 편집"</string>
+ <string name="menu_deleteContact">"연락처 삭제"</string>
+ <string name="menu_call">"전화걸기"</string>
+ <string name="menu_sendSMS">"SMS/MMS 보내기"</string>
+ <string name="menu_sendEmail">"이메일 보내기"</string>
+ <string name="menu_viewAddress">"지도상의 주소"</string>
+ <string name="menu_makeDefaultNumber">"기본 번호로 설정"</string>
+ <string name="deleteConfirmation_title">"삭제"</string>
+ <string name="deleteConfirmation">"연락처가 삭제됩니다."</string>
+ <string name="menu_done">"완료"</string>
+ <!-- no translation found for menu_doNotSave (2174577548513895144) -->
+ <skip />
+ <string name="editContact_title_edit">"연락처 편집"</string>
+ <string name="editContact_title_insert">"새 연락처"</string>
+ <string name="menu_addItem">"추가정보"</string>
+ <string name="label_phonetic_name">"소리나는 대로"</string>
+ <string name="label_notes">"메모"</string>
+ <string name="label_ringtone">"벨소리"</string>
+ <string name="ghostData_name">"이름"</string>
+ <string name="ghostData_phonetic_name">"소리나는 대로의 이름"</string>
+ <string name="ghostData_company">"회사"</string>
+ <string name="ghostData_title">"직급"</string>
+ <string name="ghostData_im">"IM 이름"</string>
+ <string name="ghostData_notes">"내 메모"</string>
+ <string name="ghostData_phone">"전화번호"</string>
+ <string name="ghostData_email">"이메일 주소"</string>
+ <string name="ghostData_postal">"주소"</string>
+ <string name="invalidContactMessage">"연락처가 없습니다."</string>
+ <string name="pickerNewContactHeader">"새 연락처 만들기"</string>
+ <string name="selectLabel">"라벨 선택"</string>
+ <string name="phoneLabelsGroup">"전화"</string>
+ <string name="emailLabelsGroup">"이메일"</string>
+ <string name="imLabelsGroup">"IM"</string>
+ <string name="postalLabelsGroup">"주소"</string>
+ <string name="otherLabelsGroup">"기타"</string>
+ <string-array name="otherLabels">
+ <item>"조직"</item>
+ <item>"메모"</item>
+ </string-array>
+ <string name="errorDialogTitle">"사진 없음"</string>
+ <string name="photoPickerNotFoundText">"전화기에 사진이 없습니다."</string>
+ <string name="attachToContact">"연락처 아이콘"</string>
+ <string name="customLabelPickerTitle">"맞춤 라벨 이름"</string>
+ <string name="menu_displayGroup">"그룹 표시"</string>
+ <string name="syncGroupPreference">"동기화 그룹 편집"</string>
+ <string name="importFromSim">"연락처 가져오기"</string>
+ <string name="send_to_voicemail_checkbox">"음성메일에 직접 전화걸기"</string>
+ <string name="send_to_voicemail_view">"수신전화가 바로 음성메일로 연결됩니다."</string>
+ <string name="default_ringtone">"기본 벨소리"</string>
+ <string name="addPicture">"사진 추가"</string>
+ <string name="removePicture">"사진 제거"</string>
+ <string name="noContacts">"연락처가 없습니다."</string>
+ <string name="noContactsWithPhoneNumbers">"전화번호가 포함된 연락처가 없습니다."</string>
+ <string name="noFavorites">"자주 거는 전화가 없습니다."</string>
+ <string name="select_group_title">"그룹"</string>
+ <string name="groupEmpty">"\"<xliff:g id="GROUPNAME">%s</xliff:g>\" 그룹이 비었습니다."</string>
+ <string name="showAllGroups">"모든 연락처"</string>
+ <string name="syncAllGroups">"모든 연락처 동기화"</string>
+ <string name="groupNameMyContacts">"내 연락처"</string>
+ <string name="groupNameWithPhones">"전화번호가 포함된 연락처"</string>
+ <string name="contactCreatedToast">"연락처가 생성되었습니다."</string>
+ <string name="contactSavedToast">"연락처가 저장되었습니다."</string>
+ <string name="listSeparatorCallNumber">"전화번호"</string>
+ <string name="listSeparatorCallNumber_edit">"전화번호"</string>
+ <string name="listSeparatorSendSmsMms">"SMS/MMS 보내기"</string>
+ <string name="listSeparatorSendEmail">"이메일 보내기"</string>
+ <string name="listSeparatorSendEmail_edit">"이메일 주소"</string>
+ <string name="listSeparatorSendIm">"인스턴트 메시지 보내기"</string>
+ <string name="listSeparatorSendIm_edit">"채팅 주소"</string>
+ <string name="listSeparatorMapAddress">"지도상의 주소"</string>
+ <string name="listSeparatorMapAddress_edit">"우편 주소"</string>
+ <string name="listSeparatorOrganizations">"조직"</string>
+ <string name="listSeparatorOtherInformation">"기타 정보"</string>
+ <string name="listSeparatorOtherInformation_edit">"기타 옵션"</string>
+ <string name="listSeparatorMore_edit">"더보기"</string>
+ <string name="contactsIconLabel">"연락처"</string>
+ <string name="contactsFavoritesLabel">"자주 거는 전화"</string>
+ <string name="dialerIconLabel">"전화걸기"</string>
+ <string name="recentCallsIconLabel">"통화기록"</string>
+ <string name="liveFolderAll">"전체 주소록"</string>
+ <string name="liveFolderFavorites">"별표 표시된 주소"</string>
+ <string name="liveFolderPhone">"전화번호 주소록"</string>
+ <string name="menu_sendTextMessage">"SMS 메시지 보내기"</string>
+ <string name="recentCalls_callNumber">"<xliff:g id="NAME">%s</xliff:g>에게 전화걸기"</string>
+ <string name="recentCalls_editNumberBeforeCall">"전화 걸기 전에 번호 편집"</string>
+ <string name="recentCalls_addToContact">"연락처에 추가"</string>
+ <string name="recentCalls_removeFromRecentList">"통화기록에서 제거"</string>
+ <string name="recentCalls_deleteAll">"통화기록 지우기"</string>
+ <string name="recentCalls_empty">"통화기록이 없습니다."</string>
+ <string name="imei">"IMEI"</string>
+ <string name="voicemail">"음성메일"</string>
+ <string name="unknown">"알 수 없음"</string>
+ <string name="private_num">"비공개 번호"</string>
+ <string name="dialerKeyboardHintText">"키보드를 사용하여 전화걸기"</string>
+ <string name="dialerDialpadHintText">"통화를 추가할 전화번호 입력"</string>
+ <string name="simContacts_emptyLoading">"SIM 카드에서 로드 중…"</string>
+ <string name="simContacts_title">"SIM 카드 연락처"</string>
+ <string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Google 연락처를 동기화하세요."</font>" "\n"연락처를 전화기로 동기화하면 어디에서나 연락처를 확인할 수 있습니다."</string>
+ <!-- no translation found for noContactsHelpText (2249195687463896364) -->
+ <skip />
+ <!-- no translation found for noContactsHelpTextWithSync (4927701496550314555) -->
+ <skip />
+ <string name="seclectSyncGroups_title">"동기화할 그룹 선택"</string>
+ <string name="liveFolder_all_label">"전체 주소록"</string>
+ <string name="liveFolder_favorites_label">"중요편지함"</string>
+ <string name="liveFolder_phones_label">"전화번호"</string>
+ <string name="dialer_useDtmfDialpad">"터치톤 키패드 사용"</string>
+ <string name="dialer_returnToInCallScreen">"진행 중인 통화로 돌아가기"</string>
+ <string name="dialer_addAnotherCall">"통화 추가"</string>
+ <string name="callDetailTitle">"통화 세부정보"</string>
+ <string name="toast_call_detail_error">"요청한 통화의 세부정보를 볼 수 없습니다."</string>
+ <string name="call_type">"유형"</string>
+ <string name="type_incoming">"수신통화"</string>
+ <string name="type_outgoing">"발신통화"</string>
+ <string name="type_missed">"부재중 전화"</string>
+ <string name="call_time">"시간"</string>
+ <string name="datetime_relative">"<xliff:g id="DATETIME">%1$s</xliff:g>(<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
+ <string name="call_duration">"통화시간"</string>
+ <string name="header_actions">"작업"</string>
+ <string name="ringtone_spinner">"벨소리: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
+ <string name="add_more_items">"항목 더 추가"</string>
+ <string name="actionCall">"<xliff:g id="TYPE">%s</xliff:g>(으)로 전화걸기"</string>
+ <string name="actionEmail">"<xliff:g id="TYPE">%s</xliff:g>(으)로 이메일 보내기"</string>
+ <string name="actionText">"<xliff:g id="TYPE">%s</xliff:g>(으)로 문자 보내기"</string>
+ <string name="actionChat">"<xliff:g id="TYPE">%s</xliff:g> 채팅"</string>
+ <string name="actionMap">"<xliff:g id="TYPE">%s</xliff:g> 주소 보기"</string>
+ <string name="actionIncomingCall">"수신 전화"</string>
+ <string name="detailIncomingCallsGoToVoicemail">"음성메일로 바로 보냄"</string>
+ <string name="detailsRingtone">"<xliff:g id="RINGTONE_NAME">%s</xliff:g>(으)로 설정"</string>
+ <string name="callBack">"콜백"</string>
+ <!-- no translation found for callAgain (3197312117049874778) -->
+ <skip />
+ <!-- no translation found for returnCall (8171961914203617813) -->
+ <skip />
+ <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
+ <skip />
+</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
new file mode 100644
index 0000000..3b47bac
--- /dev/null
+++ b/res/values-nb/strings.xml
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="contactsList">"Kontakter"</string>
+ <string name="launcherDialer">"Telefon"</string>
+ <string name="shortcutContact">"Kontakt"</string>
+ <string name="starredList">"Med stjerne"</string>
+ <string name="frequentList">"Mest brukt"</string>
+ <string name="strequentList">"Favoritter"</string>
+ <string name="viewContactTitle">"Egenskaper for kontakt"</string>
+ <string name="viewContactDesription">"Se på kontakt"</string>
+ <string name="editContactDescription">"Rediger kontakt"</string>
+ <string name="insertContactDescription">"Opprett kontakt"</string>
+ <string name="searchHint">"Søk i kontakter"</string>
+ <string name="menu_newContact">"Ny kontakt"</string>
+ <string name="menu_viewContact">"Se på kontakt"</string>
+ <string name="menu_callNumber">"Ring <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="menu_addStar">"Legg til som favoritt"</string>
+ <string name="menu_removeStar">"Fjern fra favoritter"</string>
+ <string name="menu_showBarcode">"Vis strekkode"</string>
+ <string name="menu_editContact">"Rediger kontakt"</string>
+ <string name="menu_deleteContact">"Slett kontakt"</string>
+ <string name="menu_call">"Ring"</string>
+ <string name="menu_sendSMS">"Send SMS/MMS"</string>
+ <string name="menu_sendEmail">"Send e-post"</string>
+ <string name="menu_viewAddress">"Se i kart"</string>
+ <string name="menu_makeDefaultNumber">"Gjør til foretrukket nummer"</string>
+ <string name="deleteConfirmation_title">"Slett"</string>
+ <string name="deleteConfirmation">"Denne kontakten vil bli slettet."</string>
+ <string name="menu_done">"Lagre"</string>
+ <!-- no translation found for menu_doNotSave (2174577548513895144) -->
+ <skip />
+ <string name="editContact_title_edit">"Rediger kontakt"</string>
+ <string name="editContact_title_insert">"Ny kontakt"</string>
+ <string name="menu_addItem">"Mer informasjon"</string>
+ <string name="label_phonetic_name">"Fonetisk"</string>
+ <string name="label_notes">"Notater"</string>
+ <string name="label_ringtone">"Ringetone"</string>
+ <string name="ghostData_name">"For- og etternavn"</string>
+ <string name="ghostData_phonetic_name">"Fonetisk navn"</string>
+ <string name="ghostData_company">"Firma"</string>
+ <string name="ghostData_title">"Stilling"</string>
+ <string name="ghostData_im">"Lynmeldingsnavn"</string>
+ <string name="ghostData_notes">"Mine notater"</string>
+ <string name="ghostData_phone">"Telefonnummer"</string>
+ <string name="ghostData_email">"E-postadresse"</string>
+ <string name="ghostData_postal">"Postadresse"</string>
+ <string name="invalidContactMessage">"Kontakten finnes ikke."</string>
+ <string name="pickerNewContactHeader">"Opprett ny kontakt"</string>
+ <string name="selectLabel">"Velg etikett"</string>
+ <string name="phoneLabelsGroup">"Telefon"</string>
+ <string name="emailLabelsGroup">"E-post"</string>
+ <string name="imLabelsGroup">"Lynmeldinger"</string>
+ <string name="postalLabelsGroup">"Postadresse"</string>
+ <string name="otherLabelsGroup">"Annet"</string>
+ <string-array name="otherLabels">
+ <item>"Organisasjon"</item>
+ <item>"Notat"</item>
+ </string-array>
+ <string name="errorDialogTitle">"Ingen bilder"</string>
+ <string name="photoPickerNotFoundText">"Det er ingen bilder på telefonen."</string>
+ <string name="attachToContact">"Kontaktikon"</string>
+ <string name="customLabelPickerTitle">"Egendefinert etikett"</string>
+ <string name="menu_displayGroup">"Vis gruppe"</string>
+ <string name="syncGroupPreference">"Rediger synkroniserte grupper"</string>
+ <string name="importFromSim">"Importer kontakter"</string>
+ <string name="send_to_voicemail_checkbox">"Send anrop direkte til telefonsvarer."</string>
+ <string name="send_to_voicemail_view">"Anrop blir sendt direkte til telefonsvarer."</string>
+ <string name="default_ringtone">"Standardvalg"</string>
+ <string name="addPicture">"Legg til ikon"</string>
+ <string name="removePicture">"Fjern ikon"</string>
+ <string name="noContacts">"Ingen kontakter."</string>
+ <string name="noContactsWithPhoneNumbers">"Ingen kontakter med telefonnummer."</string>
+ <string name="noFavorites">"Ingen favoritter."</string>
+ <string name="select_group_title">"Grupper"</string>
+ <string name="groupEmpty">"Gruppen \"<xliff:g id="GROUPNAME">%s</xliff:g>\" er tom."</string>
+ <string name="showAllGroups">"Alle kontakter"</string>
+ <string name="syncAllGroups">"Synkroniser alle kontakter"</string>
+ <string name="groupNameMyContacts">"Mine kontakter"</string>
+ <string name="groupNameWithPhones">"Kontakter med telefonnummer"</string>
+ <string name="contactCreatedToast">"Kontakt opprettet."</string>
+ <string name="contactSavedToast">"Kontakt lagret."</string>
+ <string name="listSeparatorCallNumber">"Ring nummer"</string>
+ <string name="listSeparatorCallNumber_edit">"Telefonnummer"</string>
+ <string name="listSeparatorSendSmsMms">"Send SMS/MMS"</string>
+ <string name="listSeparatorSendEmail">"Send e-post"</string>
+ <string name="listSeparatorSendEmail_edit">"E-postadresser"</string>
+ <string name="listSeparatorSendIm">"Send lynmelding"</string>
+ <string name="listSeparatorSendIm_edit">"Prateadresser"</string>
+ <string name="listSeparatorMapAddress">"Se i kart"</string>
+ <string name="listSeparatorMapAddress_edit">"Postadresser"</string>
+ <string name="listSeparatorOrganizations">"Organisasjoner"</string>
+ <string name="listSeparatorOtherInformation">"Annen informasjon"</string>
+ <string name="listSeparatorOtherInformation_edit">"Andre alternativer"</string>
+ <string name="listSeparatorMore_edit">"Mer"</string>
+ <string name="contactsIconLabel">"Alle"</string>
+ <string name="contactsFavoritesLabel">"Vanlige"</string>
+ <string name="dialerIconLabel">"Telefon"</string>
+ <string name="recentCallsIconLabel">"Logg"</string>
+ <string name="liveFolderAll">"Alle kontakter"</string>
+ <string name="liveFolderFavorites">"Kontakter med stjerne"</string>
+ <string name="liveFolderPhone">"Kontakter med telefonnummer"</string>
+ <string name="menu_sendTextMessage">"Send SMS-melding"</string>
+ <string name="recentCalls_callNumber">"Ring <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="recentCalls_editNumberBeforeCall">"Rediger nummer før anrop"</string>
+ <string name="recentCalls_addToContact">"Legg til kontakter"</string>
+ <string name="recentCalls_removeFromRecentList">"Fjern fra anropslogg"</string>
+ <string name="recentCalls_deleteAll">"Nullstill anropslogg"</string>
+ <string name="recentCalls_empty">"Anropsloggen er tom."</string>
+ <string name="imei">"IMEI"</string>
+ <string name="voicemail">"Telefonsvarer"</string>
+ <string name="unknown">"Ukjent"</string>
+ <string name="private_num">"Skjult nummer"</string>
+ <string name="dialerKeyboardHintText">"Bruk tastaturet for å ringe"</string>
+ <string name="dialerDialpadHintText">"Ring for å legge til en samtale"</string>
+ <string name="simContacts_emptyLoading">"Henter fra SIM-kort…"</string>
+ <string name="simContacts_title">"Kontakter på SIM-kort"</string>
+ <string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Synkroniser Google-kontaktene dine!"</font>" "\n"Etter å ha synkronisert telefonen vil kontaktene dine bli tilgjengelig overalt."</string>
+ <!-- no translation found for noContactsHelpText (2249195687463896364) -->
+ <skip />
+ <!-- no translation found for noContactsHelpTextWithSync (4927701496550314555) -->
+ <skip />
+ <string name="seclectSyncGroups_title">"Velg grupper som skal synkroniseres"</string>
+ <string name="liveFolder_all_label">"Alle kontakter"</string>
+ <string name="liveFolder_favorites_label">"Med stjerne"</string>
+ <string name="liveFolder_phones_label">"Telefoner"</string>
+ <string name="dialer_useDtmfDialpad">"Bruk tonetastatur"</string>
+ <string name="dialer_returnToInCallScreen">"Gå tilbake til pågående samtale"</string>
+ <string name="dialer_addAnotherCall">"Legg til en samtale"</string>
+ <string name="callDetailTitle">"Samtaleinformasjon"</string>
+ <string name="toast_call_detail_error">"Kunne ikke lese informasjon for forespurt samtale."</string>
+ <string name="call_type">"Type"</string>
+ <string name="type_incoming">"Innkommende samtale"</string>
+ <string name="type_outgoing">"Utgående samtale"</string>
+ <string name="type_missed">"Tapt anrop"</string>
+ <string name="call_time">"Tid"</string>
+ <string name="datetime_relative">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
+ <string name="call_duration">"Varighet"</string>
+ <string name="header_actions">"Handlinger"</string>
+ <string name="ringtone_spinner">"Ringetone: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
+ <string name="add_more_items">"Legg til flere elementer"</string>
+ <string name="actionCall">"Ring <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionEmail">"Send e-post til <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionText">"Send SMS til <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionChat">"Prat over <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionMap">"Vis <xliff:g id="TYPE">%s</xliff:g>adresse"</string>
+ <string name="actionIncomingCall">"Innkommende samtaler"</string>
+ <string name="detailIncomingCallsGoToVoicemail">"Vil bli sendt rett til telefonsvarer"</string>
+ <string name="detailsRingtone">"Sett til <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</string>
+ <string name="callBack">"Ring tilbake"</string>
+ <!-- no translation found for callAgain (3197312117049874778) -->
+ <skip />
+ <!-- no translation found for returnCall (8171961914203617813) -->
+ <skip />
+ <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
+ <skip />
+</resources>
diff --git a/res/values-nl-rNL/strings.xml b/res/values-nl-rNL/strings.xml
deleted file mode 100644
index 09ce1bb..0000000
--- a/res/values-nl-rNL/strings.xml
+++ /dev/null
@@ -1,177 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="contactsList">"Contacten"</string>
- <!-- no translation found for shortcutContact (1520089872483067797) -->
- <skip />
- <string name="starredList">"Met ster"</string>
- <string name="frequentList">"Regelmatig"</string>
- <string name="strequentList">"Favorieten"</string>
- <!-- no translation found for viewContactTitle (5340316765801746261) -->
- <skip />
- <!-- no translation found for viewContactDesription (5593543465183236254) -->
- <skip />
- <!-- no translation found for editContactDescription (207393633337592309) -->
- <skip />
- <!-- no translation found for insertContactDescription (8392185611221432248) -->
- <skip />
- <string name="searchHint">"Contacten zoeken"</string>
- <string name="menu_newContact">"Nieuw contact"</string>
- <string name="menu_viewContact">"Contact weergeven"</string>
- <!-- unknown placeholder CONTACT in menu_callNumber -->
- <skip />
- <string name="menu_addStar">"Ster toevoegen"</string>
- <string name="menu_removeStar">"Ster verwijderen"</string>
- <!-- no translation found for menu_showBarcode (4627916987700748636) -->
- <skip />
- <string name="menu_editContact">"Contact bewerken"</string>
- <string name="menu_deleteContact">"Contact verwijderen"</string>
- <string name="menu_call">"Bellen"</string>
- <string name="menu_sendSMS">"Tekst verzenden"</string>
- <string name="menu_sendEmail">"E-mail verzenden"</string>
- <string name="menu_viewAddress">"Kaartadres"</string>
- <string name="menu_makeDefaultNumber">"Standaardnummer maken"</string>
- <!-- no translation found for deleteConfirmation_title (1628057421142368583) -->
- <skip />
- <string name="deleteConfirmation">"Deze contact verwijderen?"</string>
- <string name="menu_done">"Opslaan"</string>
- <string name="menu_doNotSave">"Wijzigingen negeren"</string>
- <string name="button_save">"Opslaan"</string>
- <string name="button_discard">"Wijzigingen negeren"</string>
- <string name="editContact_title_edit">"Contact bewerken"</string>
- <string name="editContact_title_insert">"Nieuw contact"</string>
- <string name="menu_addItem">"Meer toevoegen"</string>
- <string name="label_notes">"Opmerkingen"</string>
- <!-- no translation found for label_ringtone (1269538172838343970) -->
- <skip />
- <string name="ghostData_name">"Eerste en laatste"</string>
- <string name="ghostData_company">"Bedrijf"</string>
- <string name="ghostData_title">"Positie"</string>
- <string name="ghostData_im">"IM-naam"</string>
- <string name="ghostData_notes">"Mijn opmerking"</string>
- <string name="ghostData_phone">"Telefoonnummer"</string>
- <string name="ghostData_email">"E-mailadres"</string>
- <!-- unknown placeholder BREAK_0 in ghostData_postal -->
- <skip />
- <string name="invalidContactMessage">"Contacten moeten namen hebben"</string>
- <string name="pickerNewContactHeader">"Nieuwe contact maken"</string>
- <string name="selectLabel">"Label selecteren"</string>
- <string name="phoneLabelsGroup">"Telefoon"</string>
- <string name="emailLabelsGroup">"E-mail"</string>
- <string name="imLabelsGroup">"Expresbericht"</string>
- <string name="postalLabelsGroup">"Postadres"</string>
- <string name="otherLabelsGroup">"Overig"</string>
- <!-- no translation found for otherLabels:0 (3318569574569948132) -->
- <!-- no translation found for otherLabels:1 (3325413568383685728) -->
- <string name="errorDialogTitle">"Let op!"</string>
- <string name="photoPickerNotFoundText">"Geen afbeeldingen beschikbaar."</string>
- <string name="attachToContact">"Afbeelding contactpersoon "</string>
- <string name="customLabelPickerTitle">"Aangepast label"</string>
- <!-- no translation found for menu_displayGroup (2835746769742496686) -->
- <skip />
- <!-- no translation found for syncGroupPreference (759121296595419145) -->
- <skip />
- <string name="importFromSim">"Importeren van sim-kaart"</string>
- <!-- no translation found for alphabet (4977128516779796464) -->
- <skip />
- <!-- no translation found for send_to_voicemail_checkbox (1699633783417579410) -->
- <skip />
- <!-- no translation found for send_to_voicemail_view (4299389800446371057) -->
- <skip />
- <!-- no translation found for default_ringtone (3998437793418131562) -->
- <skip />
- <!-- no translation found for addPicture (7010902051370875352) -->
- <skip />
- <!-- no translation found for removePicture (2322840177008417519) -->
- <skip />
- <!-- no translation found for noContacts (7515781671301309298) -->
- <skip />
- <!-- no translation found for noContactsWithPhoneNumbers (3105170743499016241) -->
- <skip />
- <!-- no translation found for noFavorites (7957536428532225634) -->
- <skip />
- <!-- no translation found for select_group_title (8821785850959403592) -->
- <skip />
- <!-- no translation found for groupEmpty (1733723844723885242) -->
- <skip />
- <!-- no translation found for showAllGroups (4524662887308889400) -->
- <skip />
- <!-- no translation found for syncAllGroups (8415112909188430211) -->
- <skip />
- <!-- no translation found for groupNameMyContacts (1298661863710879264) -->
- <skip />
- <!-- no translation found for groupNameWithPhones (4051877952712463294) -->
- <skip />
- <!-- no translation found for contactCreatedToast (5309869712901550955) -->
- <skip />
- <!-- no translation found for contactSavedToast (1228932477738680325) -->
- <skip />
- <!-- no translation found for listSeparatorCallNumber (9142725721395758026) -->
- <skip />
- <!-- no translation found for listSeparatorSendSmsMms (8878062000446372333) -->
- <skip />
- <!-- no translation found for listSeparatorSendEmail (3813935531061488274) -->
- <skip />
- <!-- no translation found for listSeparatorSendIm (3885045096980470847) -->
- <skip />
- <!-- no translation found for listSeparatorMapAddress (7749519405208811410) -->
- <skip />
- <!-- no translation found for listSeparatorOrganizations (5731454670822188295) -->
- <skip />
- <!-- no translation found for listSeparatorOtherInformation (3399084175925138065) -->
- <skip />
- <!-- no translation found for contactsIconLabel (392729648321810378) -->
- <skip />
- <!-- no translation found for contactsFavoritesLabel (6274307000699136596) -->
- <skip />
- <!-- no translation found for dialerIconLabel (396765298398417139) -->
- <skip />
- <!-- no translation found for recentCallsIconLabel (7432201162713288826) -->
- <skip />
- <!-- no translation found for liveFolderAll (5991510762804226223) -->
- <skip />
- <!-- no translation found for liveFolderFavorites (8755759874416875970) -->
- <skip />
- <!-- no translation found for liveFolderPhone (3440101264360244544) -->
- <skip />
- <!-- no translation found for menu_sendTextMessage (3055919380461974147) -->
- <skip />
- <!-- no translation found for recentCalls_callNumber (924407199258234369) -->
- <skip />
- <!-- no translation found for recentCalls_editNumberBeforeCall (7859145185424954030) -->
- <skip />
- <!-- no translation found for recentCalls_addToContact (6950267092567953305) -->
- <skip />
- <!-- no translation found for recentCalls_removeFromRecentList (5273789011391059975) -->
- <skip />
- <!-- no translation found for recentCalls_deleteAll (425798199678070888) -->
- <skip />
- <!-- no translation found for recentCalls_empty (7787624895504983911) -->
- <skip />
- <!-- no translation found for imei (1052536402066249452) -->
- <skip />
- <!-- no translation found for voicemail (1135686231023059817) -->
- <skip />
- <!-- no translation found for unknown (6231893925212017656) -->
- <skip />
- <!-- no translation found for private_num (3065614133902647350) -->
- <skip />
- <!-- no translation found for dialerKeyboardHintText (2013777173021862941) -->
- <skip />
- <!-- no translation found for simContacts_emptyLoading (4828419758306519589) -->
- <skip />
- <!-- no translation found for simContacts_title (4162577066960174009) -->
- <skip />
- <!-- no translation found for contactsSyncPlug (1549212649158409469) -->
- <skip />
- <!-- no translation found for noContactsHelpText (6155730972704522463) -->
- <skip />
- <!-- no translation found for seclectSyncGroups_title (7675331949118054911) -->
- <skip />
- <!-- no translation found for liveFolder_all_label (3716551598022430019) -->
- <skip />
- <!-- no translation found for liveFolder_favorites_label (9053985659909059395) -->
- <skip />
- <!-- no translation found for liveFolder_phones_label (8943901400107401868) -->
- <skip />
-</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 041c8c9..0d3a556 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -15,8 +15,10 @@
-->
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="contactsList">"Contactpersonen"</string>
- <string name="shortcutContact">"Contactpersonen"</string>
+ <string name="contactsList">"Contacten"</string>
+ <!-- no translation found for launcherDialer (140610573639849799) -->
+ <skip />
+ <string name="shortcutContact">"Contacten"</string>
<string name="starredList">"Met ster"</string>
<string name="frequentList">"Vaak"</string>
<string name="strequentList">"Favorieten"</string>
@@ -24,7 +26,7 @@
<string name="viewContactDesription">"Contactpersoon weergeven"</string>
<string name="editContactDescription">"Contactpersoon bewerken"</string>
<string name="insertContactDescription">"Contactpersoon maken"</string>
- <string name="searchHint">"Contactpersonen zoeken"</string>
+ <string name="searchHint">"Contacten zoeken"</string>
<string name="menu_newContact">"Nieuwe contactpersoon"</string>
<string name="menu_viewContact">"Contactpersoon weergeven"</string>
<string name="menu_callNumber">"<xliff:g id="NAME">%s</xliff:g> bellen"</string>
@@ -40,20 +42,17 @@
<string name="menu_makeDefaultNumber">"Als standaardnummer instellen"</string>
<string name="deleteConfirmation_title">"Verwijderen"</string>
<string name="deleteConfirmation">"Deze contactpersoon wordt verwijderd."</string>
- <string name="menu_done">"Opslaan"</string>
- <string name="menu_doNotSave">"Wijzigingen ongedaan maken"</string>
- <string name="button_save">"Opslaan"</string>
- <string name="button_discard">"Wijzigingen ongedaan maken"</string>
+ <string name="menu_done">"Gereed"</string>
+ <!-- no translation found for menu_doNotSave (2174577548513895144) -->
+ <skip />
<string name="editContact_title_edit">"Contactpersoon bewerken"</string>
<string name="editContact_title_insert">"Nieuwe contactpersoon"</string>
<string name="menu_addItem">"Meer informatie"</string>
- <!-- no translation found for label_phonetic_name (2288082649573927286) -->
- <skip />
+ <string name="label_phonetic_name">"Fonetisch"</string>
<string name="label_notes">"Opmerkingen"</string>
<string name="label_ringtone">"Beltoon"</string>
<string name="ghostData_name">"Voor- en achternaam"</string>
- <!-- no translation found for ghostData_phonetic_name (7852749081984070902) -->
- <skip />
+ <string name="ghostData_phonetic_name">"Fonetisch gespelde naam"</string>
<string name="ghostData_company">"Bedrijf"</string>
<string name="ghostData_title">"Positie"</string>
<string name="ghostData_im">"Chatnaam"</string>
@@ -78,45 +77,51 @@
<string name="attachToContact">"Pictogram voor contactpersoon"</string>
<string name="customLabelPickerTitle">"Aangepaste labelnaam"</string>
<string name="menu_displayGroup">"Groep weergeven"</string>
- <string name="syncGroupPreference">"Gesynchroniseerde groepen bewerken"</string>
- <string name="importFromSim">"Contactpersonen importeren"</string>
- <string name="send_to_voicemail_checkbox">"Oproepen rechtstreeks naar voicemail."</string>
+ <string name="syncGroupPreference">"Synchronisatiegroepen bewerken"</string>
+ <string name="importFromSim">"Contacten importeren"</string>
+ <string name="send_to_voicemail_checkbox">"Oproepen rechtstreeks naar voicemail verzenden"</string>
<string name="send_to_voicemail_view">"Oproepen worden rechtstreeks naar voicemail verzonden."</string>
<string name="default_ringtone">"Standaard"</string>
<string name="addPicture">"Pictogram toevoegen"</string>
<string name="removePicture">"Pictogram verwijderen"</string>
- <string name="noContacts">"Geen contactpersonen."</string>
- <string name="noContactsWithPhoneNumbers">"Geen contactpersonen met telefoonnummers."</string>
+ <string name="noContacts">"Geen contacten."</string>
+ <string name="noContactsWithPhoneNumbers">"Geen contacten met telefoonnummers."</string>
<string name="noFavorites">"Geen favorieten."</string>
<string name="select_group_title">"Groepen"</string>
<string name="groupEmpty">"De groep \'<xliff:g id="GROUPNAME">%s</xliff:g>\' is leeg."</string>
- <string name="showAllGroups">"Alle contactpersonen"</string>
- <string name="syncAllGroups">"Alle contactpersonen synchroniseren"</string>
- <string name="groupNameMyContacts">"Mijn contactpersonen"</string>
- <string name="groupNameWithPhones">"Contactpersonen met telefoonnummers"</string>
+ <string name="showAllGroups">"Alle contacten"</string>
+ <string name="syncAllGroups">"Alle contacten synchroniseren"</string>
+ <string name="groupNameMyContacts">"Mijn contacten"</string>
+ <string name="groupNameWithPhones">"Contacten met telefoonnummers"</string>
<string name="contactCreatedToast">"Contactpersoon is gemaakt."</string>
<string name="contactSavedToast">"Contactpersoon opgeslagen."</string>
<string name="listSeparatorCallNumber">"Nummer bellen"</string>
+ <string name="listSeparatorCallNumber_edit">"Telefoonnummers"</string>
<string name="listSeparatorSendSmsMms">"SMS/MMS verzenden"</string>
<string name="listSeparatorSendEmail">"E-mail verzenden"</string>
+ <string name="listSeparatorSendEmail_edit">"E-mailadressen"</string>
<string name="listSeparatorSendIm">"Chatbericht verzenden"</string>
+ <string name="listSeparatorSendIm_edit">"Chatadressen"</string>
<string name="listSeparatorMapAddress">"Adres op kaart weergeven"</string>
+ <string name="listSeparatorMapAddress_edit">"Postadressen"</string>
<string name="listSeparatorOrganizations">"Organisaties"</string>
<string name="listSeparatorOtherInformation">"Overige informatie"</string>
- <string name="contactsIconLabel">"Contactpersonen"</string>
+ <string name="listSeparatorOtherInformation_edit">"Andere opties"</string>
+ <string name="listSeparatorMore_edit">"Meer"</string>
+ <string name="contactsIconLabel">"Contacten"</string>
<string name="contactsFavoritesLabel">"Favorieten"</string>
- <string name="dialerIconLabel">"Dialer"</string>
- <string name="recentCallsIconLabel">"Gesprekslogboek"</string>
- <string name="liveFolderAll">"Alle contactpersonen"</string>
- <string name="liveFolderFavorites">"Contactpersonen met ster"</string>
- <string name="liveFolderPhone">"Contactpersonen met telefoonnummers"</string>
+ <string name="dialerIconLabel">"Telefoon"</string>
+ <string name="recentCallsIconLabel">"Gesprekken"</string>
+ <string name="liveFolderAll">"Alle contacten"</string>
+ <string name="liveFolderFavorites">"Contacten met ster"</string>
+ <string name="liveFolderPhone">"Contacten met telefoonnummers"</string>
<string name="menu_sendTextMessage">"SMS-bericht verzenden"</string>
<string name="recentCalls_callNumber">"<xliff:g id="NAME">%s</xliff:g> bellen"</string>
<string name="recentCalls_editNumberBeforeCall">"Nummer bewerken voor bellen"</string>
- <string name="recentCalls_addToContact">"Toevoegen aan contactpersonen"</string>
- <string name="recentCalls_removeFromRecentList">"Verwijderen uit gesprekslogboek"</string>
- <string name="recentCalls_deleteAll">"Gesprekslogboek wissen"</string>
- <string name="recentCalls_empty">"Gesprekslogboek is leeg."</string>
+ <string name="recentCalls_addToContact">"Toevoegen aan contacten"</string>
+ <string name="recentCalls_removeFromRecentList">"Verwijderen uit Gesprekken"</string>
+ <string name="recentCalls_deleteAll">"Gesprekken wissen"</string>
+ <string name="recentCalls_empty">"Gesprekken is leeg"</string>
<string name="imei">"IMEI"</string>
<string name="voicemail">"Voicemail"</string>
<string name="unknown">"Onbekend"</string>
@@ -124,34 +129,44 @@
<string name="dialerKeyboardHintText">"Toetsen gebruiken om te bellen"</string>
<string name="dialerDialpadHintText">"Bellen om een oproep toe te voegen"</string>
<string name="simContacts_emptyLoading">"Laden vanaf SIM-kaart..."</string>
- <string name="simContacts_title">"Contactpersonen op SIM-kaart"</string>
- <string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Synchroniseer uw Google-contactpersonen!"</font>" "\n"Zodra uw telefoon is gesynchroniseerd, heeft u uw contactpersonen altijd ter beschikking."</string>
- <string name="noContactsHelpText">"U heeft geen contactpersonen."\n\n"Als u contactpersonen wilt toevoegen, drukt u op "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" en selecteert u:"\n\n" "\n<li><font fgcolor="#ffffffff"><b>"Gesynchroniseerde groepen bewerken"</b></font>" als u contactpersonen vanuit een nieuwe of bestaande Google-account wilt toevoegen."\n</li>\n" "\n<li><font fgcolor="#ffffffff"><b>"Nieuwe contactpersoon"</b></font>" als u een nieuwe contactpersoon wilt invoeren"\n</li>\n" "\n<li><font fgcolor="#ffffffff"><b>"Contactpersonen importeren"</b></font>" als u contactpersonen wilt toevoegen vanaf uw SIM-kaart"\n</li></string>
+ <string name="simContacts_title">"Contacten op SIM-kaart"</string>
+ <string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Synchroniseer uw Google-contacten!"</font>" "\n"Zodra uw telefoon is gesynchroniseerd, heeft u uw contacten altijd ter beschikking."</string>
+ <!-- no translation found for noContactsHelpText (2249195687463896364) -->
+ <skip />
+ <!-- no translation found for noContactsHelpTextWithSync (4927701496550314555) -->
+ <skip />
<string name="seclectSyncGroups_title">"Groepen selecteren om te synchroniseren"</string>
- <string name="liveFolder_all_label">"Alle contactpersonen"</string>
+ <string name="liveFolder_all_label">"Alle contacten"</string>
<string name="liveFolder_favorites_label">"Met ster"</string>
<string name="liveFolder_phones_label">"Telefoons"</string>
<string name="dialer_useDtmfDialpad">"Toetsen voor toonkiezen gebruiken"</string>
<string name="dialer_returnToInCallScreen">"Terug naar actief gesprek"</string>
<string name="dialer_addAnotherCall">"Oproep toevoegen"</string>
- <!-- no translation found for callDetailTitle (5340227785196217938) -->
+ <string name="callDetailTitle">"Gespreksgegevens"</string>
+ <string name="toast_call_detail_error">"Kan geen gegevens over het gevraagde gesprek vinden."</string>
+ <string name="call_type">"Type"</string>
+ <string name="type_incoming">"Binnenkomende oproep"</string>
+ <string name="type_outgoing">"Uitgaand gesprek"</string>
+ <string name="type_missed">"Oproep gemist"</string>
+ <string name="call_time">"Tijd"</string>
+ <string name="datetime_relative">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
+ <string name="call_duration">"Duur"</string>
+ <string name="header_actions">"Acties"</string>
+ <string name="ringtone_spinner">"Beltoon: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
+ <string name="add_more_items">"Meer items toevoegen"</string>
+ <string name="actionCall">"<xliff:g id="TYPE">%s</xliff:g> bellen"</string>
+ <string name="actionEmail">"E-mail <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionText">"Tekst <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionChat">"Chatten via <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionMap">"<xliff:g id="TYPE">%s</xliff:g>-adres bekijken"</string>
+ <string name="actionIncomingCall">"Binnenkomende oproepen"</string>
+ <string name="detailIncomingCallsGoToVoicemail">"Wordt direct naar voicemail verzonden"</string>
+ <string name="detailsRingtone">"Ingesteld op <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</string>
+ <string name="callBack">"Terugbellen"</string>
+ <!-- no translation found for callAgain (3197312117049874778) -->
<skip />
- <!-- no translation found for toast_call_detail_error (7200975244804730096) -->
+ <!-- no translation found for returnCall (8171961914203617813) -->
<skip />
- <!-- no translation found for call_type (3213526349444862087) -->
- <skip />
- <!-- no translation found for type_incoming (6502076603836088532) -->
- <skip />
- <!-- no translation found for type_outgoing (343108709599392641) -->
- <skip />
- <!-- no translation found for type_missed (2720502601640509542) -->
- <skip />
- <!-- no translation found for call_time (5805575214626630975) -->
- <skip />
- <!-- no translation found for datetime_relative (2906207446040994658) -->
- <skip />
- <!-- no translation found for call_duration (3941950339482985532) -->
- <skip />
- <!-- no translation found for header_actions (229583643365836321) -->
+ <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
<skip />
</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 5917a28..feb5c8b 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -16,6 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="contactsList">"Kontakty"</string>
+ <!-- no translation found for launcherDialer (140610573639849799) -->
+ <skip />
<string name="shortcutContact">"Kontakt"</string>
<string name="starredList">"Oznaczony gwiazdką"</string>
<string name="frequentList">"Częste"</string>
@@ -40,20 +42,17 @@
<string name="menu_makeDefaultNumber">"Ustaw ten numer jako domyślny"</string>
<string name="deleteConfirmation_title">"Usuń"</string>
<string name="deleteConfirmation">"Ten kontakt zostanie usunięty."</string>
- <string name="menu_done">"Zapisz"</string>
- <string name="menu_doNotSave">"Odrzuć zmiany"</string>
- <string name="button_save">"Zapisz"</string>
- <string name="button_discard">"Odrzuć zmiany"</string>
+ <string name="menu_done">"Gotowe"</string>
+ <!-- no translation found for menu_doNotSave (2174577548513895144) -->
+ <skip />
<string name="editContact_title_edit">"Edytuj kontakt"</string>
<string name="editContact_title_insert">"Nowy kontakt"</string>
<string name="menu_addItem">"Więcej informacji"</string>
- <!-- no translation found for label_phonetic_name (2288082649573927286) -->
- <skip />
+ <string name="label_phonetic_name">"Fonetycznie"</string>
<string name="label_notes">"Notatki"</string>
<string name="label_ringtone">"Dzwonek"</string>
<string name="ghostData_name">"Imię i nazwisko"</string>
- <!-- no translation found for ghostData_phonetic_name (7852749081984070902) -->
- <skip />
+ <string name="ghostData_phonetic_name">"Nazwisko (fonetycznie)"</string>
<string name="ghostData_company">"Firma"</string>
<string name="ghostData_title">"Pozycja"</string>
<string name="ghostData_im">"Nazwa w komunikatorze"</string>
@@ -78,9 +77,9 @@
<string name="attachToContact">"Ikona kontaktu"</string>
<string name="customLabelPickerTitle">"Nazwa etykiety niestandardowej"</string>
<string name="menu_displayGroup">"Wyświetl grupę"</string>
- <string name="syncGroupPreference">"Edytuj grupy synchronizacji"</string>
+ <string name="syncGroupPreference">"Synchronizacja grup"</string>
<string name="importFromSim">"Importuj kontakty"</string>
- <string name="send_to_voicemail_checkbox">"Kieruj połączenia bezpośrednio do poczty głosowej."</string>
+ <string name="send_to_voicemail_checkbox">"Przekieruj połączenia bezpośrednio na pocztę głosową"</string>
<string name="send_to_voicemail_view">"Połączenia są przekazywane bezpośrednio do poczty głosowej."</string>
<string name="default_ringtone">"Domyślny"</string>
<string name="addPicture">"Dodaj ikonę"</string>
@@ -97,18 +96,24 @@
<string name="contactCreatedToast">"Utworzono kontakt."</string>
<string name="contactSavedToast">"Kontakt został zapisany."</string>
<string name="listSeparatorCallNumber">"Wybierz numer"</string>
+ <string name="listSeparatorCallNumber_edit">"Numery telefonów"</string>
<string name="listSeparatorSendSmsMms">"Wyślij wiadomość SMS/MMS"</string>
<string name="listSeparatorSendEmail">"Wyślij wiadomość e-mail"</string>
+ <string name="listSeparatorSendEmail_edit">"Adresy e-mail"</string>
<string name="listSeparatorSendIm">"Wyślij wiadomość błyskawiczną"</string>
+ <string name="listSeparatorSendIm_edit">"Adresy czatu"</string>
<string name="listSeparatorMapAddress">"Pokaż adres na mapie"</string>
+ <string name="listSeparatorMapAddress_edit">"Adresy pocztowe"</string>
<string name="listSeparatorOrganizations">"Organizacje"</string>
<string name="listSeparatorOtherInformation">"Inne informacje"</string>
+ <string name="listSeparatorOtherInformation_edit">"Inne opcje"</string>
+ <string name="listSeparatorMore_edit">"Więcej"</string>
<string name="contactsIconLabel">"Kontakty"</string>
<string name="contactsFavoritesLabel">"Ulubione"</string>
- <string name="dialerIconLabel">"Klawisze"</string>
- <string name="recentCallsIconLabel">"Rejestr połączeń"</string>
+ <string name="dialerIconLabel">"Telefon"</string>
+ <string name="recentCallsIconLabel">"Rejestr"</string>
<string name="liveFolderAll">"Wszystkie kontakty"</string>
- <string name="liveFolderFavorites">"Kontakty oznaczone gwiazdkami"</string>
+ <string name="liveFolderFavorites">"Kontakty oznaczone gwiazdką"</string>
<string name="liveFolderPhone">"Kontakty z numerami telefonów"</string>
<string name="menu_sendTextMessage">"Wyślij wiadomość SMS"</string>
<string name="recentCalls_callNumber">"Zadzwoń do kontaktu <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -126,32 +131,42 @@
<string name="simContacts_emptyLoading">"Wczytywanie z karty SIM…"</string>
<string name="simContacts_title">"Kontakty z karty SIM"</string>
<string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Zsynchronizuj kontakty Google!"</font>" "\n"Po zsynchronizowaniu telefonu zawsze będziesz mieć kontakty pod ręką."</string>
- <string name="noContactsHelpText">"Nie masz kontaktów."\n\n"Aby dodać kontakty, naciśnij przycisk "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" i wybierz jedną z opcji:"\n\n" "\n<li><font fgcolor="#ffffffff"><b>"Edytuj grupy synchronizacji"</b></font>", aby dodać kontakty z nowego lub istniejącego konta Google;"\n</li>\n" "\n<li><font fgcolor="#ffffffff"><b>"Nowy kontakt"</b></font>", aby utworzyć nowy kontakt od podstaw;"\n</li>\n" "\n<li><font fgcolor="#ffffffff"><b>"Importuj kontakty"</b></font>", aby dodać kontakty z karty SIM."\n</li></string>
+ <!-- no translation found for noContactsHelpText (2249195687463896364) -->
+ <skip />
+ <!-- no translation found for noContactsHelpTextWithSync (4927701496550314555) -->
+ <skip />
<string name="seclectSyncGroups_title">"Wybierz grupy do zsynchronizowania"</string>
<string name="liveFolder_all_label">"Wszystkie kontakty"</string>
- <string name="liveFolder_favorites_label">"Oznaczone gwiazdkami"</string>
+ <string name="liveFolder_favorites_label">"Oznaczone gwiazdką"</string>
<string name="liveFolder_phones_label">"Telefony"</string>
<string name="dialer_useDtmfDialpad">"Użyj klawiatury tonowej"</string>
<string name="dialer_returnToInCallScreen">"Powrót do aktywnego połączenia"</string>
<string name="dialer_addAnotherCall">"Dodaj połączenie"</string>
- <!-- no translation found for callDetailTitle (5340227785196217938) -->
+ <string name="callDetailTitle">"Szczegóły połączenia"</string>
+ <string name="toast_call_detail_error">"Nie można odczytać szczegółów żądanego połączenia."</string>
+ <string name="call_type">"Typ"</string>
+ <string name="type_incoming">"Poł. przychodzące"</string>
+ <string name="type_outgoing">"Połączenie wychodzące"</string>
+ <string name="type_missed">"Nieodebrane połączenia"</string>
+ <string name="call_time">"Godzina"</string>
+ <string name="datetime_relative">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
+ <string name="call_duration">"Czas trwania"</string>
+ <string name="header_actions">"Czynności"</string>
+ <string name="ringtone_spinner">"Dźwięk dzwonka: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
+ <string name="add_more_items">"Dodaj więcej elementów"</string>
+ <string name="actionCall">"Zadzwoń na numer: <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionEmail">"Wyślij wiadomość e-mail na adres: <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionText">"Wyślij tekst do: <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionChat">"Porozmawiaj na czacie <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionMap">"Wyświetl adres: <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionIncomingCall">"Połączenia przychodzące"</string>
+ <string name="detailIncomingCallsGoToVoicemail">"Zostaną wysłane bezpośrednio na pocztę głosową"</string>
+ <string name="detailsRingtone">"Ustaw na <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</string>
+ <string name="callBack">"Oddzwoń"</string>
+ <!-- no translation found for callAgain (3197312117049874778) -->
<skip />
- <!-- no translation found for toast_call_detail_error (7200975244804730096) -->
+ <!-- no translation found for returnCall (8171961914203617813) -->
<skip />
- <!-- no translation found for call_type (3213526349444862087) -->
- <skip />
- <!-- no translation found for type_incoming (6502076603836088532) -->
- <skip />
- <!-- no translation found for type_outgoing (343108709599392641) -->
- <skip />
- <!-- no translation found for type_missed (2720502601640509542) -->
- <skip />
- <!-- no translation found for call_time (5805575214626630975) -->
- <skip />
- <!-- no translation found for datetime_relative (2906207446040994658) -->
- <skip />
- <!-- no translation found for call_duration (3941950339482985532) -->
- <skip />
- <!-- no translation found for header_actions (229583643365836321) -->
+ <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
<skip />
</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index b45528b..398c898 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -16,6 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="contactsList">"Контакты"</string>
+ <!-- no translation found for launcherDialer (140610573639849799) -->
+ <skip />
<string name="shortcutContact">"Контакт"</string>
<string name="starredList">"Помеченные"</string>
<string name="frequentList">"Частые"</string>
@@ -28,7 +30,7 @@
<string name="menu_newContact">"Создать контакт"</string>
<string name="menu_viewContact">"Просмотреть контакт"</string>
<string name="menu_callNumber">"Позвонить: <xliff:g id="NAME">%s</xliff:g>"</string>
- <string name="menu_addStar">"Добавить к избранному"</string>
+ <string name="menu_addStar">"Добавить в избранное"</string>
<string name="menu_removeStar">"Удалить из избранного"</string>
<string name="menu_showBarcode">"Показать штрихкод"</string>
<string name="menu_editContact">"Изменить контакт"</string>
@@ -40,20 +42,17 @@
<string name="menu_makeDefaultNumber">"Сделать номером по умолчанию"</string>
<string name="deleteConfirmation_title">"Удаление"</string>
<string name="deleteConfirmation">"Этот контакт будет удален."</string>
- <string name="menu_done">"Сохранить"</string>
- <string name="menu_doNotSave">"Отменить изменения"</string>
- <string name="button_save">"Сохранить"</string>
- <string name="button_discard">"Отменить изменения"</string>
+ <string name="menu_done">"Готово"</string>
+ <!-- no translation found for menu_doNotSave (2174577548513895144) -->
+ <skip />
<string name="editContact_title_edit">"Изменить контакт"</string>
<string name="editContact_title_insert">"Создание контакта"</string>
<string name="menu_addItem">"Подробнее"</string>
- <!-- no translation found for label_phonetic_name (2288082649573927286) -->
- <skip />
+ <string name="label_phonetic_name">"Фонетика"</string>
<string name="label_notes">"Примечания"</string>
<string name="label_ringtone">"Мелодия звонка"</string>
<string name="ghostData_name">"Первый и последний"</string>
- <!-- no translation found for ghostData_phonetic_name (7852749081984070902) -->
- <skip />
+ <string name="ghostData_phonetic_name">"Имя (фонетическая запись)"</string>
<string name="ghostData_company">"Компания"</string>
<string name="ghostData_title">"Должность"</string>
<string name="ghostData_im">"Имя в чате"</string>
@@ -80,7 +79,7 @@
<string name="menu_displayGroup">"Показать группу"</string>
<string name="syncGroupPreference">"Изменить группы синхронизации"</string>
<string name="importFromSim">"Импортировать контакты"</string>
- <string name="send_to_voicemail_checkbox">"Направлять вызовы прямо в голосовую почту."</string>
+ <string name="send_to_voicemail_checkbox">"Направлять звонки в голосовую почту"</string>
<string name="send_to_voicemail_view">"Вызовы направляются прямо в голосовую почту."</string>
<string name="default_ringtone">"По умолчанию"</string>
<string name="addPicture">"Добавить значок"</string>
@@ -97,12 +96,18 @@
<string name="contactCreatedToast">"Контакт создан."</string>
<string name="contactSavedToast">"Контакт сохранен."</string>
<string name="listSeparatorCallNumber">"Набрать номер"</string>
+ <string name="listSeparatorCallNumber_edit">"Номера телефонов"</string>
<string name="listSeparatorSendSmsMms">"Отправить SMS/MMS"</string>
<string name="listSeparatorSendEmail">"Отправить сообщение электронной почты"</string>
+ <string name="listSeparatorSendEmail_edit">"Адреса электронной почты"</string>
<string name="listSeparatorSendIm">"Отправить мгновенное сообщение"</string>
+ <string name="listSeparatorSendIm_edit">"Адреса чата"</string>
<string name="listSeparatorMapAddress">"Адрес на карте"</string>
+ <string name="listSeparatorMapAddress_edit">"Почтовые адреса"</string>
<string name="listSeparatorOrganizations">"Организации"</string>
<string name="listSeparatorOtherInformation">"Другие сведения"</string>
+ <string name="listSeparatorOtherInformation_edit">"Другие параметры"</string>
+ <string name="listSeparatorMore_edit">"Дополнительно"</string>
<string name="contactsIconLabel">"Контакты"</string>
<string name="contactsFavoritesLabel">"Избранные"</string>
<string name="dialerIconLabel">"Набор номеров"</string>
@@ -122,36 +127,46 @@
<string name="unknown">"Неизвестно"</string>
<string name="private_num">"Частный номер"</string>
<string name="dialerKeyboardHintText">"Для набора воспользуйтесь клавиатурой"</string>
- <string name="dialerDialpadHintText">"Наберите номер для добавления вызова"</string>
+ <string name="dialerDialpadHintText">"Наберите номер, чтобы добавить вызов"</string>
<string name="simContacts_emptyLoading">"Идет загрузка с SIM-карты…"</string>
<string name="simContacts_title">"Контакты на SIM-карте"</string>
<string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Синхронизируйте свои контакты Google!"</font>" "\n"После синхронизации с телефоном вы сможете общаться со знакомыми, где бы вы ни были."</string>
- <string name="noContactsHelpText">"У вас пока нет контактов."\n\n"Чтобы добавить контакты, нажмите кнопку "<font fgcolor="#ffffffff"><b>"Menu"</b></font>" и выберите:"\n\n" "\n<li><font fgcolor="#ffffffff"><b>"Изменить группы синхронизации"</b></font>" для добавления из нового или существующего аккаунта Google"\n</li>\n" "\n<li><font fgcolor="#ffffffff"><b>"Создать контакт"</b></font>" для создания контакта с нуля"\n</li>\n" "\n<li><font fgcolor="#ffffffff"><b>"Импортировать контакты"</b></font>" для добавления контактов с SIM-карты"\n</li></string>
+ <!-- no translation found for noContactsHelpText (2249195687463896364) -->
+ <skip />
+ <!-- no translation found for noContactsHelpTextWithSync (4927701496550314555) -->
+ <skip />
<string name="seclectSyncGroups_title">"Выбор групп для синхронизации"</string>
<string name="liveFolder_all_label">"Все контакты"</string>
<string name="liveFolder_favorites_label">"Помеченные"</string>
<string name="liveFolder_phones_label">"Телефоны"</string>
<string name="dialer_useDtmfDialpad">"Использовать клавиатуру тонального набора"</string>
- <string name="dialer_returnToInCallScreen">"Отобразить текущий вызов"</string>
- <string name="dialer_addAnotherCall">"Добавить вызов"</string>
- <!-- no translation found for callDetailTitle (5340227785196217938) -->
+ <string name="dialer_returnToInCallScreen">"Вернуться к текущему звонку"</string>
+ <string name="dialer_addAnotherCall">"Добавить звонок"</string>
+ <string name="callDetailTitle">"Сведения о звонке"</string>
+ <string name="toast_call_detail_error">"Не удается считать сведения об указанном звонке."</string>
+ <string name="call_type">"Тип"</string>
+ <string name="type_incoming">"Входящий звонок"</string>
+ <string name="type_outgoing">"Исходящий звонок"</string>
+ <string name="type_missed">"Пропущенный звонок"</string>
+ <string name="call_time">"Время"</string>
+ <string name="datetime_relative">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
+ <string name="call_duration">"Продолжительность"</string>
+ <string name="header_actions">"Действия"</string>
+ <string name="ringtone_spinner">"Мелодия: <xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
+ <string name="add_more_items">"Добавление контактов"</string>
+ <string name="actionCall">"Позвонить по номеру: <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionEmail">"Отправить электронное сообщение на адрес: <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionText">"Отправить текстовое сообщение на номер: <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionChat">"Общаться в чате с помощью: <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionMap">"Просмотр адреса: <xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionIncomingCall">"Входящие вызовы"</string>
+ <string name="detailIncomingCallsGoToVoicemail">"Переадресация в голосовую почту"</string>
+ <string name="detailsRingtone">"Выбрано: <xliff:g id="RINGTONE_NAME">%s</xliff:g>"</string>
+ <string name="callBack">"Перезвонить"</string>
+ <!-- no translation found for callAgain (3197312117049874778) -->
<skip />
- <!-- no translation found for toast_call_detail_error (7200975244804730096) -->
+ <!-- no translation found for returnCall (8171961914203617813) -->
<skip />
- <!-- no translation found for call_type (3213526349444862087) -->
- <skip />
- <!-- no translation found for type_incoming (6502076603836088532) -->
- <skip />
- <!-- no translation found for type_outgoing (343108709599392641) -->
- <skip />
- <!-- no translation found for type_missed (2720502601640509542) -->
- <skip />
- <!-- no translation found for call_time (5805575214626630975) -->
- <skip />
- <!-- no translation found for datetime_relative (2906207446040994658) -->
- <skip />
- <!-- no translation found for call_duration (3941950339482985532) -->
- <skip />
- <!-- no translation found for header_actions (229583643365836321) -->
+ <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
<skip />
</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index c787c16..6ef964e 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -16,6 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="contactsList">"联系人"</string>
+ <!-- no translation found for launcherDialer (140610573639849799) -->
+ <skip />
<string name="shortcutContact">"联系人"</string>
<string name="starredList">"已加星标"</string>
<string name="frequentList">"经常"</string>
@@ -40,20 +42,17 @@
<string name="menu_makeDefaultNumber">"设置默认号码"</string>
<string name="deleteConfirmation_title">"删除"</string>
<string name="deleteConfirmation">"会删除此联系人。"</string>
- <string name="menu_done">"保存"</string>
- <string name="menu_doNotSave">"放弃更改"</string>
- <string name="button_save">"保存"</string>
- <string name="button_discard">"放弃更改"</string>
+ <string name="menu_done">"完成"</string>
+ <!-- no translation found for menu_doNotSave (2174577548513895144) -->
+ <skip />
<string name="editContact_title_edit">"编辑联系人"</string>
<string name="editContact_title_insert">"添加联系人"</string>
<string name="menu_addItem">"详细信息"</string>
- <!-- no translation found for label_phonetic_name (2288082649573927286) -->
- <skip />
+ <string name="label_phonetic_name">"拼音"</string>
<string name="label_notes">"备注"</string>
<string name="label_ringtone">"铃声"</string>
<string name="ghostData_name">"第一个和最后一个"</string>
- <!-- no translation found for ghostData_phonetic_name (7852749081984070902) -->
- <skip />
+ <string name="ghostData_phonetic_name">"拼音姓名"</string>
<string name="ghostData_company">"公司"</string>
<string name="ghostData_title">"位置"</string>
<string name="ghostData_im">"即时消息名称"</string>
@@ -80,7 +79,7 @@
<string name="menu_displayGroup">"显示组"</string>
<string name="syncGroupPreference">"编辑同步组"</string>
<string name="importFromSim">"导入联系人"</string>
- <string name="send_to_voicemail_checkbox">"直接呼叫语音信箱。"</string>
+ <string name="send_to_voicemail_checkbox">"将通话直接发送到语音邮件"</string>
<string name="send_to_voicemail_view">"呼叫被直接发送至语音邮件。"</string>
<string name="default_ringtone">"默认"</string>
<string name="addPicture">"“添加”图标"</string>
@@ -97,12 +96,18 @@
<string name="contactCreatedToast">"已创建“联系人”。"</string>
<string name="contactSavedToast">"已保存联系人。"</string>
<string name="listSeparatorCallNumber">"拔号"</string>
+ <string name="listSeparatorCallNumber_edit">"电话号码"</string>
<string name="listSeparatorSendSmsMms">"发送短信/彩信"</string>
<string name="listSeparatorSendEmail">"发送电子邮件"</string>
+ <string name="listSeparatorSendEmail_edit">"电子邮件地址"</string>
<string name="listSeparatorSendIm">"发送即时消息"</string>
+ <string name="listSeparatorSendIm_edit">"聊天地址"</string>
<string name="listSeparatorMapAddress">"地图地址"</string>
+ <string name="listSeparatorMapAddress_edit">"邮政地址"</string>
<string name="listSeparatorOrganizations">"组织"</string>
<string name="listSeparatorOtherInformation">"其他信息"</string>
+ <string name="listSeparatorOtherInformation_edit">"其他选项"</string>
+ <string name="listSeparatorMore_edit">"更多"</string>
<string name="contactsIconLabel">"联系人"</string>
<string name="contactsFavoritesLabel">"收藏夹"</string>
<string name="dialerIconLabel">"拔号程序"</string>
@@ -126,7 +131,10 @@
<string name="simContacts_emptyLoading">"正在从 SIM 卡中载入..."</string>
<string name="simContacts_title">"SIM 卡联系人"</string>
<string name="contactsSyncPlug"><font fgcolor="#ffffffff">"同步您的 Google 联系人!"</font>\n"将联系人同步到您的手机后,无论您走到哪里,都可以与他们联系。"</string>
- <string name="noContactsHelpText">"您尚未有联系人。"\n\n"要添加联系人,可按"<font fgcolor="#ffffffff"><b>"菜单"</b></font>"并选择:"\n\n" "\n<li><font fgcolor="#ffffffff"><b>"编辑同步组"</b></font>"以从新的或现有 Google 帐户中添加"\n</li>\n" "\n<li><font fgcolor="#ffffffff"><b>"添加联系人"</b></font>"创建新联系人"\n</li>\n" "\n<li><font fgcolor="#ffffffff"><b>"导入联系人"</b></font>"以从您的 SIM 卡中添加联系人"\n</li></string>
+ <!-- no translation found for noContactsHelpText (2249195687463896364) -->
+ <skip />
+ <!-- no translation found for noContactsHelpTextWithSync (4927701496550314555) -->
+ <skip />
<string name="seclectSyncGroups_title">"选择要同步的组"</string>
<string name="liveFolder_all_label">"所有联系人"</string>
<string name="liveFolder_favorites_label">"已加星标"</string>
@@ -134,24 +142,31 @@
<string name="dialer_useDtmfDialpad">"使用按键式键盘"</string>
<string name="dialer_returnToInCallScreen">"返回到正在进行中的通话"</string>
<string name="dialer_addAnotherCall">"添加通话"</string>
- <!-- no translation found for callDetailTitle (5340227785196217938) -->
+ <string name="callDetailTitle">"通话详情"</string>
+ <string name="toast_call_detail_error">"无法阅读所请求通话的详情。"</string>
+ <string name="call_type">"类型"</string>
+ <string name="type_incoming">"来电"</string>
+ <string name="type_outgoing">"去电"</string>
+ <string name="type_missed">"未接来电"</string>
+ <string name="call_time">"时间"</string>
+ <string name="datetime_relative">"<xliff:g id="DATETIME">%1$s</xliff:g>(<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
+ <string name="call_duration">"持续时间"</string>
+ <string name="header_actions">"操作"</string>
+ <string name="ringtone_spinner">"铃声:<xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
+ <string name="add_more_items">"添加更多项目"</string>
+ <string name="actionCall">"呼叫<xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionEmail">"向<xliff:g id="TYPE">%s</xliff:g>发送电子邮件"</string>
+ <string name="actionText">"向<xliff:g id="TYPE">%s</xliff:g>发送文本消息"</string>
+ <string name="actionChat">"使用 <xliff:g id="TYPE">%s</xliff:g> 进行聊天"</string>
+ <string name="actionMap">"查看<xliff:g id="TYPE">%s</xliff:g>地址"</string>
+ <string name="actionIncomingCall">"来电"</string>
+ <string name="detailIncomingCallsGoToVoicemail">"将直接发送至语音邮件"</string>
+ <string name="detailsRingtone">"设置为“<xliff:g id="RINGTONE_NAME">%s</xliff:g>”"</string>
+ <string name="callBack">"回拨"</string>
+ <!-- no translation found for callAgain (3197312117049874778) -->
<skip />
- <!-- no translation found for toast_call_detail_error (7200975244804730096) -->
+ <!-- no translation found for returnCall (8171961914203617813) -->
<skip />
- <!-- no translation found for call_type (3213526349444862087) -->
- <skip />
- <!-- no translation found for type_incoming (6502076603836088532) -->
- <skip />
- <!-- no translation found for type_outgoing (343108709599392641) -->
- <skip />
- <!-- no translation found for type_missed (2720502601640509542) -->
- <skip />
- <!-- no translation found for call_time (5805575214626630975) -->
- <skip />
- <!-- no translation found for datetime_relative (2906207446040994658) -->
- <skip />
- <!-- no translation found for call_duration (3941950339482985532) -->
- <skip />
- <!-- no translation found for header_actions (229583643365836321) -->
+ <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
<skip />
</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index c3f55e9..91704fb 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -16,6 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="contactsList">"連絡人"</string>
+ <!-- no translation found for launcherDialer (140610573639849799) -->
+ <skip />
<string name="shortcutContact">"連絡人"</string>
<string name="starredList">"已標記星號"</string>
<string name="frequentList">"經常聯絡"</string>
@@ -40,20 +42,17 @@
<string name="menu_makeDefaultNumber">"設為預設號碼"</string>
<string name="deleteConfirmation_title">"刪除"</string>
<string name="deleteConfirmation">"此連絡人會被刪除。"</string>
- <string name="menu_done">"儲存"</string>
- <string name="menu_doNotSave">"放棄變更"</string>
- <string name="button_save">"儲存"</string>
- <string name="button_discard">"放棄變更"</string>
+ <string name="menu_done">"完成"</string>
+ <!-- no translation found for menu_doNotSave (2174577548513895144) -->
+ <skip />
<string name="editContact_title_edit">"編輯連絡人"</string>
<string name="editContact_title_insert">"新增連絡人"</string>
<string name="menu_addItem">"更多資訊"</string>
- <!-- no translation found for label_phonetic_name (2288082649573927286) -->
- <skip />
+ <string name="label_phonetic_name">"拼音"</string>
<string name="label_notes">"附註"</string>
<string name="label_ringtone">"鈴聲"</string>
<string name="ghostData_name">"姓名"</string>
- <!-- no translation found for ghostData_phonetic_name (7852749081984070902) -->
- <skip />
+ <string name="ghostData_phonetic_name">"姓名拼音"</string>
<string name="ghostData_company">"公司"</string>
<string name="ghostData_title">"職位"</string>
<string name="ghostData_im">"即時訊息帳號"</string>
@@ -80,7 +79,7 @@
<string name="menu_displayGroup">"顯示群組"</string>
<string name="syncGroupPreference">"編輯同步處理群組"</string>
<string name="importFromSim">"匯入連絡人"</string>
- <string name="send_to_voicemail_checkbox">"將通話直接轉至語音信箱"</string>
+ <string name="send_to_voicemail_checkbox">"直接將通話轉到語音郵件"</string>
<string name="send_to_voicemail_view">"通話已直接轉至語音信箱"</string>
<string name="default_ringtone">"預設值"</string>
<string name="addPicture">"新增圖示"</string>
@@ -97,12 +96,18 @@
<string name="contactCreatedToast">"已建立連絡人"</string>
<string name="contactSavedToast">"連絡人已儲存。"</string>
<string name="listSeparatorCallNumber">"撥打號碼"</string>
+ <string name="listSeparatorCallNumber_edit">"電話號碼"</string>
<string name="listSeparatorSendSmsMms">"傳送 SMS/MMS"</string>
<string name="listSeparatorSendEmail">"傳送電子郵件"</string>
+ <string name="listSeparatorSendEmail_edit">"電子郵件地址"</string>
<string name="listSeparatorSendIm">"傳送即時訊息"</string>
+ <string name="listSeparatorSendIm_edit">"即時通訊地址"</string>
<string name="listSeparatorMapAddress">"在地圖上顯示地址"</string>
+ <string name="listSeparatorMapAddress_edit">"聯絡地址"</string>
<string name="listSeparatorOrganizations">"組織"</string>
<string name="listSeparatorOtherInformation">"其他資訊"</string>
+ <string name="listSeparatorOtherInformation_edit">"其他選項"</string>
+ <string name="listSeparatorMore_edit">"更多"</string>
<string name="contactsIconLabel">"連絡人"</string>
<string name="contactsFavoritesLabel">"我的最愛"</string>
<string name="dialerIconLabel">"撥號"</string>
@@ -126,7 +131,10 @@
<string name="simContacts_emptyLoading">"從 SIM 卡讀取中…"</string>
<string name="simContacts_title">"SIM 卡連絡人"</string>
<string name="contactsSyncPlug"><font fgcolor="#ffffffff">" 同步處理您的 Google 連絡人!"</font>" "\n" 與手機同步處理後,無論您走到哪,都可存取連絡人資訊。"</string>
- <string name="noContactsHelpText">"您沒有任何連絡人。"\n\n" 若要新增連絡人,請按 "<font fgcolor="#ffffffff"><b>" [選單] "</b></font>",並選取:"\n\n" "\n<li><font fgcolor="#ffffffff"><b>" [編輯同步處理群組] "</b></font>" 從新的或已存在的 Google 帳戶 "\n</li>\n" "\n<li><font fgcolor="#ffffffff"><b>" 新增連絡人 "</b></font>" 建立新的連絡人 "\n</li>\n" "\n<li><font fgcolor="#ffffffff"><b>" 匯入連絡人 "</b></font>" 從 SIM 卡新增連絡人 "\n</li></string>
+ <!-- no translation found for noContactsHelpText (2249195687463896364) -->
+ <skip />
+ <!-- no translation found for noContactsHelpTextWithSync (4927701496550314555) -->
+ <skip />
<string name="seclectSyncGroups_title">"選取要同步處理的群組"</string>
<string name="liveFolder_all_label">"全部聯絡人"</string>
<string name="liveFolder_favorites_label">"星號標記"</string>
@@ -134,24 +142,31 @@
<string name="dialer_useDtmfDialpad">"使用按鍵式鍵盤"</string>
<string name="dialer_returnToInCallScreen">"返回進行中的通話"</string>
<string name="dialer_addAnotherCall">"新增通話"</string>
- <!-- no translation found for callDetailTitle (5340227785196217938) -->
+ <string name="callDetailTitle">"通話詳細資料"</string>
+ <string name="toast_call_detail_error">"無法解讀通話要求詳細資訊。"</string>
+ <string name="call_type">"類型"</string>
+ <string name="type_incoming">"外來通話"</string>
+ <string name="type_outgoing">"播出通話"</string>
+ <string name="type_missed">"未接通話"</string>
+ <string name="call_time">"時間"</string>
+ <string name="datetime_relative">"<xliff:g id="DATETIME">%1$s</xliff:g> (<xliff:g id="RELATIVE">%2$s</xliff:g>)"</string>
+ <string name="call_duration">"持續時間"</string>
+ <string name="header_actions">"動作"</string>
+ <string name="ringtone_spinner">"鈴聲:<xliff:g id="RINGTONE">%1$s</xliff:g>"</string>
+ <string name="add_more_items">"新增更多項目"</string>
+ <string name="actionCall">"播打<xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionEmail">"傳送電子郵件至<xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionText">"傳送簡訊至<xliff:g id="TYPE">%s</xliff:g>"</string>
+ <string name="actionChat">"透過 <xliff:g id="TYPE">%s</xliff:g> 進行即時通訊"</string>
+ <string name="actionMap">"檢視<xliff:g id="TYPE">%s</xliff:g>地址"</string>
+ <string name="actionIncomingCall">"來電"</string>
+ <string name="detailIncomingCallsGoToVoicemail">"來電將直接轉到語音信箱"</string>
+ <string name="detailsRingtone">"設為<xliff:g id="RINGTONE_NAME">%s</xliff:g>"</string>
+ <string name="callBack">"回播電話"</string>
+ <!-- no translation found for callAgain (3197312117049874778) -->
<skip />
- <!-- no translation found for toast_call_detail_error (7200975244804730096) -->
+ <!-- no translation found for returnCall (8171961914203617813) -->
<skip />
- <!-- no translation found for call_type (3213526349444862087) -->
- <skip />
- <!-- no translation found for type_incoming (6502076603836088532) -->
- <skip />
- <!-- no translation found for type_outgoing (343108709599392641) -->
- <skip />
- <!-- no translation found for type_missed (2720502601640509542) -->
- <skip />
- <!-- no translation found for call_time (5805575214626630975) -->
- <skip />
- <!-- no translation found for datetime_relative (2906207446040994658) -->
- <skip />
- <!-- no translation found for call_duration (3941950339482985532) -->
- <skip />
- <!-- no translation found for header_actions (229583643365836321) -->
+ <!-- no translation found for callDetailsDurationFormat (8157706382818184268) -->
<skip />
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index b98ee50..8eb1976 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -15,9 +15,14 @@
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Title for the activity that shows contacts -->
+ <!-- Title for the activity that shows contacts. This is the name
+ used in the Launcher icon. -->
<string name="contactsList">Contacts</string>
+ <!-- Title for the activity that dials the phone. This is the name
+ used in the Launcher icon. -->
+ <string name="launcherDialer">Dialer</string>
+
<!-- Name of activity that allows users to create shortcuts on the home screen to a contact.
This shows up in a list of things like bookmark, folder, music playlist, etc -->
<string name="shortcutContact">Contact</string>
@@ -50,6 +55,9 @@
<!-- Hint text in the search box when the user hits the Search key while in the contacts app -->
<string name="searchHint">Search contacts</string>
+ <!-- Menu item to search contacts -->
+ <string name="menu_search">Search</string>
+
<!-- Menu item to create a new contact -->
<string name="menu_newContact">New contact</string>
@@ -97,16 +105,10 @@
<string name="deleteConfirmation">This contact will be deleted.</string>
<!-- Menu item to indicate you are done editing a contact and want to save the changes you've made -->
- <string name="menu_done">Save</string>
+ <string name="menu_done">Done</string>
<!-- Menu item to indicate you want to stop editing a contact and NOT save the changes you've made -->
- <string name="menu_doNotSave">Discard changes</string>
-
- <!-- Button to indicate you are done editing a contact and want to save the changes you've made -->
- <string name="button_save">Save</string>
-
- <!-- Button to indicate you want to stop editing a contact and NOT save the changes you've made -->
- <string name="button_discard">Discard changes</string>
+ <string name="menu_doNotSave">Revert</string>
<!-- The title of the activity that edits and existing contact -->
<string name="editContact_title_edit">Edit contact</string>
@@ -212,7 +214,7 @@
<string name="importFromSim">Import contacts</string>
<!-- Check box label that allows calls to the contact to be sent directly to voicemail -->
- <string name="send_to_voicemail_checkbox">Send calls directly to voicemail.</string>
+ <string name="send_to_voicemail_checkbox">Send calls directly to voicemail</string>
<!-- String letting the user know that calls from the contact they're viewing will be sent directly to voicemail -->
<string name="send_to_voicemail_view">Calls are sent directly to voicemail.</string>
@@ -262,25 +264,43 @@
<!-- Separator in the contact details list describing that the items below it will place a call when clicked -->
<string name="listSeparatorCallNumber">Dial number</string>
-
+
+ <!-- Section header in the Edit Contacts screen for phone numbers -->
+ <string name="listSeparatorCallNumber_edit">Phone numbers</string>
+
<!-- Separator in the contact details list describing that the items below it will send an SMS/MMS to a phone number -->
<string name="listSeparatorSendSmsMms">Send SMS/MMS</string>
<!-- Separator in the contact details list describing that the items below it will send an email -->
<string name="listSeparatorSendEmail">Send email</string>
+ <!-- Section header in the Edit Contacts screen for E-mail addresses -->
+ <string name="listSeparatorSendEmail_edit">Email addresses</string>
+
<!-- Separator in the contact details list describing that the items below it will send an IM -->
<string name="listSeparatorSendIm">Send instant message</string>
+ <!-- Section header in the Edit Contacts screen for Instant messanger accounts -->
+ <string name="listSeparatorSendIm_edit">Chat addresses</string>
+
<!-- Separator in the contact details list describing that the items below it will open maps with the given address -->
<string name="listSeparatorMapAddress">Map address</string>
+ <!-- Section header in the Edit Contacts screen for map addresses -->
+ <string name="listSeparatorMapAddress_edit">Postal addresses</string>
+
<!-- Separator in the contact details list describing that the items below are non-actionable organization information -->
<string name="listSeparatorOrganizations">Organizations</string>
<!-- Separator in the contact details list describing that the items below are random other non-actionable information about a contact -->
<string name="listSeparatorOtherInformation">Other information</string>
+ <!-- Section header in the Edit Contacts screen for other options, such as setting ringtone -->
+ <string name="listSeparatorOtherInformation_edit">Other options</string>
+
+ <!-- Section header in the Edit Contacts screen for the "Add more items" button -->
+ <string name="listSeparatorMore_edit">More</string>
+
<!-- The description text for the contacts tab. Space is limited for this string, so the shorter the better -->
<string name="contactsIconLabel">Contacts</string>
@@ -349,8 +369,14 @@
<string name="contactsSyncPlug"><font fgcolor="#ffffffff">Sync your Google contacts!</font>
\nAfter syncing to your phone, your contacts will be available to you wherever you go.</string>
- <!-- Displayed full screen when the user has no contacts and they are displaying the My Contacts group -->
+ <!-- Displayed full screen when the user has no contacts and they are displaying the My Contacts group, and contact syncing is disabled -->
<string name="noContactsHelpText">"You don't have any contacts.\n\nTo add contacts, press <font fgcolor="#ffffffff"><b>Menu</b></font> and select:\n
+ \n<li><font fgcolor="#ffffffff"><b>New contact</b></font> to create a new contact from scratch\n</li>
+ \n<li><font fgcolor="#ffffffff"><b>Import contacts</b></font> to add contacts from your SIM card\n</li>"
+ </string>
+
+ <!-- Displayed full screen when the user has no contacts and they are displaying the My Contacts group, and contact syncing is enabled -->
+ <string name="noContactsHelpTextWithSync">"You don't have any contacts.\n\nTo add contacts, press <font fgcolor="#ffffffff"><b>Menu</b></font> and select:\n
\n<li><font fgcolor="#ffffffff"><b>Edit sync groups</b></font> to add from a new or existing Google account\n</li>
\n<li><font fgcolor="#ffffffff"><b>New contact</b></font> to create a new contact from scratch\n</li>
\n<li><font fgcolor="#ffffffff"><b>Import contacts</b></font> to add contacts from your SIM card\n</li>"
@@ -392,9 +418,13 @@
<!-- In call detail screen, label for call type -->
<string name="call_type">Type</string>
- <!-- In call detail screen, expanded titles for call types -->
+ <!-- Title for incoming call details screen -->
<string name="type_incoming">Incoming call</string>
+
+ <!-- Title for outgoing call details screen -->
<string name="type_outgoing">Outgoing call</string>
+
+ <!-- Title for missed call details screen -->
<string name="type_missed">Missed call</string>
<!-- In call detail screen, label for call date/time -->
@@ -409,4 +439,54 @@
<!-- In call detail screen, header title for actions section -->
<string name="header_actions">Actions</string>
+ <!-- In edit contact screen, combine the actual ringtone name with prefix for placement in spinner -->
+ <string name="ringtone_spinner">"Ringtone: <xliff:g id="ringtone" example="Caribbean Ice">%1$s</xliff:g>"</string>
+
+ <!-- In edit contact screen, add more info spinner title -->
+ <string name="add_more_items">Add more items</string>
+
+ <!-- Action string for calling a phone number. -->
+ <string name="actionCall">Call <xliff:g id="type" example="mobile">%s</xliff:g></string>
+
+ <!-- Action string for sending an email to an email address. -->
+ <string name="actionEmail">Email <xliff:g id="type" example="home">%s</xliff:g></string>
+
+ <!-- Action string for sending a text message to a phone number. -->
+ <string name="actionText">Text <xliff:g id="type" example="mobile">%s</xliff:g></string>
+
+ <!-- Action string for sending an instant message to a chat buddy. -->
+ <string name="actionChat">Chat using <xliff:g id="type" example="Google Talk">%s</xliff:g></string>
+
+ <!-- Action string for viewing an address on a map. -->
+ <string name="actionMap">View <xliff:g id="type" example="home">%s</xliff:g> address</string>
+
+ <!-- Description for incoming calls going to voice mail vs. not -->
+ <string name="actionIncomingCall">Incoming calls</string>
+
+ <!-- Detail text for incoming calls going to voice mail -->
+ <string name="detailIncomingCallsGoToVoicemail">Will be sent directly to voicemail</string>
+
+ <!-- Description of what the contact specific ringtone is set to -->
+ <string name="detailsRingtone">Set to <xliff:g id="ringtone_name" example="Flutey Phone">%s</xliff:g></string>
+
+ <!-- Action string for calling back a number in the call log -->
+ <string name="callBack">Call back</string>
+
+ <!-- Action string for calling a number in the call log again -->
+ <string name="callAgain">Call again</string>
+
+ <!-- Action string for returning a missed call in the call log -->
+ <string name="returnCall">Return call</string>
+
+ <!-- A nicely formatted call duration displayed when viewing call details. For example "42 mins 28 secs" -->
+ <string name="callDetailsDurationFormat"><xliff:g id="minutes" example="42">%s</xliff:g> mins <xliff:g id="seconds" example="28">%s</xliff:g> secs</string>
+
+ <!-- A list separator for the Favorites tab indicating that items below it are frequently called contacts rather than starred contacts -->
+ <string name="favoritesFrquentSeparator">Frequently called</string>
+
+ <!-- Dialog title when prompting before creating a contact -->
+ <string name="add_contact_dlg_title">Add Contact</string>
+ <!-- Dialog message when prompting before creating a contact. Includes
+ the email address, e.g. "Add xyz@foo.com to contacts?" -->
+ <string name="add_contact_dlg_message_fmt">Add \"<xliff:g id="email">%s</xliff:g>\" to contacts?</string>
</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
new file mode 100644
index 0000000..e43842c
--- /dev/null
+++ b/res/values/styles.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 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.
+-->
+
+<resources>
+
+ <style name="MinusButton">
+ <item name="android:background">@drawable/btn_circle</item>
+ <item name="android:src">@drawable/ic_btn_round_minus</item>
+ </style>
+
+ <style name="PlusButton">
+ <item name="android:background">@drawable/btn_circle</item>
+ <item name="android:src">@drawable/ic_btn_round_plus</item>
+ </style>
+
+ <style name="MoreButton">
+ <item name="android:background">@drawable/btn_circle</item>
+ <item name="android:src">@drawable/ic_btn_round_more</item>
+ </style>
+
+</resources>
diff --git a/src/com/android/contacts/CallDetailActivity.java b/src/com/android/contacts/CallDetailActivity.java
old mode 100755
new mode 100644
index 8b25c09..012a33e
--- a/src/com/android/contacts/CallDetailActivity.java
+++ b/src/com/android/contacts/CallDetailActivity.java
@@ -26,14 +26,15 @@
import android.net.Uri;
import android.os.Bundle;
import android.provider.CallLog;
-import android.provider.CallLog.Calls;
import android.provider.Contacts;
-import android.provider.Contacts.Intents.Insert;
+import android.provider.CallLog.Calls;
import android.provider.Contacts.People;
import android.provider.Contacts.Phones;
+import android.provider.Contacts.Intents.Insert;
+import android.telephony.PhoneNumberUtils;
import android.telephony.TelephonyManager;
+import android.text.TextUtils;
import android.text.format.DateUtils;
-import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
@@ -44,7 +45,7 @@
import android.widget.TextView;
import android.widget.Toast;
-import java.util.LinkedList;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -54,14 +55,9 @@
AdapterView.OnItemClickListener {
private static final String TAG = "CallDetail";
- private Uri mUri;
-
- private View mCallDetailItem;
-
private TextView mCallType;
private ImageView mCallTypeIcon;
private TextView mCallTime;
- private View mCallDurationRow;
private TextView mCallDuration;
private String mNumber = null;
@@ -83,11 +79,16 @@
static final String[] PHONES_PROJECTION = new String[] {
Phones.PERSON_ID,
+ Phones.DISPLAY_NAME,
+ Phones.TYPE,
+ Phones.LABEL,
+ Phones.NUMBER,
};
-
- static final int PERSON_ID_COLUMN_INDEX = 0;
-
- private static final int INVALID_TYPE = -1;
+ static final int COLUMN_INDEX_ID = 0;
+ static final int COLUMN_INDEX_NAME = 1;
+ static final int COLUMN_INDEX_TYPE = 2;
+ static final int COLUMN_INDEX_LABEL = 3;
+ static final int COLUMN_INDEX_NUMBER = 4;
@Override
protected void onCreate(Bundle icicle) {
@@ -98,13 +99,10 @@
mInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
mResources = getResources();
- mCallDetailItem = mInflater.inflate(R.layout.call_detail_item, getListView(), false);
-
- mCallType = (TextView) mCallDetailItem.findViewById(R.id.call_type);
- mCallTypeIcon = (ImageView) mCallDetailItem.findViewById(R.id.call_type_icon);
- mCallTime = (TextView) mCallDetailItem.findViewById(R.id.call_time);
- mCallDurationRow = mCallDetailItem.findViewById(R.id.call_duration_row);
- mCallDuration = (TextView) mCallDetailItem.findViewById(R.id.call_duration);
+ mCallType = (TextView) findViewById(R.id.type);
+ mCallTypeIcon = (ImageView) findViewById(R.id.icon);
+ mCallTime = (TextView) findViewById(R.id.time);
+ mCallDuration = (TextView) findViewById(R.id.duration);
getListView().setOnItemClickListener(this);
}
@@ -135,33 +133,6 @@
}
/**
- * Try a reverse-phonebook lookup to find the contact, if any, behind the given number.
- *
- * @param number Phone number to perform reverse-lookup against
- * @return Uri into {@link Contacts.People} if found, otherwise null
- */
- private Uri getPersonUri(String number) {
- Uri personUri = null;
-
- // Perform a reverse-phonebook lookup to find the PERSON_ID
- ContentResolver resolver = getContentResolver();
- Uri phoneUri = Uri.withAppendedPath(Phones.CONTENT_FILTER_URL, Uri.encode(number));
- Cursor phonesCursor = resolver.query(phoneUri, PHONES_PROJECTION, null, null, null);
- try {
- if (phonesCursor != null && phonesCursor.moveToFirst()) {
- long personId = phonesCursor.getLong(PERSON_ID_COLUMN_INDEX);
- personUri = ContentUris.withAppendedId(Contacts.People.CONTENT_URI, personId);
- }
- } finally {
- if (phonesCursor != null) {
- phonesCursor.close();
- }
- }
-
- return personUri;
- }
-
- /**
* Update user interface with details of given call.
*
* @param callUri Uri into {@link CallLog.Calls}
@@ -180,71 +151,93 @@
// Pull out string in format [relative], [date]
CharSequence dateClause = DateUtils.formatDateRange(this, date, date,
DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE |
- DateUtils.FORMAT_SHOW_WEEKDAY | DateUtils.FORMAT_SHOW_YEAR |
- DateUtils.FORMAT_ABBREV_ALL);
- long now = System.currentTimeMillis();
- CharSequence relativeClause = DateUtils.getRelativeTimeSpanString(date, now,
- DateUtils.SECOND_IN_MILLIS, DateUtils.FORMAT_ABBREV_RELATIVE);
- String dateString = getString(R.string.datetime_relative,
- dateClause, relativeClause);
- mCallTime.setText(dateString);
+ DateUtils.FORMAT_SHOW_WEEKDAY | DateUtils.FORMAT_SHOW_YEAR);
+ mCallTime.setText(dateClause);
// Set the duration
if (callType == Calls.MISSED_TYPE) {
- mCallDurationRow.setVisibility(View.GONE);
+ mCallDuration.setVisibility(View.GONE);
} else {
- mCallDurationRow.setVisibility(View.VISIBLE);
- mCallDuration.setText(DateUtils.formatElapsedTime(duration));
+ mCallDuration.setVisibility(View.VISIBLE);
+ mCallDuration.setText(formatDuration(duration));
}
// Set the call type icon and caption
+ String callText = null;
switch (callType) {
case Calls.INCOMING_TYPE:
mCallTypeIcon.setImageResource(android.R.drawable.sym_call_incoming);
mCallType.setText(R.string.type_incoming);
+ callText = getString(R.string.callBack);
break;
case Calls.OUTGOING_TYPE:
mCallTypeIcon.setImageResource(android.R.drawable.sym_call_outgoing);
mCallType.setText(R.string.type_outgoing);
+ callText = getString(R.string.callAgain);
break;
case Calls.MISSED_TYPE:
mCallTypeIcon.setImageResource(android.R.drawable.sym_call_missed);
mCallType.setText(R.string.type_missed);
+ callText = getString(R.string.returnCall);
break;
}
+ // Perform a reverse-phonebook lookup to find the PERSON_ID
+ String callLabel = null;
+ Uri personUri = null;
+ Uri phoneUri = Uri.withAppendedPath(Phones.CONTENT_FILTER_URL, Uri.encode(mNumber));
+ Cursor phonesCursor = resolver.query(phoneUri, PHONES_PROJECTION, null, null, null);
+ try {
+ if (phonesCursor != null && phonesCursor.moveToFirst()) {
+ long personId = phonesCursor.getLong(COLUMN_INDEX_ID);
+ personUri = ContentUris.withAppendedId(
+ Contacts.People.CONTENT_URI, personId);
+ callText = getString(R.string.recentCalls_callNumber,
+ phonesCursor.getString(COLUMN_INDEX_NAME));
+ mNumber = phonesCursor.getString(COLUMN_INDEX_NUMBER);
+ callLabel = Phones.getDisplayLabel(this,
+ phonesCursor.getInt(COLUMN_INDEX_TYPE),
+ phonesCursor.getString(COLUMN_INDEX_LABEL)).toString();
+ } else {
+ mNumber = PhoneNumberUtils.formatNumber(mNumber);
+ }
+ } finally {
+ if (phonesCursor != null) phonesCursor.close();
+ }
+
// Build list of various available actions
- List<ViewEntry> actions = new LinkedList<ViewEntry>();
+ List<ViewEntry> actions = new ArrayList<ViewEntry>();
Intent callIntent = new Intent(Intent.ACTION_CALL_PRIVILEGED,
Uri.fromParts("tel", mNumber, null));
- actions.add(new ViewEntry(R.drawable.ic_dialer_fork_current_call,
- getString(R.string.recentCalls_callNumber, mNumber), callIntent));
-
+ ViewEntry entry = new ViewEntry(android.R.drawable.sym_action_call, callText,
+ callIntent);
+ entry.number = mNumber;
+ entry.label = callLabel;
+ actions.add(entry);
+
Intent smsIntent = new Intent(Intent.ACTION_SENDTO,
Uri.fromParts("sms", mNumber, null));
actions.add(new ViewEntry(R.drawable.sym_action_sms,
getString(R.string.menu_sendTextMessage), smsIntent));
-
+
// Let user view contact details if they exist, otherwise add option
// to create new contact from this number.
- Uri personUri = getPersonUri(mNumber);
-
if (personUri != null) {
Intent viewIntent = new Intent(Intent.ACTION_VIEW, personUri);
- actions.add(new ViewEntry(R.drawable.ic_tab_unselected_contacts,
+ actions.add(new ViewEntry(R.drawable.sym_action_view_contact,
getString(R.string.menu_viewContact), viewIntent));
} else {
Intent createIntent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
createIntent.setType(People.CONTENT_ITEM_TYPE);
createIntent.putExtra(Insert.PHONE, mNumber);
- actions.add(new ViewEntry(R.drawable.ic_dialer_fork_add_call,
+ actions.add(new ViewEntry(R.drawable.sym_action_add,
getString(R.string.recentCalls_addToContact), createIntent));
}
- ViewAdapter adapter = new ViewAdapter(this, mCallDetailItem, actions);
+ ViewAdapter adapter = new ViewAdapter(this, actions);
setListAdapter(adapter);
} else {
// Something went wrong reading in our primary data, so we're going to
@@ -260,10 +253,25 @@
}
}
+ private String formatDuration(long elapsedSeconds) {
+ long minutes = 0;
+ long seconds = 0;
+
+ if (elapsedSeconds >= 60) {
+ minutes = elapsedSeconds / 60;
+ elapsedSeconds -= minutes * 60;
+ }
+ seconds = elapsedSeconds;
+
+ return getString(R.string.callDetailsDurationFormat, minutes, seconds);
+ }
+
static final class ViewEntry {
public int icon = -1;
public String text = null;
public Intent intent = null;
+ public String label = null;
+ public String number = null;
public ViewEntry(int icon, String text, Intent intent) {
this.icon = icon;
@@ -274,120 +282,65 @@
static final class ViewAdapter extends BaseAdapter {
- private final View mCallDetailItem;
private final List<ViewEntry> mActions;
- private final Context mContext;
private final LayoutInflater mInflater;
- public ViewAdapter(Context context, View callDetailItem, List<ViewEntry> actions) {
- mCallDetailItem = callDetailItem;
+ public ViewAdapter(Context context, List<ViewEntry> actions) {
mActions = actions;
-
- mContext = context;
- mInflater = (LayoutInflater) context
- .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-
+ mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
- // Count is actions plus two headers and call details panel.
- return mActions.size() + 2;
+ return mActions.size();
}
public Object getItem(int position) {
- if (position >= POS_FIRST_ITEM) {
- return mActions.get(position - POS_FIRST_ITEM);
- }
- return null;
+ return mActions.get(position);
}
public long getItemId(int position) {
return position;
}
- private static final int TYPE_HEADER = 0;
- private static final int TYPE_CALL_DETAILS = 1;
- private static final int TYPE_ACTION = 2;
-
- private static final int POS_CALL_DETAILS = 0;
- private static final int POS_ACTIONS_HEADER = 1;
- private static final int POS_FIRST_ITEM = 2;
-
- public int getViewTypeCount() {
- // Types are headers, call details panel, and actions.
- return 3;
- }
-
- public int getItemViewType(int position) {
- switch(position) {
- case POS_CALL_DETAILS:
- return TYPE_CALL_DETAILS;
- case POS_ACTIONS_HEADER:
- return TYPE_HEADER;
- default:
- return TYPE_ACTION;
- }
- }
-
- public boolean areAllItemsEnabled() {
- return false;
- }
-
- public boolean isEnabled(int position) {
- return (position > POS_ACTIONS_HEADER);
- }
-
public View getView(int position, View convertView, ViewGroup parent) {
// Make sure we have a valid convertView to start with
if (convertView == null) {
- switch(getItemViewType(position)) {
- case TYPE_HEADER: {
- convertView = mInflater.inflate(R.layout.list_separator, parent, false);
- break;
- }
- case TYPE_CALL_DETAILS: {
- convertView = mCallDetailItem;
- break;
- }
- case TYPE_ACTION: {
- convertView = mInflater.inflate(R.layout.dialpad_chooser_list_item,
- parent, false);
- break;
- }
- }
+ convertView = mInflater.inflate(R.layout.call_detail_list_item, parent, false);
}
- // Now fill our known-good convertView with data
- switch(position) {
- case POS_CALL_DETAILS: {
- // Assume mCallDetailItem is already filled with correct data.
- break;
+ // Fill action with icon and text.
+ ViewEntry entry = mActions.get(position);
+ convertView.setTag(entry);
+
+ ImageView icon = (ImageView) convertView.findViewById(R.id.icon);
+ TextView text = (TextView) convertView.findViewById(android.R.id.text1);
+
+ icon.setImageResource(entry.icon);
+ text.setText(entry.text);
+
+ View line2 = convertView.findViewById(R.id.line2);
+ boolean numberEmpty = TextUtils.isEmpty(entry.number);
+ boolean labelEmpty = TextUtils.isEmpty(entry.label) || numberEmpty;
+ if (labelEmpty && numberEmpty) {
+ line2.setVisibility(View.GONE);
+ } else {
+ line2.setVisibility(View.VISIBLE);
+
+ TextView label = (TextView) convertView.findViewById(R.id.label);
+ if (labelEmpty) {
+ label.setVisibility(View.GONE);
+ } else {
+ label.setText(entry.label);
+ label.setVisibility(View.VISIBLE);
}
- case POS_ACTIONS_HEADER: {
- TextView textView = (TextView) convertView;
- textView.setText(mContext.getResources().getString(
- R.string.header_actions));
- break;
- }
- default: {
- // Fill action with icon and text.
- ViewEntry entry = (ViewEntry) getItem(position);
- convertView.setTag(entry);
-
- ImageView icon = (ImageView) convertView.findViewById(R.id.icon);
- TextView text = (TextView) convertView.findViewById(R.id.text);
-
- icon.setImageResource(entry.icon);
- text.setText(entry.text);
-
- break;
- }
+
+ TextView number = (TextView) convertView.findViewById(R.id.number);
+ number.setText(entry.number);
}
return convertView;
}
-
}
public void onItemClick(AdapterView parent, View view, int position, long id) {
diff --git a/src/com/android/contacts/ContactsGroupSyncSelector.java b/src/com/android/contacts/ContactsGroupSyncSelector.java
index 6081c79..80b5166 100644
--- a/src/com/android/contacts/ContactsGroupSyncSelector.java
+++ b/src/com/android/contacts/ContactsGroupSyncSelector.java
@@ -112,6 +112,12 @@
}
case R.id.ok: {
+ // The list isn't setup yet, so just return without doing anything.
+ if (mChecked == null) {
+ finish();
+ return;
+ }
+
final ContentResolver resolver = getContentResolver();
if (mSyncAllGroups) {
// For now we only support a single account and the UI doesn't know what
diff --git a/src/com/android/contacts/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index 593ae0f..b9dc4f2 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -26,17 +26,22 @@
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
+import android.content.IContentProvider;
+import android.content.ISyncAdapter;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.CharArrayBuffer;
import android.database.Cursor;
import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Parcelable;
+import android.os.RemoteException;
import android.preference.PreferenceManager;
import android.provider.Contacts;
import android.provider.Contacts.ContactMethods;
+import android.provider.Contacts.ContactMethodsColumns;
import android.provider.Contacts.Groups;
import android.provider.Contacts.Intents;
import android.provider.Contacts.People;
@@ -45,6 +50,7 @@
import android.provider.Contacts.Intents.UI;
import android.text.TextUtils;
import android.util.Log;
+import android.util.SparseArray;
import android.view.ContextMenu;
import android.view.Gravity;
import android.view.KeyEvent;
@@ -54,15 +60,20 @@
import android.view.View;
import android.view.ViewGroup;
import android.view.ContextMenu.ContextMenuInfo;
+import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.AlphabetIndexer;
+import android.widget.Filter;
+import android.widget.ImageView;
import android.widget.ListView;
import android.widget.ResourceCursorAdapter;
import android.widget.SectionIndexer;
import android.widget.TextView;
-import java.util.ArrayList;
+import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.Locale;
/**
* Displays a list of contacts. Usually is embedded into the ContactsActivity.
@@ -73,7 +84,7 @@
private static final String LIST_STATE_KEY = "liststate";
private static final String FOCUS_KEY = "focused";
-
+
static final int MENU_ITEM_VIEW_CONTACT = 1;
static final int MENU_ITEM_CALL = 2;
static final int MENU_ITEM_EDIT_BEFORE_CALL = 3;
@@ -83,6 +94,7 @@
static final int MENU_ITEM_DELETE = 7;
static final int MENU_ITEM_TOGGLE_STAR = 8;
+ public static final int MENU_SEARCH = 1;
public static final int MENU_DIALER = 9;
public static final int MENU_NEW_CONTACT = 10;
public static final int MENU_DISPLAY_GROUP = 11;
@@ -97,6 +109,8 @@
static final int MODE_MASK_NO_FILTER = 0x20000000;
/** Mask for having a "create new contact" header in the list */
static final int MODE_MASK_CREATE_NEW = 0x10000000;
+ /** Mask for showing photos in the list */
+ static final int MODE_MASK_SHOW_PHOTOS = 0x08000000;
/** Unknown mode */
static final int MODE_UNKNOWN = 0;
@@ -111,7 +125,7 @@
/** Show frequently contacted contacts */
static final int MODE_FREQUENT = 30;
/** Show starred and the frequent */
- static final int MODE_STREQUENT = 35;
+ static final int MODE_STREQUENT = 35 | MODE_MASK_SHOW_PHOTOS;
/** Show all contacts and pick them when clicking */
static final int MODE_PICK_CONTACT = 40 | MODE_MASK_PICKER;
/** Show all contacts as well as the option to create a new one */
@@ -125,6 +139,8 @@
55 | MODE_MASK_PICKER | MODE_MASK_NO_PRESENCE | MODE_MASK_NO_FILTER;
/** Run a search query */
static final int MODE_QUERY = 60 | MODE_MASK_NO_FILTER;
+ /** Show all contacts matching query, or handle special cases where 0 or 1 contacts found. */
+ static final int MODE_SHOW_OR_CREATE_CONTACT = 65 | MODE_MASK_PICKER | MODE_MASK_NO_FILTER;
static final int DEFAULT_MODE = MODE_ALL_CONTACTS;
@@ -154,6 +170,7 @@
static final String NAME_COLUMN = People.DISPLAY_NAME;
+ static final String SORT_STRING = People.SORT_STRING;
static final String[] CONTACTS_PROJECTION = new String[] {
People._ID, // 0
@@ -165,6 +182,7 @@
People.PRIMARY_PHONE_ID, // 6
People.PRIMARY_EMAIL_ID, // 7
People.PRESENCE_STATUS, // 8
+ SORT_STRING, // 9
};
static final String[] STREQUENT_PROJECTION = new String[] {
@@ -177,7 +195,8 @@
People.PRIMARY_PHONE_ID, // 6
People.PRIMARY_EMAIL_ID, // 7
People.PRESENCE_STATUS, // 8
- People.TIMES_CONTACTED, // 9 (not displayed, but required for the order by to work)
+ "photo_data", // 9
+ People.TIMES_CONTACTED, // 10 (not displayed, but required for the order by to work)
};
static final String[] PHONES_PROJECTION = new String[] {
@@ -187,6 +206,7 @@
Phones.TYPE, // 3
Phones.LABEL, // 4
Phones.STARRED, // 5
+ Phones.PERSON_ID, // 6
};
static final String[] CONTACT_METHODS_PROJECTION = new String[] {
@@ -196,6 +216,7 @@
ContactMethods.TYPE, // 3
ContactMethods.LABEL, // 4
ContactMethods.STARRED, // 5
+ ContactMethods.PERSON_ID, // 6
};
static final int ID_COLUMN_INDEX = 0;
@@ -208,14 +229,16 @@
static final int PRIMARY_PHONE_ID_COLUMN_INDEX = 6;
static final int PRIMARY_EMAIL_ID_COLUMN_INDEX = 7;
static final int SERVER_STATUS_COLUMN_INDEX = 8;
+ static final int PHOTO_COLUMN_INDEX = 9;
+ static final int SORT_STRING_INDEX = 9;
+ static final int PHONES_PERSON_ID_INDEX = 6;
+ static final int CONTACT_METHODS_PERSON_ID_INDEX = 6;
static final int DISPLAY_GROUP_INDEX_ALL_CONTACTS = 0;
static final int DISPLAY_GROUP_INDEX_ALL_CONTACTS_WITH_PHONES = 1;
static final int DISPLAY_GROUP_INDEX_MY_CONTACTS = 2;
-
- static final String SORT_ORDER = NAME_COLUMN + " COLLATE LOCALIZED ASC";
-
+
private static final int QUERY_TOKEN = 42;
private static final String[] GROUPS_PROJECTION = new String[] {
@@ -229,7 +252,7 @@
ContactItemListAdapter mAdapter;
- private int mMode = DEFAULT_MODE;
+ int mMode = DEFAULT_MODE;
// The current display group
private String mDisplayInfo;
private int mDisplayType;
@@ -246,6 +269,28 @@
private Uri mGroupFilterUri;
private Uri mGroupUri;
private boolean mJustCreated;
+ private boolean mSyncEnabled;
+
+ /**
+ * {@link Bundle} of extras to include when launching
+ * {@link Intents.Insert#ACTION}, usually when responding to
+ * {@link Intents#SHOW_OR_CREATE_CONTACT}.
+ */
+ private Bundle mCreateExtras;
+
+ /**
+ * Title to display to user when asking if a contact should be created,
+ * usually the requested E-mail address or phone number when responding to a
+ * {@link Intents#SHOW_OR_CREATE_CONTACT}.
+ */
+ private String mCreateData;
+
+ /**
+ * Cursor row index that holds reference back to {@link People#_ID}, such as
+ * {@link ContactMethods#PERSON_ID}. Used when responding to a
+ * {@link Intents#SHOW_OR_CREATE_CONTACT}.
+ */
+ private int mCreatePersonIndex;
/**
* Used to keep track of the scroll state of the list.
@@ -267,6 +312,23 @@
getContentResolver().delete(mUri, null, null);
}
}
+
+ private class IntentClickListener implements DialogInterface.OnClickListener {
+ private Activity mParent;
+ private Intent mIntent;
+
+ public IntentClickListener(Activity parent, Intent intent) {
+ mParent = parent;
+ mIntent = intent;
+ }
+
+ public void onClick(DialogInterface dialog, int which) {
+ if (mIntent != null) {
+ mParent.startActivity(mIntent);
+ }
+ mParent.finish();
+ }
+ }
@Override
protected void onCreate(Bundle icicle) {
@@ -374,6 +436,8 @@
startActivity(newIntent);
finish();
return;
+ } else if (Intents.SHOW_OR_CREATE_CONTACT.equals(action)) {
+ mMode = MODE_SHOW_OR_CREATE_CONTACT;
}
if (mMode == MODE_UNKNOWN) {
@@ -400,7 +464,7 @@
// Set the proper empty string
setEmptyText();
- mAdapter = new ContactItemListAdapter(this, R.layout.contacts_list_item, null);
+ mAdapter = new ContactItemListAdapter(this);
setListAdapter(mAdapter);
// We manually save/restore the listview state
@@ -408,6 +472,78 @@
mQueryHandler = new QueryHandler(this);
mJustCreated = true;
+
+ // Check to see if sync is enabled
+ final ContentResolver resolver = getContentResolver();
+ IContentProvider provider = resolver.acquireProvider(Contacts.CONTENT_URI);
+ if (provider == null) {
+ // No contacts provider, bail.
+ finish();
+ return;
+ }
+
+ try {
+ ISyncAdapter sa = provider.getSyncAdapter();
+ mSyncEnabled = sa != null;
+ } catch (RemoteException e) {
+ mSyncEnabled = false;
+ } finally {
+ resolver.releaseProvider(provider);
+ }
+ }
+
+ /**
+ * Handles special cases of the {@link Intents#SHOW_OR_CREATE_CONTACT}
+ * intent. When zero results found, prompt user to create new contact. When
+ * one contact found, shortcut to viewing that contact.
+ *
+ * @param c Valid cursor after performing query
+ */
+ private void handleShowOrCreate(final Cursor c) {
+ int count = 0;
+ long personId = 0;
+ if (c != null) {
+ count = c.getCount();
+ if (count == 1 && c.moveToFirst()) {
+ // Try reading ID for the only contact returned
+ personId = c.getLong(mCreatePersonIndex);
+ }
+ }
+
+ if (count == 1) {
+ // If we only found one item, jump right to viewing it
+ Intent showIntent = new Intent(Intent.ACTION_VIEW,
+ ContentUris.withAppendedId(People.CONTENT_URI, personId));
+ startActivity(showIntent);
+ finish();
+
+ } else if (count == 0) {
+ // Insert create values coming from our request
+ Intent createIntent = new Intent(Intent.ACTION_INSERT, People.CONTENT_URI);
+ createIntent.putExtras(mCreateExtras);
+
+ // Prompt user if they really want to start creating a new
+ // contact. Skip this step if the caller requested {@link
+ // Contacts#EXTRA_FORCE_CREATE}.
+ boolean forceCreate = getIntent().getBooleanExtra(Intents.EXTRA_FORCE_CREATE, false);
+
+ if (forceCreate) {
+ startActivity(createIntent);
+ finish();
+ } else {
+ CharSequence message = getResources().getString(
+ R.string.add_contact_dlg_message_fmt, mCreateData);
+
+ new AlertDialog.Builder(this)
+ .setTitle(R.string.add_contact_dlg_title)
+ .setMessage(message)
+ .setPositiveButton(android.R.string.ok,
+ new IntentClickListener(this, createIntent))
+ .setNegativeButton(android.R.string.cancel,
+ new IntentClickListener(this, null))
+ .show();
+ }
+ }
}
private void setEmptyText() {
@@ -417,7 +553,11 @@
switch (mMode) {
case MODE_GROUP:
if (Groups.GROUP_MY_CONTACTS.equals(mDisplayInfo)) {
- empty.setText(getText(R.string.noContactsHelpText));
+ if (mSyncEnabled) {
+ empty.setText(getText(R.string.noContactsHelpTextWithSync));
+ } else {
+ empty.setText(getText(R.string.noContactsHelpText));
+ }
gravity = Gravity.NO_GRAVITY;
} else {
empty.setText(getString(R.string.groupEmpty, mDisplayInfo));
@@ -560,13 +700,22 @@
}
}
- if (runQuery) {
- // Calling requery here may cause an ANR, so always do the async query
+ if (mJustCreated && runQuery) {
+ // We need to start a query here the first time the activity is launched, as long
+ // as we aren't doing a filter.
startQuery();
}
mJustCreated = false;
}
+ @Override
+ protected void onRestart() {
+ super.onRestart();
+
+ // The cursor was killed off in onStop(), so we need to get a new one here
+ startQuery();
+ }
+
private void updateGroup() {
if (mDefaultMode) {
setDefaultMode();
@@ -598,7 +747,7 @@
// We don't want the list to display the empty state, since when we resume it will still
// be there and show up while the new query is happening. After the async query finished
- // in response to onResume() setLoading(false) will be called.
+ // in response to onRestart() setLoading(false) will be called.
mAdapter.setLoading(true);
mAdapter.changeCursor(null);
@@ -617,6 +766,10 @@
return false;
}
+ // Search
+ menu.add(0, MENU_SEARCH, 0, R.string.menu_search)
+ .setIcon(android.R.drawable.ic_menu_search);
+
// New contact
menu.add(0, MENU_NEW_CONTACT, 0, R.string.menu_newContact)
.setIcon(android.R.drawable.ic_menu_add)
@@ -630,11 +783,13 @@
}
// Sync settings
- Intent syncIntent = new Intent(Intent.ACTION_VIEW);
- syncIntent.setClass(this, ContactsGroupSyncSelector.class);
- menu.add(0, 0, 0, R.string.syncGroupPreference)
- .setIcon(com.android.internal.R.drawable.ic_menu_refresh)
- .setIntent(syncIntent);
+ if (mSyncEnabled) {
+ Intent syncIntent = new Intent(Intent.ACTION_VIEW);
+ syncIntent.setClass(this, ContactsGroupSyncSelector.class);
+ menu.add(0, 0, 0, R.string.syncGroupPreference)
+ .setIcon(com.android.internal.R.drawable.ic_menu_refresh)
+ .setIntent(syncIntent);
+ }
// SIM import
Intent importIntent = new Intent(Intent.ACTION_VIEW);
@@ -651,7 +806,7 @@
* Implements the handler for display group selection.
*/
public void onClick(DialogInterface dialogInterface, int which) {
- if (which == DialogInterface.BUTTON1) {
+ if (which == DialogInterface.BUTTON_POSITIVE) {
// The OK button was pressed
if (mDisplayGroupOriginalSelection != mDisplayGroupCurrentSelection) {
// Set the group to display
@@ -691,16 +846,21 @@
@Override
public boolean onOptionsItemSelected(MenuItem item) {
- if (item.getItemId() == MENU_DISPLAY_GROUP) {
- AlertDialog.Builder builder = new AlertDialog.Builder(this)
- .setTitle(R.string.select_group_title)
- .setPositiveButton(android.R.string.ok, this)
- .setNegativeButton(android.R.string.cancel, null);
-
- setGroupEntries(builder);
-
- builder.show();
- return true;
+ switch (item.getItemId()) {
+ case MENU_DISPLAY_GROUP:
+ AlertDialog.Builder builder = new AlertDialog.Builder(this)
+ .setTitle(R.string.select_group_title)
+ .setPositiveButton(android.R.string.ok, this)
+ .setNegativeButton(android.R.string.cancel, null);
+
+ setGroupEntries(builder);
+
+ builder.show();
+ return true;
+
+ case MENU_SEARCH:
+ startSearch(null, false, null, false);
+ return true;
}
return false;
}
@@ -859,6 +1019,11 @@
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
+ // Hide soft keyboard, if visible
+ InputMethodManager inputMethodManager = (InputMethodManager)
+ getSystemService(Context.INPUT_METHOD_SERVICE);
+ inputMethodManager.hideSoftInputFromWindow(mList.getWindowToken(), 0);
+
if (mMode == MODE_INSERT_OR_EDIT_CONTACT) {
Intent intent;
if (position == 0) {
@@ -881,6 +1046,14 @@
Intent intent = new Intent(Intent.ACTION_VIEW,
ContentUris.withAppendedId(People.CONTENT_URI, id));
startActivity(intent);
+ } else if (mMode == MODE_SHOW_OR_CREATE_CONTACT) {
+ // Figure out person ID because we might be using indirect cursor
+ Cursor c = (Cursor) mAdapter.getItem(position);
+ long personId = c.getLong(mCreatePersonIndex);
+ Intent intent = new Intent(Intent.ACTION_VIEW,
+ ContentUris.withAppendedId(People.CONTENT_URI, personId));
+ startActivity(intent);
+ finish();
} else if (mMode == MODE_PICK_CONTACT
|| mMode == MODE_PICK_OR_CREATE_CONTACT) {
Uri uri = ContentUris.withAppendedId(People.CONTENT_URI, id);
@@ -966,6 +1139,15 @@
}
}
+ private static String getSortOrder(String[] projectionType) {
+ if (Locale.getDefault().equals(Locale.JAPAN) &&
+ projectionType == CONTACTS_PROJECTION) {
+ return SORT_STRING + " ASC";
+ } else {
+ return NAME_COLUMN + " COLLATE LOCALIZED ASC";
+ }
+ }
+
void startQuery() {
mAdapter.setLoading(true);
@@ -976,7 +1158,8 @@
switch (mMode) {
case MODE_GROUP:
mQueryHandler.startQuery(QUERY_TOKEN, null,
- mGroupUri, CONTACTS_PROJECTION, null, null, SORT_ORDER);
+ mGroupUri, CONTACTS_PROJECTION, null, null,
+ getSortOrder(CONTACTS_PROJECTION));
break;
case MODE_ALL_CONTACTS:
@@ -984,30 +1167,80 @@
case MODE_PICK_OR_CREATE_CONTACT:
case MODE_INSERT_OR_EDIT_CONTACT:
mQueryHandler.startQuery(QUERY_TOKEN, null, People.CONTENT_URI, CONTACTS_PROJECTION,
- null, null, SORT_ORDER);
+ null, null, getSortOrder(CONTACTS_PROJECTION));
break;
case MODE_WITH_PHONES:
mQueryHandler.startQuery(QUERY_TOKEN, null, People.CONTENT_URI, CONTACTS_PROJECTION,
- People.PRIMARY_PHONE_ID + " IS NOT NULL", null, People.DEFAULT_SORT_ORDER);
+ People.PRIMARY_PHONE_ID + " IS NOT NULL", null,
+ getSortOrder(CONTACTS_PROJECTION));
break;
case MODE_QUERY: {
mQuery = getIntent().getStringExtra(SearchManager.QUERY);
mQueryHandler.startQuery(QUERY_TOKEN, null, getPeopleFilterUri(mQuery),
- CONTACTS_PROJECTION, null, null, SORT_ORDER);
+ CONTACTS_PROJECTION, null, null,
+ getSortOrder(CONTACTS_PROJECTION));
+ break;
+ }
+
+ case MODE_SHOW_OR_CREATE_CONTACT: {
+ // Caller requested a specific E-mail address or phone number,
+ // so show only matching entries. Once the query finishes we
+ // handle edge cases of 0 or 1 items.
+ Uri data = getIntent().getData();
+ String scheme = null;
+ String ssp = null;
+ if (data != null) {
+ scheme = data.getScheme();
+ ssp = data.getSchemeSpecificPart();
+ mCreateData = ssp;
+ }
+
+ mCreateExtras = new Bundle();
+ Bundle originalExtras = getIntent().getExtras();
+ if (originalExtras != null) {
+ mCreateExtras.putAll(originalExtras);
+ }
+
+ if ("mailto".equals(scheme)) {
+ mCreateExtras.putString(Intents.Insert.EMAIL, ssp);
+ mCreatePersonIndex = CONTACT_METHODS_PERSON_ID_INDEX;
+
+ mQueryHandler.startQuery(QUERY_TOKEN, null,
+ ContactMethods.CONTENT_URI, CONTACT_METHODS_PROJECTION,
+ ContactMethodsColumns.KIND + "=" + Contacts.KIND_EMAIL + " AND " +
+ ContactMethods.DATA + "=?", new String[] { ssp },
+ getSortOrder(CONTACT_METHODS_PROJECTION));
+
+ } else if ("tel".equals(scheme)) {
+ mCreateExtras.putString(Intents.Insert.PHONE, ssp);
+ mCreatePersonIndex = PHONES_PERSON_ID_INDEX;
+
+ mQueryHandler.startQuery(QUERY_TOKEN, null,
+ Uri.withAppendedPath(Phones.CONTENT_FILTER_URL, ssp),
+ PHONES_PROJECTION, null, null,
+ getSortOrder(PHONES_PROJECTION));
+
+ } else {
+ Log.w(TAG, "Invalid intent:" + getIntent());
+ finish();
+ }
+
break;
}
case MODE_STARRED:
- mQueryHandler.startQuery(QUERY_TOKEN, null, People.CONTENT_URI, CONTACTS_PROJECTION,
- People.STARRED + "=1", null, SORT_ORDER);
+ mQueryHandler.startQuery(QUERY_TOKEN, null, People.CONTENT_URI,
+ CONTACTS_PROJECTION,
+ People.STARRED + "=1", null, getSortOrder(CONTACTS_PROJECTION));
break;
case MODE_FREQUENT:
- mQueryHandler.startQuery(QUERY_TOKEN, null, People.CONTENT_URI, CONTACTS_PROJECTION,
+ mQueryHandler.startQuery(QUERY_TOKEN, null,
+ People.CONTENT_URI, CONTACTS_PROJECTION,
People.TIMES_CONTACTED + " > 0", null,
- People.TIMES_CONTACTED + " DESC, " + NAME_COLUMN + " ASC");
+ People.TIMES_CONTACTED + " DESC, " + getSortOrder(CONTACTS_PROJECTION));
break;
case MODE_STREQUENT:
@@ -1018,13 +1251,14 @@
case MODE_PICK_PHONE:
mQueryHandler.startQuery(QUERY_TOKEN, null, Phones.CONTENT_URI, PHONES_PROJECTION,
- null, null, SORT_ORDER);
+ null, null, getSortOrder(PHONES_PROJECTION));
break;
case MODE_PICK_POSTAL:
mQueryHandler.startQuery(QUERY_TOKEN, null, ContactMethods.CONTENT_URI,
CONTACT_METHODS_PROJECTION,
- ContactMethods.KIND + "=" + Contacts.KIND_POSTAL, null, SORT_ORDER);
+ ContactMethods.KIND + "=" + Contacts.KIND_POSTAL, null,
+ getSortOrder(CONTACT_METHODS_PROJECTION));
break;
}
}
@@ -1047,7 +1281,7 @@
uri = Uri.withAppendedPath(mGroupFilterUri, Uri.encode(filter));
}
return resolver.query(uri, CONTACTS_PROJECTION, null, null,
- People.DEFAULT_SORT_ORDER);
+ getSortOrder(CONTACTS_PROJECTION));
}
case MODE_ALL_CONTACTS:
@@ -1055,23 +1289,25 @@
case MODE_PICK_OR_CREATE_CONTACT:
case MODE_INSERT_OR_EDIT_CONTACT: {
return resolver.query(getPeopleFilterUri(filter), CONTACTS_PROJECTION, null, null,
- SORT_ORDER);
+ getSortOrder(CONTACTS_PROJECTION));
}
case MODE_WITH_PHONES: {
return resolver.query(getPeopleFilterUri(filter), CONTACTS_PROJECTION,
- People.PRIMARY_PHONE_ID + " IS NOT NULL", null, SORT_ORDER);
+ People.PRIMARY_PHONE_ID + " IS NOT NULL", null,
+ getSortOrder(CONTACTS_PROJECTION));
}
case MODE_STARRED: {
return resolver.query(getPeopleFilterUri(filter), CONTACTS_PROJECTION,
- People.STARRED + "=1", null, SORT_ORDER);
+ People.STARRED + "=1", null, getSortOrder(CONTACTS_PROJECTION));
}
case MODE_FREQUENT: {
return resolver.query(getPeopleFilterUri(filter), CONTACTS_PROJECTION,
People.TIMES_CONTACTED + " > 0", null,
- People.TIMES_CONTACTED + " DESC, " + NAME_COLUMN + " ASC");
+ People.TIMES_CONTACTED + " DESC, " + getSortOrder(CONTACTS_PROJECTION));
+
}
case MODE_STREQUENT: {
@@ -1093,7 +1329,8 @@
} else {
uri = Phones.CONTENT_URI;
}
- return resolver.query(uri, PHONES_PROJECTION, null, null, SORT_ORDER);
+ return resolver.query(uri, PHONES_PROJECTION, null, null,
+ getSortOrder(PHONES_PROJECTION));
}
}
throw new UnsupportedOperationException("filtering not allowed in mode " + mMode);
@@ -1227,7 +1464,13 @@
final ContactsListActivity activity = mActivity.get();
if (activity != null && !activity.isFinishing()) {
activity.mAdapter.setLoading(false);
+ activity.getListView().clearTextFilter();
activity.mAdapter.changeCursor(cursor);
+
+ // Handle SHOW_OR_CREATE now that we have valid cursor
+ if (activity.mMode == MODE_SHOW_OR_CREATE_CONTACT) {
+ activity.handleShowOrCreate(cursor);
+ }
// Now that the cursor is populated again, it's possible to restore the list state
if (activity.mListState != null) {
@@ -1251,24 +1494,24 @@
public CharArrayBuffer labelBuffer = new CharArrayBuffer(128);
public TextView numberView;
public CharArrayBuffer numberBuffer = new CharArrayBuffer(128);
+ public ImageView presenceView;
+ public ImageView photoView;
}
private final class ContactItemListAdapter extends ResourceCursorAdapter
implements SectionIndexer {
-
- private AlphabetIndexer mIndexer;
+ private SectionIndexer mIndexer;
private String mAlphabet;
private boolean mLoading = true;
private CharSequence mUnknownNameText;
private CharSequence[] mLocalizedLabels;
+ private boolean mDisplayPhotos = false;
+ private SparseArray<SoftReference<Bitmap>> mBitmapCache = null;
- public ContactItemListAdapter(Context context, int resource, Cursor cursor) {
- super(context, resource, cursor);
+ public ContactItemListAdapter(Context context) {
+ super(context, R.layout.contacts_list_item, null, false);
mAlphabet = context.getString(com.android.internal.R.string.fast_scroll_alphabet);
- if (cursor != null) {
- mIndexer = new AlphabetIndexer(cursor, NAME_COLUMN_INDEX, mAlphabet);
- }
mUnknownNameText = context.getText(android.R.string.unknownName);
switch (mMode) {
@@ -1281,8 +1524,40 @@
Contacts.KIND_PHONE);
break;
}
+
+ if ((mMode & MODE_MASK_SHOW_PHOTOS) == MODE_MASK_SHOW_PHOTOS) {
+ mDisplayPhotos = true;
+ setViewResource(R.layout.contacts_list_item_photo);
+ mBitmapCache = new SparseArray<SoftReference<Bitmap>>();
+ }
}
+ private SectionIndexer getNewIndexer(Cursor cursor) {
+ if (Locale.getDefault().equals(Locale.JAPAN)) {
+ return new JapaneseContactListIndexer(cursor, SORT_STRING_INDEX);
+ } else {
+ return new AlphabetIndexer(cursor, NAME_COLUMN_INDEX, mAlphabet);
+ }
+ }
+
+ /**
+ * Callback on the UI thread when the content observer on the backing cursor fires.
+ * Instead of calling requery we need to do an async query so that the requery doesn't
+ * block the UI thread for a long time.
+ */
+ @Override
+ protected void onContentChanged() {
+ CharSequence constraint = getListView().getTextFilter();
+ if (!TextUtils.isEmpty(constraint)) {
+ // Reset the filter state then start an async filter operation
+ Filter filter = getFilter();
+ filter.filter(constraint);
+ } else {
+ // Start an async query
+ startQuery();
+ }
+ }
+
public void setLoading(boolean loading) {
mLoading = loading;
}
@@ -1302,7 +1577,7 @@
}
}
}
-
+
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
final View view = super.newView(context, cursor, parent);
@@ -1310,8 +1585,9 @@
final ContactListItemCache cache = new ContactListItemCache();
cache.nameView = (TextView) view.findViewById(R.id.name);
cache.labelView = (TextView) view.findViewById(R.id.label);
- cache.labelView.setCompoundDrawablePadding(3);
cache.numberView = (TextView) view.findViewById(R.id.number);
+ cache.presenceView = (ImageView) view.findViewById(R.id.presence);
+ cache.photoView = (ImageView) view.findViewById(R.id.photo);
view.setTag(cache);
return view;
@@ -1332,17 +1608,19 @@
// Set the phone number
TextView numberView = cache.numberView;
+ TextView labelView = cache.labelView;
cursor.copyStringToBuffer(NUMBER_COLUMN_INDEX, cache.numberBuffer);
size = cache.numberBuffer.sizeCopied;
if (size != 0) {
numberView.setText(cache.numberBuffer.data, 0, size);
numberView.setVisibility(View.VISIBLE);
+ labelView.setVisibility(View.VISIBLE);
} else {
numberView.setVisibility(View.GONE);
+ labelView.setVisibility(View.GONE);
}
// Set the label
- TextView labelView = cache.labelView;
if (!cursor.isNull(TYPE_COLUMN_INDEX)) {
int type = cursor.getInt(TYPE_COLUMN_INDEX);
@@ -1358,32 +1636,66 @@
labelView.setText(cache.labelBuffer.data, 0, cache.labelBuffer.sizeCopied);
}
} else {
- // Set the text to a length of 0
- labelView.setText(cache.labelBuffer.data, 0, 0);
+ // There is no label, hide the the view
+ labelView.setVisibility(View.GONE);
}
- // Set the proper icon in the label view
+
+ // Set the proper icon (star or presence or nothing)
+ ImageView presenceView = cache.presenceView;
if (mMode != MODE_STREQUENT) {
if ((mMode & MODE_MASK_NO_PRESENCE) == 0) {
int serverStatus;
if (!cursor.isNull(SERVER_STATUS_COLUMN_INDEX)) {
serverStatus = cursor.getInt(SERVER_STATUS_COLUMN_INDEX);
- labelView.setCompoundDrawablesWithIntrinsicBounds(
- getResources().getDrawable(
- Presence.getPresenceIconResourceId(serverStatus)),
- null, null, null);
+ presenceView.setImageResource(
+ Presence.getPresenceIconResourceId(serverStatus));
+ presenceView.setVisibility(View.VISIBLE);
} else {
- labelView.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
+ presenceView.setVisibility(View.GONE);
}
} else {
- labelView.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
+ presenceView.setVisibility(View.GONE);
}
} else {
if (cursor.getInt(STARRED_COLUMN_INDEX) != 0) {
- labelView.setCompoundDrawablesWithIntrinsicBounds(
- getResources().getDrawable(R.drawable.star_on),
- null, null, null);
+ presenceView.setImageResource(R.drawable.star_on);
+ presenceView.setVisibility(View.VISIBLE);
} else {
- labelView.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
+ presenceView.setVisibility(View.GONE);
+ }
+ }
+
+ // Set the photo, if requested
+ if (mDisplayPhotos) {
+ Bitmap photo = null;
+
+ // Look for the cached bitmap
+ int pos = cursor.getPosition();
+ SoftReference<Bitmap> ref = mBitmapCache.get(pos);
+ if (ref != null) {
+ photo = ref.get();
+ }
+
+ if (photo == null) {
+ // Bitmap cache miss, decode it from the cursor
+ if (!cursor.isNull(PHOTO_COLUMN_INDEX)) {
+ try {
+ byte[] photoData = cursor.getBlob(PHOTO_COLUMN_INDEX);
+ photo = BitmapFactory.decodeByteArray(photoData, 0,
+ photoData.length);
+ mBitmapCache.put(pos, new SoftReference<Bitmap>(photo));
+ } catch (OutOfMemoryError e) {
+ // Not enough memory for the photo, use the default one instead
+ photo = null;
+ }
+ }
+ }
+
+ // Bind the photo, or use the fallback no photo resource
+ if (photo != null) {
+ cache.photoView.setImageBitmap(photo);
+ } else {
+ cache.photoView.setImageResource(R.drawable.ic_contact_picture);
}
}
}
@@ -1391,14 +1703,33 @@
@Override
public void changeCursor(Cursor cursor) {
super.changeCursor(cursor);
+
+ // Update the indexer for the fast scroll widget
updateIndexer(cursor);
+
+ // Clear the photo bitmap cache, if there is one
+ if (mBitmapCache != null) {
+ mBitmapCache.clear();
+ }
}
private void updateIndexer(Cursor cursor) {
if (mIndexer == null) {
- mIndexer = new AlphabetIndexer(cursor, NAME_COLUMN_INDEX, mAlphabet);
+ mIndexer = getNewIndexer(cursor);
} else {
- mIndexer.setCursor(cursor);
+ if (Locale.getDefault().equals(Locale.JAPAN)) {
+ if (mIndexer instanceof JapaneseContactListIndexer) {
+ ((JapaneseContactListIndexer)mIndexer).setCursor(cursor);
+ } else {
+ mIndexer = getNewIndexer(cursor);
+ }
+ } else {
+ if (mIndexer instanceof AlphabetIndexer) {
+ ((AlphabetIndexer)mIndexer).setCursor(cursor);
+ } else {
+ mIndexer = getNewIndexer(cursor);
+ }
+ }
}
}
@@ -1430,13 +1761,16 @@
// No cursor, the section doesn't exist so just return 0
return 0;
}
- mIndexer = new AlphabetIndexer(cursor, NAME_COLUMN_INDEX, mAlphabet);
+ mIndexer = getNewIndexer(cursor);
}
return mIndexer.getPositionForSection(sectionIndex);
}
public int getSectionForPosition(int position) {
+ // Note: JapaneseContactListIndexer depends on the fact
+ // this method always returns 0. If you change this,
+ // please care it too.
return 0;
}
}
diff --git a/src/com/android/contacts/DialtactsActivity.java b/src/com/android/contacts/DialtactsActivity.java
index 1933c4c..73d702b 100644
--- a/src/com/android/contacts/DialtactsActivity.java
+++ b/src/com/android/contacts/DialtactsActivity.java
@@ -19,11 +19,13 @@
import android.app.Activity;
import android.app.TabActivity;
import android.content.Intent;
+import android.content.SharedPreferences;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.provider.CallLog;
import android.provider.Contacts;
import android.provider.CallLog.Calls;
import android.provider.Contacts.Intents.UI;
@@ -40,20 +42,24 @@
*/
public class DialtactsActivity extends TabActivity implements TabHost.OnTabChangeListener {
private static final String TAG = "Dailtacts";
+ private static final String FAVORITES_ENTRY_COMPONENT =
+ "com.android.contacts.DialtactsFavoritesEntryActivity";
- public static final String EXTRA_IGNORE_STATE = "ignore-state";
+ private static final int TAB_INDEX_DIALER = 0;
+ private static final int TAB_INDEX_CALL_LOG = 1;
+ private static final int TAB_INDEX_CONTACTS = 2;
+ private static final int TAB_INDEX_FAVORITES = 3;
+
+ static final String EXTRA_IGNORE_STATE = "ignore-state";
- private static final int FAVORITES_STARRED = 1;
- private static final int FAVORITES_FREQUENT = 2;
- private static final int FAVORITES_STREQUENT = 3;
-
- /** Defines what is displayed in the right tab */
- private static final int FAVORITES_TAB_MODE = FAVORITES_STREQUENT;
+ /** Name of the dialtacts shared preferences */
+ static final String PREFS_DIALTACTS = "dialtacts";
+ /** If true, when handling the contacts intent the favorites tab will be shown instead */
+ static final String PREF_FAVORITES_AS_CONTACTS = "favorites_as_contacts";
+ static final boolean PREF_FAVORITES_AS_CONTACTS_DEFAULT = false;
- protected TabHost mTabHost;
-
- private String mFilterText;
-
+ private TabHost mTabHost;
+ private String mFilterText;
private Uri mDialUri;
@Override
@@ -76,13 +82,26 @@
setupFavoritesTab();
setCurrentTab(intent);
-
- if (intent.getAction().equals(Contacts.Intents.UI.FILTER_CONTACTS_ACTION)
+
+ if (intent.getAction().equals(Contacts.Intents.UI.FILTER_CONTACTS_ACTION)
&& icicle == null) {
setupFilterText(intent);
}
}
+ @Override
+ protected void onPause() {
+ super.onPause();
+
+ int currentTabIndex = mTabHost.getCurrentTab();
+ if (currentTabIndex == TAB_INDEX_CONTACTS || currentTabIndex == TAB_INDEX_FAVORITES) {
+ SharedPreferences.Editor editor = getSharedPreferences(PREFS_DIALTACTS, MODE_PRIVATE)
+ .edit();
+ editor.putBoolean(PREF_FAVORITES_AS_CONTACTS, currentTabIndex == TAB_INDEX_FAVORITES);
+ editor.commit();
+ }
+ }
+
private void fixIntent(Intent intent) {
// This should be cleaned up: the call key used to send an Intent
// that just said to go to the recent calls list. It now sends this
@@ -95,49 +114,44 @@
}
private void setupCallLogTab() {
+ // Force the class since overriding tab entries doesn't work
+ Intent intent = new Intent("com.android.phone.action.RECENT_CALLS");
+ intent.setClass(this, RecentCallsListActivity.class);
+
mTabHost.addTab(mTabHost.newTabSpec("call_log")
.setIndicator(getString(R.string.recentCallsIconLabel),
getResources().getDrawable(R.drawable.ic_tab_recent))
- .setContent(new Intent("com.android.phone.action.RECENT_CALLS")));
+ .setContent(intent));
}
private void setupDialerTab() {
+ Intent intent = new Intent("com.android.phone.action.TOUCH_DIALER");
+ intent.setClass(this, TwelveKeyDialer.class);
+
mTabHost.addTab(mTabHost.newTabSpec("dialer")
.setIndicator(getString(R.string.dialerIconLabel),
getResources().getDrawable(R.drawable.ic_tab_dialer))
- .setContent(new Intent("com.android.phone.action.TOUCH_DIALER")));
+ .setContent(intent));
}
private void setupContactsTab() {
+ Intent intent = new Intent(UI.LIST_DEFAULT);
+ intent.setClass(this, ContactsListActivity.class);
+
mTabHost.addTab(mTabHost.newTabSpec("contacts")
.setIndicator(getText(R.string.contactsIconLabel),
getResources().getDrawable(R.drawable.ic_tab_contacts))
- .setContent(new Intent(UI.LIST_DEFAULT)));
+ .setContent(intent));
}
private void setupFavoritesTab() {
- Intent tab2Intent;
- switch (FAVORITES_TAB_MODE) {
- case FAVORITES_STARRED:
- tab2Intent = new Intent(UI.LIST_STARRED_ACTION);
- break;
-
- case FAVORITES_FREQUENT:
- tab2Intent = new Intent(UI.LIST_FREQUENT_ACTION);
- break;
-
- case FAVORITES_STREQUENT:
- tab2Intent = new Intent(UI.LIST_STREQUENT_ACTION);
- break;
-
- default:
- throw new UnsupportedOperationException("unknown default mode");
- }
- Drawable tab2Icon = getResources().getDrawable(R.drawable.ic_tab_starred);
+ Intent intent = new Intent(UI.LIST_STREQUENT_ACTION);
+ intent.setClass(this, ContactsListActivity.class);
mTabHost.addTab(mTabHost.newTabSpec("favorites")
- .setIndicator(getString(R.string.contactsFavoritesLabel), tab2Icon)
- .setContent(tab2Intent));
+ .setIndicator(getString(R.string.contactsFavoritesLabel),
+ getResources().getDrawable(R.drawable.ic_tab_starred))
+ .setContent(intent));
}
/**
@@ -168,24 +182,50 @@
/**
* Sets the current tab based on the intent's request type
*
- * @param recentCallsRequest true is the recent calls tab is desired, false oltherwise
+ * @param recentCallsRequest true is the recent calls tab is desired, false otherwise
*/
private void setCurrentTab(Intent intent) {
+ // If we got here by hitting send and we're in call forward along to the in-call activity
final boolean recentCallsRequest = Calls.CONTENT_TYPE.equals(intent.getType());
if (isSendKeyWhileInCall(intent, recentCallsRequest)) {
finish();
return;
}
- intent.putExtra(EXTRA_IGNORE_STATE, true);
- if (intent.getComponent().getClassName().equals(getClass().getName())) {
- if (recentCallsRequest) {
- mTabHost.setCurrentTab(1);
- } else {
- mTabHost.setCurrentTab(0);
- }
- } else {
- mTabHost.setCurrentTab(2);
+
+ // Dismiss menu provided by any children activities
+ Activity activity = getLocalActivityManager().
+ getActivity(mTabHost.getCurrentTabTag());
+ if (activity != null) {
+ activity.closeOptionsMenu();
}
+
+ // Tell the children activities that they should ignore any possible saved
+ // state and instead reload their state from the parent's intent
+ intent.putExtra(EXTRA_IGNORE_STATE, true);
+
+ // Choose the tab based on the inbound intent
+ String componentName = intent.getComponent().getClassName();
+ if (getClass().getName().equals(componentName)) {
+ if (recentCallsRequest) {
+ mTabHost.setCurrentTab(TAB_INDEX_CALL_LOG);
+ } else {
+ mTabHost.setCurrentTab(TAB_INDEX_DIALER);
+ }
+ } else if (FAVORITES_ENTRY_COMPONENT.equals(componentName)) {
+ mTabHost.setCurrentTab(TAB_INDEX_FAVORITES);
+ } else {
+ SharedPreferences prefs = getSharedPreferences(PREFS_DIALTACTS, MODE_PRIVATE);
+ boolean favoritesAsContacts = prefs.getBoolean(PREF_FAVORITES_AS_CONTACTS,
+ PREF_FAVORITES_AS_CONTACTS_DEFAULT);
+ if (favoritesAsContacts) {
+ mTabHost.setCurrentTab(TAB_INDEX_FAVORITES);
+ } else {
+ mTabHost.setCurrentTab(TAB_INDEX_CONTACTS);
+ }
+ }
+
+ // Tell the children activities that they should honor their saved states
+ // instead of the state from the parent's intent
intent.putExtra(EXTRA_IGNORE_STATE, false);
}
@@ -201,7 +241,8 @@
setupDialUri(newIntent);
}
}
-
+
+ /** Returns true if the given intent contains a phone number to populate the dialer with */
private boolean isDialIntent(Intent intent) {
final String action = intent.getAction();
if (Intent.ACTION_DIAL.equals(action)) {
diff --git a/src/com/android/contacts/EditContactActivity.java b/src/com/android/contacts/EditContactActivity.java
index fb8dd70..b89573b 100644
--- a/src/com/android/contacts/EditContactActivity.java
+++ b/src/com/android/contacts/EditContactActivity.java
@@ -16,8 +16,6 @@
package com.android.contacts;
-import com.google.android.collect.Lists;
-
import static com.android.contacts.ContactEntryAdapter.CONTACT_CUSTOM_RINGTONE_COLUMN;
import static com.android.contacts.ContactEntryAdapter.CONTACT_NAME_COLUMN;
import static com.android.contacts.ContactEntryAdapter.CONTACT_NOTES_COLUMN;
@@ -57,6 +55,7 @@
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.Bitmap;
@@ -70,6 +69,7 @@
import android.provider.Contacts;
import android.provider.Contacts.ContactMethods;
import android.provider.Contacts.Intents.Insert;
+import android.provider.Contacts.Groups;
import android.provider.Contacts.Organizations;
import android.provider.Contacts.People;
import android.provider.Contacts.Phones;
@@ -77,11 +77,10 @@
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
-import android.text.method.DialerKeyListener;
import android.text.method.TextKeyListener;
import android.text.method.TextKeyListener.Capitalize;
import android.util.Log;
-import android.view.ContextThemeWrapper;
+import android.util.SparseBooleanArray;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
@@ -92,27 +91,21 @@
import android.view.inputmethod.EditorInfo;
import android.widget.Button;
import android.widget.CheckBox;
-import android.widget.CompoundButton;
import android.widget.EditText;
-import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.LinearLayout;
-import android.widget.SimpleExpandableListAdapter;
import android.widget.TextView;
import android.widget.Toast;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
/**
* Activity for editing or inserting a contact. Note that if the contact data changes in the
* background while this activity is running, the updates will be overwritten.
*/
public final class EditContactActivity extends Activity implements View.OnClickListener,
- ExpandableListView.OnChildClickListener, TextWatcher, CheckBox.OnCheckedChangeListener {
+ TextWatcher, View.OnFocusChangeListener {
private static final String TAG = "EditContactActivity";
private static final int STATE_UNKNOWN = 0;
@@ -127,26 +120,25 @@
/** The launch code when picking a ringtone */
private static final int RINGTONE_PICKED = 3023;
- // Label picker position info
- final static int LABEL_PICKER_PHONES_POSITION = 0;
- final static int LABEL_PICKER_EMAIL_POSITION = 1;
- final static int LABEL_PICKER_IM_POSITION = 2;
- final static int LABEL_PICKER_POSTAL_POSITION = 3;
- final static int LABEL_PICKER_OTHER_POSITION = 4;
-
// These correspond to the string array in resources for picker "other" items
final static int OTHER_ORGANIZATION = 0;
final static int OTHER_NOTE = 1;
// Dialog IDs
- final static int LABEL_PICKER_ALL_TYPES_DIALOG = 1;
final static int DELETE_CONFIRMATION_DIALOG = 2;
+
+ // Section IDs
+ final static int SECTION_PHONES = 3;
+ final static int SECTION_EMAIL = 4;
+ final static int SECTION_IM = 5;
+ final static int SECTION_POSTAL = 6;
+ final static int SECTION_ORG = 7;
+ final static int SECTION_NOTE = 8;
// Menu item IDs
public static final int MENU_ITEM_SAVE = 1;
public static final int MENU_ITEM_DONT_SAVE = 2;
public static final int MENU_ITEM_DELETE = 3;
- public static final int MENU_ITEM_ADD = 5;
public static final int MENU_ITEM_PHOTO = 6;
/** Used to represent an invalid type for a contact entry */
@@ -170,8 +162,7 @@
private EditText mNameView;
private ImageView mPhotoImageView;
- private View mPhotoButton;
- private CheckBox mSendToVoicemailCheckBox;
+ private ViewGroup mContentView;
private LinearLayout mLayout;
private LayoutInflater mInflater;
private MenuItem mPhotoMenuItem;
@@ -187,26 +178,62 @@
/* package */ ArrayList<EditEntry> mEmailEntries = new ArrayList<EditEntry>();
/* package */ ArrayList<EditEntry> mImEntries = new ArrayList<EditEntry>();
/* package */ ArrayList<EditEntry> mPostalEntries = new ArrayList<EditEntry>();
+ /* package */ ArrayList<EditEntry> mOrgEntries = new ArrayList<EditEntry>();
+ /* package */ ArrayList<EditEntry> mNoteEntries = new ArrayList<EditEntry>();
/* package */ ArrayList<EditEntry> mOtherEntries = new ArrayList<EditEntry>();
/* package */ ArrayList<ArrayList<EditEntry>> mSections = new ArrayList<ArrayList<EditEntry>>();
-
+
/* package */ static final int MSG_DELETE = 1;
/* package */ static final int MSG_CHANGE_LABEL = 2;
/* package */ static final int MSG_ADD_PHONE = 3;
/* package */ static final int MSG_ADD_EMAIL = 4;
/* package */ static final int MSG_ADD_POSTAL = 5;
+ private static final int[] TYPE_PRECEDENCE_PHONES = new int[] {
+ Phones.TYPE_MOBILE, Phones.TYPE_HOME, Phones.TYPE_WORK, Phones.TYPE_OTHER
+ };
+ private static final int[] TYPE_PRECEDENCE_METHODS = new int[] {
+ ContactMethods.TYPE_HOME, ContactMethods.TYPE_WORK, ContactMethods.TYPE_OTHER
+ };
+ private static final int[] TYPE_PRECEDENCE_IM = new int[] {
+ ContactMethods.PROTOCOL_GOOGLE_TALK, ContactMethods.PROTOCOL_AIM,
+ ContactMethods.PROTOCOL_MSN, ContactMethods.PROTOCOL_YAHOO,
+ ContactMethods.PROTOCOL_JABBER
+ };
+ private static final int[] TYPE_PRECEDENCE_ORG = new int[] {
+ Organizations.TYPE_WORK, Organizations.TYPE_OTHER
+ };
+
public void onClick(View v) {
switch (v.getId()) {
- case R.id.photoButton:
case R.id.photoImage: {
doPickPhotoAction();
break;
}
-
- case R.id.addMore:
- doAddAction();
+
+ case R.id.checkable: {
+ CheckBox checkBox = (CheckBox) v.findViewById(R.id.checkbox);
+ checkBox.toggle();
+
+ EditEntry entry = findEntryForView(v);
+ entry.data = checkBox.isChecked() ? "1" : "0";
+
+ mContactChanged = true;
break;
+ }
+
+ case R.id.entry_ringtone: {
+ EditEntry entry = findEntryForView(v);
+ doPickRingtone(entry);
+ break;
+ }
+
+ case R.id.separator: {
+ // Someone clicked on a section header, so handle add action
+ int sectionType = (Integer) v.getTag();
+ doAddAction(sectionType);
+ break;
+ }
case R.id.saveButton:
doSaveAction();
@@ -216,8 +243,7 @@
doRevertAction();
break;
- case R.id.delete:
- case R.id.delete2: {
+ case R.id.delete: {
EditEntry entry = findEntryForView(v);
if (entry != null) {
// Clear the text and hide the view so it gets saved properly
@@ -225,6 +251,9 @@
entry.view.setVisibility(View.GONE);
entry.isDeleted = true;
}
+
+ // Force rebuild of views because section headers might need to change
+ buildViews();
break;
}
@@ -240,21 +269,21 @@
}
break;
}
-
- case R.id.data: {
- EditEntry entry = findEntryForView(v);
- if (isRingtoneEntry(entry)) {
- doPickRingtone(entry);
- }
- break;
- }
}
}
private void setPhotoPresent(boolean present) {
- mPhotoImageView.setVisibility(present ? View.VISIBLE : View.GONE);
- mPhotoButton.setVisibility(present ? View.GONE : View.VISIBLE);
mPhotoPresent = present;
+
+ // Correctly scale the contact photo if present, otherwise just center
+ // the photo placeholder icon.
+ if (mPhotoPresent) {
+ mPhotoImageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
+ } else {
+ mPhotoImageView.setImageResource(R.drawable.ic_menu_add_picture);
+ mPhotoImageView.setScaleType(ImageView.ScaleType.CENTER);
+ }
+
if (mPhotoMenuItem != null) {
if (present) {
mPhotoMenuItem.setTitle(R.string.removePicture);
@@ -307,27 +336,22 @@
setupSections();
// Load the UI
- setContentView(R.layout.edit_contact);
+ mInflater = getLayoutInflater();
+ mContentView = (ViewGroup)mInflater.inflate(R.layout.edit_contact, null);
+ setContentView(mContentView);
+
mLayout = (LinearLayout) findViewById(R.id.list);
mNameView = (EditText) findViewById(R.id.name);
mPhotoImageView = (ImageView) findViewById(R.id.photoImage);
mPhotoImageView.setOnClickListener(this);
- mPhotoImageView.setVisibility(View.GONE);
- mPhotoButton = findViewById(R.id.photoButton);
- mPhotoButton.setOnClickListener(this);
- mSendToVoicemailCheckBox = (CheckBox) findViewById(R.id.send_to_voicemail);
mPhoneticNameView = (EditText) findViewById(R.id.phonetic_name);
-
+
// Setup the bottom buttons
- View view = findViewById(R.id.addMore);
- view.setOnClickListener(this);
- view = findViewById(R.id.saveButton);
+ View view = findViewById(R.id.saveButton);
view.setOnClickListener(this);
view = findViewById(R.id.discardButton);
view.setOnClickListener(this);
- mInflater = getLayoutInflater();
-
// Resolve the intent
mState = STATE_UNKNOWN;
Intent intent = getIntent();
@@ -340,6 +364,7 @@
buildEntriesForEdit(getIntent().getExtras());
buildViews();
}
+ setTitle(R.string.editContact_title_edit);
mState = STATE_EDIT;
} else if (action.equals(Intent.ACTION_INSERT)) {
if (icicle == null) {
@@ -347,6 +372,7 @@
buildEntriesForInsert(getIntent().getExtras());
buildViews();
}
+ setTitle(R.string.editContact_title_insert);
mState = STATE_INSERT;
mInsert = true;
}
@@ -370,15 +396,61 @@
mSections.add(mEmailEntries);
mSections.add(mImEntries);
mSections.add(mPostalEntries);
+ mSections.add(mOrgEntries);
+ mSections.add(mNoteEntries);
mSections.add(mOtherEntries);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
+
+ // To store current focus between config changes, follow focus down the
+ // view tree, keeping track of any parents with EditEntry tags
+ View focusedChild = mContentView.getFocusedChild();
+ EditEntry focusedEntry = null;
+ while (focusedChild != null) {
+ Object tag = focusedChild.getTag();
+ if (tag instanceof EditEntry) {
+ focusedEntry = (EditEntry) tag;
+ }
+
+ // Keep going deeper until child isn't a group
+ if (focusedChild instanceof ViewGroup) {
+ View deeperFocus = ((ViewGroup) focusedChild).getFocusedChild();
+ if (deeperFocus != null) {
+ focusedChild = deeperFocus;
+ } else {
+ break;
+ }
+ } else {
+ break;
+ }
+ }
+
+ if (focusedChild != null) {
+ int requestFocusId = focusedChild.getId();
+ int requestCursor = 0;
+ if (focusedChild instanceof EditText) {
+ requestCursor = ((EditText) focusedChild).getSelectionStart();
+ }
+
+ // Store focus values in EditEntry if found, otherwise store as
+ // generic values
+ if (focusedEntry != null) {
+ focusedEntry.requestFocusId = requestFocusId;
+ focusedEntry.requestCursor = requestCursor;
+ } else {
+ outState.putInt("requestFocusId", requestFocusId);
+ outState.putInt("requestCursor", requestCursor);
+ }
+ }
+
outState.putParcelableArrayList("phoneEntries", mPhoneEntries);
outState.putParcelableArrayList("emailEntries", mEmailEntries);
outState.putParcelableArrayList("imEntries", mImEntries);
outState.putParcelableArrayList("postalEntries", mPostalEntries);
+ outState.putParcelableArrayList("orgEntries", mOrgEntries);
+ outState.putParcelableArrayList("noteEntries", mNoteEntries);
outState.putParcelableArrayList("otherEntries", mOtherEntries);
outState.putInt("state", mState);
outState.putBoolean("insert", mInsert);
@@ -386,7 +458,6 @@
outState.putString("name", mNameView.getText().toString());
outState.putParcelable("photo", mPhoto);
outState.putBoolean("photoChanged", mPhotoChanged);
- outState.putBoolean("sendToVoicemail", mSendToVoicemailCheckBox.isChecked());
outState.putString("phoneticName", mPhoneticNameView.getText().toString());
outState.putBoolean("contactChanged", mContactChanged);
}
@@ -397,6 +468,8 @@
mEmailEntries = inState.getParcelableArrayList("emailEntries");
mImEntries = inState.getParcelableArrayList("imEntries");
mPostalEntries = inState.getParcelableArrayList("postalEntries");
+ mOrgEntries = inState.getParcelableArrayList("orgEntries");
+ mNoteEntries = inState.getParcelableArrayList("noteEntries");
mOtherEntries = inState.getParcelableArrayList("otherEntries");
setupSections();
@@ -413,12 +486,22 @@
setPhotoPresent(false);
}
mPhotoChanged = inState.getBoolean("photoChanged");
- mSendToVoicemailCheckBox.setChecked(inState.getBoolean("sendToVoicemail"));
mPhoneticNameView.setText(inState.getString("phoneticName"));
mContactChanged = inState.getBoolean("contactChanged");
// Now that everything is restored, build the view
buildViews();
+
+ // Try restoring any generally requested focus
+ int requestFocusId = inState.getInt("requestFocusId", View.NO_ID);
+ View focusedChild = mContentView.findViewById(requestFocusId);
+ if (focusedChild != null) {
+ focusedChild.requestFocus();
+ if (focusedChild instanceof EditText) {
+ int requestCursor = inState.getInt("requestCursor", 0);
+ ((EditText) focusedChild).setSelection(requestCursor);
+ }
+ }
}
@Override
@@ -459,7 +542,7 @@
}
return super.onKeyDown(keyCode, event);
}
-
+
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
@@ -474,10 +557,6 @@
.setIcon(android.R.drawable.ic_menu_delete);
}
- menu.add(0, MENU_ITEM_ADD, 0, R.string.menu_addItem)
- .setIcon(android.R.drawable.ic_menu_add)
- .setAlphabeticShortcut('n');
-
mPhotoMenuItem = menu.add(0, MENU_ITEM_PHOTO, 0, null);
// Updates the state of the menu item
setPhotoPresent(mPhotoPresent);
@@ -501,10 +580,6 @@
showDialog(DELETE_CONFIRMATION_DIALOG);
return true;
- case MENU_ITEM_ADD:
- doAddAction();
- return true;
-
case MENU_ITEM_PHOTO:
if (!mPhotoPresent) {
doPickPhotoAction();
@@ -516,9 +591,98 @@
return false;
}
+
+ /**
+ * Try guessing the next-best type of {@link EditEntry} to insert into the
+ * given list. We walk down the precedence list until we find a type that
+ * doesn't exist yet, or default to the lowest ranking type.
+ */
+ private int guessNextType(ArrayList<EditEntry> entries, int[] precedenceList) {
+ // Keep track of the types we've seen already
+ SparseBooleanArray existAlready = new SparseBooleanArray(entries.size());
+ for (int i = entries.size() - 1; i >= 0; i--) {
+ EditEntry entry = entries.get(i);
+ if (!entry.isDeleted) {
+ existAlready.put(entry.type, true);
+ }
+ }
+
+ // Pick the first item we haven't seen
+ for (int type : precedenceList) {
+ if (!existAlready.get(type, false)) {
+ return type;
+ }
+ }
+
+ // Otherwise default to last item
+ return precedenceList[precedenceList.length - 1];
+ }
- private void doAddAction() {
- showDialog(LABEL_PICKER_ALL_TYPES_DIALOG);
+ private void doAddAction(int sectionType) {
+ EditEntry entry = null;
+ switch (sectionType) {
+ case SECTION_PHONES: {
+ // Try figuring out which type to insert next
+ int nextType = guessNextType(mPhoneEntries, TYPE_PRECEDENCE_PHONES);
+ entry = EditEntry.newPhoneEntry(EditContactActivity.this,
+ Uri.withAppendedPath(mUri, People.Phones.CONTENT_DIRECTORY),
+ nextType);
+ mPhoneEntries.add(entry);
+ break;
+ }
+ case SECTION_EMAIL: {
+ // Try figuring out which type to insert next
+ int nextType = guessNextType(mEmailEntries, TYPE_PRECEDENCE_METHODS);
+ entry = EditEntry.newEmailEntry(EditContactActivity.this,
+ Uri.withAppendedPath(mUri, People.ContactMethods.CONTENT_DIRECTORY),
+ nextType);
+ mEmailEntries.add(entry);
+ break;
+ }
+ case SECTION_IM: {
+ // Try figuring out which type to insert next
+ int nextType = guessNextType(mImEntries, TYPE_PRECEDENCE_IM);
+ entry = EditEntry.newImEntry(EditContactActivity.this,
+ Uri.withAppendedPath(mUri, People.ContactMethods.CONTENT_DIRECTORY),
+ nextType);
+ mImEntries.add(entry);
+ break;
+ }
+ case SECTION_POSTAL: {
+ int nextType = guessNextType(mPostalEntries, TYPE_PRECEDENCE_METHODS);
+ entry = EditEntry.newPostalEntry(EditContactActivity.this,
+ Uri.withAppendedPath(mUri, People.ContactMethods.CONTENT_DIRECTORY),
+ nextType);
+ mPostalEntries.add(entry);
+ break;
+ }
+ case SECTION_ORG: {
+ int nextType = guessNextType(mOrgEntries, TYPE_PRECEDENCE_ORG);
+ entry = EditEntry.newOrganizationEntry(EditContactActivity.this,
+ Uri.withAppendedPath(mUri, Organizations.CONTENT_DIRECTORY),
+ nextType);
+ mOrgEntries.add(entry);
+ break;
+ }
+ case SECTION_NOTE: {
+ entry = EditEntry.newNotesEntry(EditContactActivity.this, null, mUri);
+ mNoteEntries.add(entry);
+ break;
+ }
+ }
+
+ // Rebuild the views if needed
+ if (entry != null) {
+ buildViews();
+ mContactChanged = true;
+
+ View dataView = entry.view.findViewById(R.id.data);
+ if (dataView == null) {
+ entry.view.requestFocus();
+ } else {
+ dataView.requestFocus();
+ }
+ }
}
private void doRevertAction() {
@@ -549,7 +713,6 @@
private void doRemovePhotoAction() {
mPhoto = null;
mPhotoChanged = true;
- mPhotoImageView.setImageResource(R.drawable.ic_contact_picture);
setPhotoPresent(false);
}
@@ -577,7 +740,7 @@
}
private void handleRingtonePicked(Uri pickedUri) {
- EditEntry entry = getRingtoneEntry();
+ EditEntry entry = getOtherEntry(People.CUSTOM_RINGTONE);
if (entry == null) {
Log.w(TAG, "Ringtone picked but could not find ringtone entry");
return;
@@ -593,8 +756,9 @@
}
private void updateRingtoneView(EditEntry entry) {
+ String ringtoneName;
if (entry.data == null) {
- updateDataView(entry, getString(R.string.default_ringtone));
+ ringtoneName = getString(R.string.default_ringtone);
} else {
Uri ringtoneUri = Uri.parse(entry.data);
Ringtone ringtone = RingtoneManager.getRingtone(this, ringtoneUri);
@@ -602,8 +766,10 @@
Log.w(TAG, "ringtone's URI doesn't resolve to a Ringtone");
return;
}
- updateDataView(entry, ringtone.getTitle(this));
+ ringtoneName = ringtone.getTitle(this);
}
+
+ updateDataView(entry, ringtoneName);
}
private void updateDataView(EditEntry entry, String text) {
@@ -614,9 +780,6 @@
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
- case LABEL_PICKER_ALL_TYPES_DIALOG:
- return createAllTypesPicker();
-
case DELETE_CONFIRMATION_DIALOG:
return new AlertDialog.Builder(EditContactActivity.this)
.setTitle(R.string.deleteConfirmation_title)
@@ -659,230 +822,21 @@
return labelPosition + 1;
}
}
-
- public boolean onChildClick(ExpandableListView parent, View v, int groupPosition,
- int childPosition, long id) {
- EditEntry entry = null;
-
- // Make the dialog go away
- dismissDialog(LABEL_PICKER_ALL_TYPES_DIALOG);
-
- // Create the new entry
- switch (groupPosition) {
- case LABEL_PICKER_PHONES_POSITION: {
- String[] labels = getLabelsForKind(this, Contacts.KIND_PHONE);
- final int type = getTypeFromLabelPosition(labels, childPosition);
- entry = EditEntry.newPhoneEntry(EditContactActivity.this,
- labels[childPosition], type,
- null, Uri.withAppendedPath(mUri, People.Phones.CONTENT_DIRECTORY), 0);
- if (type == Phones.TYPE_CUSTOM) {
- createCustomPicker(entry, mPhoneEntries);
- return true;
- } else {
- mPhoneEntries.add(entry);
- }
- break;
- }
-
- case LABEL_PICKER_EMAIL_POSITION: {
- String[] labels = getLabelsForKind(this, Contacts.KIND_EMAIL);
- final int type = getTypeFromLabelPosition(labels, childPosition);
- entry = EditEntry.newEmailEntry(EditContactActivity.this,
- labels[childPosition], type, null,
- Uri.withAppendedPath(mUri, People.ContactMethods.CONTENT_DIRECTORY), 0);
- if (type == ContactMethods.TYPE_CUSTOM) {
- createCustomPicker(entry, mEmailEntries);
- return true;
- } else {
- mEmailEntries.add(entry);
- }
- break;
- }
-
- case LABEL_PICKER_IM_POSITION: {
- String[] labels = getLabelsForKind(this, Contacts.KIND_IM);
- entry = EditEntry.newImEntry(EditContactActivity.this,
- labels[childPosition], childPosition, null,
- Uri.withAppendedPath(mUri, People.ContactMethods.CONTENT_DIRECTORY), 0);
- mImEntries.add(entry);
- break;
- }
-
- case LABEL_PICKER_POSTAL_POSITION: {
- String[] labels = getLabelsForKind(this, Contacts.KIND_POSTAL);
- final int type = getTypeFromLabelPosition(labels, childPosition);
- entry = EditEntry.newPostalEntry(EditContactActivity.this,
- labels[childPosition], type, null,
- Uri.withAppendedPath(mUri, People.ContactMethods.CONTENT_DIRECTORY), 0);
- if (type == ContactMethods.TYPE_CUSTOM) {
- createCustomPicker(entry, mPostalEntries);
- return true;
- } else {
- mPostalEntries.add(entry);
- }
- break;
- }
-
- case LABEL_PICKER_OTHER_POSITION: {
- switch (childPosition) {
- case OTHER_ORGANIZATION:
- entry = EditEntry.newOrganizationEntry(EditContactActivity.this,
- Uri.withAppendedPath(mUri, Organizations.CONTENT_DIRECTORY),
- Organizations.TYPE_WORK);
- mOtherEntries.add(entry);
- break;
-
- case OTHER_NOTE:
- entry = EditEntry.newNotesEntry(EditContactActivity.this, null, mUri);
- mOtherEntries.add(entry);
- break;
-
- default:
- entry = null;
- }
- break;
- }
-
- default:
- entry = null;
- }
-
- // Rebuild the views if needed
- if (entry != null) {
- buildViews();
- mContactChanged = true;
-
- View dataView = entry.view.findViewById(R.id.data);
- if (dataView == null) {
- entry.view.requestFocus();
- } else {
- dataView.requestFocus();
- }
- }
- return true;
- }
-
- private EditEntry getRingtoneEntry() {
+
+ private EditEntry getOtherEntry(String column) {
for (int i = mOtherEntries.size() - 1; i >= 0; i--) {
EditEntry entry = mOtherEntries.get(i);
- if (isRingtoneEntry(entry)) {
+ if (isOtherEntry(entry, column)) {
return entry;
}
}
return null;
}
- private static boolean isRingtoneEntry(EditEntry entry) {
- return entry != null && entry.column != null && entry.column.equals(People.CUSTOM_RINGTONE);
+ private static boolean isOtherEntry(EditEntry entry, String column) {
+ return entry != null && entry.column != null && entry.column.equals(column);
}
- private Dialog createAllTypesPicker() {
- // Setup the adapter
- List<Map<String, ?>> groupData = Lists.newArrayList();
- List<List<Map<String, ?>>> childData = Lists.newArrayList();
- List<Map<String, ?>> children;
- HashMap<String, CharSequence> curGroupMap;
- CharSequence[] labels;
- int labelsSize;
-
- // Phones
- curGroupMap = new HashMap<String, CharSequence>();
- groupData.add(curGroupMap);
- curGroupMap.put("data", getText(R.string.phoneLabelsGroup));
-
- labels = getLabelsForKind(this, Contacts.KIND_PHONE);
- labelsSize = labels.length;
- children = Lists.newArrayList();
- for (int i = 0; i < labelsSize; i++) {
- HashMap<String, CharSequence> curChildMap = new HashMap<String, CharSequence>();
- children.add(curChildMap);
- curChildMap.put("data", labels[i]);
- }
- childData.add(LABEL_PICKER_PHONES_POSITION, children);
-
- // Email
- curGroupMap = new HashMap<String, CharSequence>();
- groupData.add(curGroupMap);
- curGroupMap.put("data", getText(R.string.emailLabelsGroup));
-
- labels = getLabelsForKind(this, Contacts.KIND_EMAIL);
- labelsSize = labels.length;
- children = Lists.newArrayList();
- for (int i = 0; i < labelsSize; i++) {
- HashMap<String, CharSequence> curChildMap = new HashMap<String, CharSequence>();
- children.add(curChildMap);
- curChildMap.put("data", labels[i]);
- }
- childData.add(LABEL_PICKER_EMAIL_POSITION, children);
-
- // IM
- curGroupMap = new HashMap<String, CharSequence>();
- groupData.add(curGroupMap);
- curGroupMap.put("data", getText(R.string.imLabelsGroup));
-
- labels = getLabelsForKind(this, Contacts.KIND_IM);
- labelsSize = labels.length;
- children = Lists.newArrayList();
- for (int i = 0; i < labelsSize; i++) {
- HashMap<String, CharSequence> curChildMap = new HashMap<String, CharSequence>();
- children.add(curChildMap);
- curChildMap.put("data", labels[i]);
- }
- childData.add(LABEL_PICKER_IM_POSITION, children);
-
- // Postal
- curGroupMap = new HashMap<String, CharSequence>();
- groupData.add(curGroupMap);
- curGroupMap.put("data", getText(R.string.postalLabelsGroup));
-
- labels = getLabelsForKind(this, Contacts.KIND_POSTAL);
- labelsSize = labels.length;
- children = Lists.newArrayList();
- for (int i = 0; i < labelsSize; i++) {
- HashMap<String, CharSequence> curChildMap = new HashMap<String, CharSequence>();
- children.add(curChildMap);
- curChildMap.put("data", labels[i]);
- }
- childData.add(LABEL_PICKER_POSTAL_POSITION, children);
-
- // Other
- curGroupMap = new HashMap<String, CharSequence>();
- groupData.add(curGroupMap);
- curGroupMap.put("data", getText(R.string.otherLabelsGroup));
-
- labels = getLabelsForKind(this, EditEntry.KIND_CONTACT);
- labelsSize = labels.length;
- children = Lists.newArrayList();
- for (int i = 0; i < labelsSize; i++) {
- HashMap<String, CharSequence> curChildMap = new HashMap<String, CharSequence>();
- children.add(curChildMap);
- curChildMap.put("data", labels[i]);
- }
- childData.add(LABEL_PICKER_OTHER_POSITION, children);
-
- // Create the expandable list view
- ExpandableListView list = new ExpandableListView(new ContextThemeWrapper(this,
- android.R.style.Theme_Light));
- list.setOnChildClickListener(this);
- list.setAdapter(new SimpleExpandableListAdapter(
- new ContextThemeWrapper(this, android.R.style.Theme_Light),
- groupData,
- android.R.layout.simple_expandable_list_item_1,
- new String[] { "data" },
- new int[] { android.R.id.text1 },
- childData,
- android.R.layout.simple_expandable_list_item_1,
- new String[] { "data" },
- new int[] { android.R.id.text1 }
- ));
- // This list shouldn't have a color hint since the dialog may be transparent
- list.setCacheColorHint(0);
-
- // Create the dialog
- return new AlertDialog.Builder(this).setView(list).setInverseBackgroundForced(true)
- .setTitle(R.string.selectLabel).create();
- }
-
private void createCustomPicker(final EditEntry entry, final ArrayList<EditEntry> addTo) {
final EditText label = new EditText(this);
label.setKeyListener(TextKeyListener.getInstance(false, Capitalize.WORDS));
@@ -943,7 +897,6 @@
}
values.put(People.NAME, name);
values.put(People.PHONETIC_NAME, mPhoneticNameView.getText().toString());
- values.put(People.SEND_TO_VOICEMAIL, mSendToVoicemailCheckBox.isChecked() ? 1 : 0);
mResolver.update(mUri, values, null, null);
if (mPhotoChanged) {
@@ -968,7 +921,10 @@
if (!empty) {
values.put(entry.column, data);
mResolver.update(entry.uri, values, null, null);
- numValues++;
+ if (!People.CUSTOM_RINGTONE.equals(entry.column) &&
+ !People.SEND_TO_VOICEMAIL.equals(entry.column)) {
+ numValues++;
+ }
} else {
values.put(entry.column, (String) null);
mResolver.update(entry.uri, values, null, null);
@@ -982,7 +938,10 @@
} else {
mResolver.insert(entry.uri, values);
}
- numValues++;
+ if (!People.CUSTOM_RINGTONE.equals(entry.column) &&
+ !People.SEND_TO_VOICEMAIL.equals(entry.column)) {
+ numValues++;
+ }
} else if (entry.id != 0) {
mResolver.delete(entry.uri, null, null);
}
@@ -1021,7 +980,6 @@
}
values.put(People.NAME, name);
values.put(People.PHONETIC_NAME, mPhoneticNameView.getText().toString());
- values.put(People.SEND_TO_VOICEMAIL, mSendToVoicemailCheckBox.isChecked() ? 1 : 0);
// Add the contact to the My Contacts group
Uri contactUri = People.createPersonInMyContactsGroup(mResolver, values);
@@ -1036,6 +994,44 @@
if (!TextUtils.isEmpty(displayGroup)) {
People.addToGroup(mResolver, ContentUris.parseId(contactUri), displayGroup);
}
+ } else {
+ // Check to see if we're not syncing everything and if so if My Contacts is synced.
+ // If it isn't then the created contact can end up not in any groups that are
+ // currently synced and end up getting removed from the phone, which is really bad.
+ boolean syncingEverything = !"0".equals(Contacts.Settings.getSetting(mResolver, null,
+ Contacts.Settings.SYNC_EVERYTHING));
+ if (!syncingEverything) {
+ boolean syncingMyContacts = false;
+ Cursor c = mResolver.query(Groups.CONTENT_URI, new String[] { Groups.SHOULD_SYNC },
+ Groups.SYSTEM_ID + "=?", new String[] { Groups.GROUP_MY_CONTACTS }, null);
+ if (c != null) {
+ try {
+ if (c.moveToFirst()) {
+ syncingMyContacts = !"0".equals(c.getString(0));
+ }
+ } finally {
+ c.close();
+ }
+ }
+
+ if (!syncingMyContacts) {
+ // Not syncing My Contacts, so find a group that is being synced and stick
+ // the contact in there. We sort the list so at least all contacts
+ // will appear in the same group.
+ c = mResolver.query(Groups.CONTENT_URI, new String[] { Groups._ID },
+ Groups.SHOULD_SYNC + "!=0", null, Groups.DEFAULT_SORT_ORDER);
+ if (c != null) {
+ try {
+ if (c.moveToFirst()) {
+ People.addToGroup(mResolver, ContentUris.parseId(contactUri),
+ c.getLong(0));
+ }
+ } finally {
+ c.close();
+ }
+ }
+ }
+ }
}
// Handle the photo
@@ -1056,7 +1052,10 @@
entry.uri = mResolver.insert(
Uri.withAppendedPath(contactUri, entry.contentDirectory), values);
entry.id = ContentUris.parseId(entry.uri);
- numValues++;
+ if (!People.CUSTOM_RINGTONE.equals(entry.column) &&
+ !People.SEND_TO_VOICEMAIL.equals(entry.column)) {
+ numValues++;
+ }
}
} else {
// Update the contact with any straggling data, like notes
@@ -1065,7 +1064,10 @@
if (data != null && TextUtils.isGraphic(data)) {
values.put(entry.column, data);
mResolver.update(contactUri, values, null, null);
- numValues++;
+ if (!People.CUSTOM_RINGTONE.equals(entry.column) &&
+ !People.SEND_TO_VOICEMAIL.equals(entry.column)) {
+ numValues++;
+ }
}
}
}
@@ -1121,13 +1123,7 @@
setPhotoPresent(true);
mPhotoImageView.setImageBitmap(mPhoto);
}
-
- // Send to voicemail
- mSendToVoicemailCheckBox
- .setChecked(personCursor.getInt(CONTACT_SEND_TO_VOICEMAIL_COLUMN) == 1);
- mSendToVoicemailCheckBox
- .setOnCheckedChangeListener(this);
-
+
// Organizations
Uri organizationsUri = Uri.withAppendedPath(mUri, Organizations.CONTENT_DIRECTORY);
Cursor organizationsCursor = mResolver.query(organizationsUri, ORGANIZATIONS_PROJECTION,
@@ -1145,7 +1141,7 @@
// Add an organization entry
entry = EditEntry.newOrganizationEntry(this, label, type, company, title, uri, id);
entry.isPrimary = organizationsCursor.getLong(ORGANIZATIONS_ISPRIMARY_COLUMN) != 0;
- mOtherEntries.add(entry);
+ mOrgEntries.add(entry);
}
organizationsCursor.close();
}
@@ -1154,13 +1150,18 @@
if (!personCursor.isNull(CONTACT_NOTES_COLUMN)) {
entry = EditEntry.newNotesEntry(this, personCursor.getString(CONTACT_NOTES_COLUMN),
mUri);
- mOtherEntries.add(entry);
+ mNoteEntries.add(entry);
}
// Ringtone
entry = EditEntry.newRingtoneEntry(this,
personCursor.getString(CONTACT_CUSTOM_RINGTONE_COLUMN), mUri);
mOtherEntries.add(entry);
+
+ // Send to voicemail
+ entry = EditEntry.newSendToVoicemailEntry(this,
+ personCursor.getString(CONTACT_SEND_TO_VOICEMAIL_COLUMN), mUri);
+ mOtherEntries.add(entry);
// Phonetic name
mPhoneticNameView.setText(personCursor.getString(CONTACT_PHONETIC_NAME_COLUMN));
@@ -1318,6 +1319,10 @@
// Ringtone
entry = EditEntry.newRingtoneEntry(this, null, mUri);
mOtherEntries.add(entry);
+
+ // Send to voicemail
+ entry = EditEntry.newSendToVoicemailEntry(this, "0", mUri);
+ mOtherEntries.add(entry);
}
private void addFromExtras(Bundle extras, Uri phonesUri, Uri methodsUri) {
@@ -1375,10 +1380,10 @@
int protocol = ((Number) protocolObj).intValue();
entry = EditEntry.newImEntry(this,
getLabelsForKind(this, Contacts.KIND_IM)[protocol], protocol,
- imHandle.toString(), null, 0);
+ imHandle.toString(), methodsUri, 0);
} else {
entry = EditEntry.newImEntry(this, protocolObj.toString(), -1, imHandle.toString(),
- null, 0);
+ methodsUri, 0);
}
entry.isPrimary = extras.getBoolean(Insert.IM_ISPRIMARY);
mImEntries.add(entry);
@@ -1455,12 +1460,21 @@
// Remove existing views
final LinearLayout layout = mLayout;
layout.removeAllViews();
-
- buildViewsForSection(layout, mPhoneEntries, R.string.listSeparatorCallNumber);
- buildViewsForSection(layout, mEmailEntries, R.string.listSeparatorSendEmail);
- buildViewsForSection(layout, mImEntries, R.string.listSeparatorSendIm);
- buildViewsForSection(layout, mPostalEntries, R.string.listSeparatorMapAddress);
- buildViewsForSection(layout, mOtherEntries, R.string.listSeparatorOtherInformation);
+
+ buildViewsForSection(layout, mPhoneEntries,
+ R.string.listSeparatorCallNumber_edit, SECTION_PHONES);
+ buildViewsForSection(layout, mEmailEntries,
+ R.string.listSeparatorSendEmail_edit, SECTION_EMAIL);
+ buildViewsForSection(layout, mImEntries,
+ R.string.listSeparatorSendIm_edit, SECTION_IM);
+ buildViewsForSection(layout, mPostalEntries,
+ R.string.listSeparatorMapAddress_edit, SECTION_POSTAL);
+ buildViewsForSection(layout, mOrgEntries,
+ R.string.listSeparatorOrganizations, SECTION_ORG);
+ buildViewsForSection(layout, mNoteEntries,
+ R.string.label_notes, SECTION_NOTE);
+
+ buildOtherViews(layout, mOtherEntries);
}
@@ -1471,25 +1485,74 @@
* @param section the section to build the views for
*/
private void buildViewsForSection(final LinearLayout layout, ArrayList<EditEntry> section,
- int separatorResource) {
- // Build the separator if the section isn't empty
- if (section.size() > 0) {
- View separator = mInflater.inflate(R.layout.edit_separator, layout, false);
- TextView text = (TextView) separator.findViewById(R.id.text);
- text.setText(getText(separatorResource));
- layout.addView(separator);
+ int separatorResource, int sectionType) {
+
+ View divider = mInflater.inflate(R.layout.edit_divider, layout, false);
+ layout.addView(divider);
+
+ // Count up undeleted children
+ int activeChildren = 0;
+ for (int i = section.size() - 1; i >= 0; i--) {
+ EditEntry entry = section.get(i);
+ if (!entry.isDeleted) {
+ activeChildren++;
+ }
+ }
+
+ // Build the correct group header based on undeleted children
+ ViewGroup header;
+ if (activeChildren == 0) {
+ header = (ViewGroup) mInflater.inflate(R.layout.edit_separator_alone, layout, false);
+ } else {
+ header = (ViewGroup) mInflater.inflate(R.layout.edit_separator, layout, false);
}
+ // Because we're emulating a ListView, we need to handle focus changes
+ // with some additional logic.
+ header.setOnFocusChangeListener(this);
+
+ TextView text = (TextView) header.findViewById(R.id.text);
+ text.setText(getText(separatorResource));
+
+ // Force TextView to always default color if we have children. This makes sure
+ // we don't change color when parent is pressed.
+ if (activeChildren > 0) {
+ ColorStateList stateList = text.getTextColors();
+ text.setTextColor(stateList.getDefaultColor());
+ }
+
+ View addView = header.findViewById(R.id.separator);
+ addView.setTag(Integer.valueOf(sectionType));
+ addView.setOnClickListener(this);
+
// Build views for the current section
for (EditEntry entry : section) {
entry.activity = this; // this could be null from when the state is restored
if (!entry.isDeleted) {
View view = buildViewForEntry(entry);
- layout.addView(view);
+ header.addView(view);
}
}
+
+ layout.addView(header);
}
+
+ private void buildOtherViews(final LinearLayout layout, ArrayList<EditEntry> section) {
+ // Build views for the current section, putting a divider between each one
+ for (EditEntry entry : section) {
+ View divider = mInflater.inflate(R.layout.edit_divider, layout, false);
+ layout.addView(divider);
+ entry.activity = this; // this could be null from when the state is restored
+ View view = buildViewForEntry(entry);
+ view.setOnClickListener(this);
+ layout.addView(view);
+ }
+
+ View divider = mInflater.inflate(R.layout.edit_divider, layout, false);
+ layout.addView(divider);
+ }
+
/**
* Builds a view to display an EditEntry.
*
@@ -1510,10 +1573,16 @@
final ViewGroup parent = mLayout;
View view;
+ // Because we're emulating a ListView, we might need to handle focus changes
+ // with some additional logic.
if (entry.kind == Contacts.KIND_ORGANIZATION) {
view = mInflater.inflate(R.layout.edit_contact_entry_org, parent, false);
- } else if (isRingtoneEntry(entry)) {
+ } else if (isOtherEntry(entry, People.CUSTOM_RINGTONE)) {
view = mInflater.inflate(R.layout.edit_contact_entry_ringtone, parent, false);
+ view.setOnFocusChangeListener(this);
+ } else if (isOtherEntry(entry, People.SEND_TO_VOICEMAIL)) {
+ view = mInflater.inflate(R.layout.edit_contact_entry_voicemail, parent, false);
+ view.setOnFocusChangeListener(this);
} else if (!entry.isStaticLabel) {
view = mInflater.inflate(R.layout.edit_contact_entry, parent, false);
} else {
@@ -1530,7 +1599,7 @@
// Bind data
TextView data = (TextView) view.findViewById(R.id.data);
TextView data2 = (TextView) view.findViewById(R.id.data2);
-
+
if (data instanceof Button) {
data.setOnClickListener(this);
}
@@ -1570,6 +1639,19 @@
}
}
}
+
+ // Give focus to children as requested, possibly after a configuration change
+ View focusChild = view.findViewById(entry.requestFocusId);
+ if (focusChild != null) {
+ focusChild.requestFocus();
+ if (focusChild instanceof EditText) {
+ ((EditText) focusChild).setSelection(entry.requestCursor);
+ }
+ }
+
+ // Reset requested focus values
+ entry.requestFocusId = View.NO_ID;
+ entry.requestCursor = 0;
// Connect listeners up to watch for changed values.
if (data instanceof EditText) {
@@ -1582,15 +1664,20 @@
// Hook up the delete button
View delete = view.findViewById(R.id.delete);
if (delete != null) delete.setOnClickListener(this);
- View delete2 = view.findViewById(R.id.delete2);
- if (delete2 != null) delete2.setOnClickListener(this);
return view;
}
private void fillViewData(final EditEntry entry) {
- if (isRingtoneEntry(entry)) {
+ if (isOtherEntry(entry, People.CUSTOM_RINGTONE)) {
updateRingtoneView(entry);
+ } else if (isOtherEntry(entry, People.SEND_TO_VOICEMAIL)) {
+ CheckBox checkBox = (CheckBox) entry.view.findViewById(R.id.checkbox);
+ boolean sendToVoicemail = false;
+ if (entry.data != null) {
+ sendToVoicemail = (Integer.valueOf(entry.data) == 1);
+ }
+ checkBox.setChecked(sendToVoicemail);
}
}
@@ -1649,6 +1736,19 @@
public boolean isStaticLabel = false;
public boolean syncDataWithView = true;
+ /**
+ * Request focus on the child of this {@link EditEntry} found using
+ * {@link View#findViewById(int)}. This value should be reset to
+ * {@link View#NO_ID} after each use.
+ */
+ public int requestFocusId = View.NO_ID;
+
+ /**
+ * If the {@link #requestFocusId} is an {@link EditText}, this value
+ * indicates the requested cursor position placement.
+ */
+ public int requestCursor = 0;
+
private EditEntry() {
// only used by CREATOR
}
@@ -1953,6 +2053,23 @@
}
/**
+ * Create a new send-to-voicemail entry with the given data.
+ */
+ public static final EditEntry newSendToVoicemailEntry(EditContactActivity activity,
+ String data, Uri uri) {
+ EditEntry entry = new EditEntry(activity);
+ entry.label = activity.getString(R.string.actionIncomingCall);
+ entry.data = data;
+ entry.uri = uri;
+ entry.column = People.SEND_TO_VOICEMAIL;
+ entry.kind = KIND_CONTACT;
+ entry.isStaticLabel = true;
+ entry.syncDataWithView = false;
+ entry.lines = -1;
+ return entry;
+ }
+
+ /**
* Create a new empty email entry
*/
public static final EditEntry newPhoneEntry(EditContactActivity activity,
@@ -2034,7 +2151,15 @@
}
/**
- * Create a new postal address entry with the given data.
+ * Create a new IM address entry
+ */
+ public static final EditEntry newImEntry(EditContactActivity activity,
+ Uri uri, int type) {
+ return newImEntry(activity, null, type, null, uri, 0);
+ }
+
+ /**
+ * Create a new IM address entry with the given data.
*
* @param label label for the item, from the db not the display label
* @param protocol the type used
@@ -2050,13 +2175,14 @@
entry.column = ContactMethods.DATA;
entry.contentDirectory = People.ContactMethods.CONTENT_DIRECTORY;
entry.kind = Contacts.KIND_IM;
- entry.contentType = EditorInfo.TYPE_CLASS_TEXT;
+ entry.contentType = EditorInfo.TYPE_CLASS_TEXT
+ | EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS;
return entry;
}
}
public void afterTextChanged(Editable s) {
- // Someone edited a text field, so assume this contact is dirty.
+ // Someone edited a text field, so assume this contact is changed
mContactChanged = true;
}
@@ -2067,9 +2193,10 @@
public void onTextChanged(CharSequence s, int start, int before, int count) {
// Do nothing; editing handled by afterTextChanged()
}
-
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- // Someone changed a checkbox, so assume this contact is dirty.
- mContactChanged = true;
+
+ public void onFocusChange(View v, boolean hasFocus) {
+ // Because we're emulating a ListView, we need to setSelected() for
+ // views as they are focused.
+ v.setSelected(hasFocus);
}
}
diff --git a/src/com/android/contacts/JapaneseContactListIndexer.java b/src/com/android/contacts/JapaneseContactListIndexer.java
new file mode 100644
index 0000000..d5d6dcd
--- /dev/null
+++ b/src/com/android/contacts/JapaneseContactListIndexer.java
@@ -0,0 +1,187 @@
+/*
+ * Copyright (C) 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.
+ */
+
+package com.android.contacts;
+
+import android.database.Cursor;
+import android.database.DataSetObserver;
+import android.util.Log;
+import android.util.SparseIntArray;
+import android.widget.SectionIndexer;
+
+/**
+ * SectionIndexer which is for "phonetically sortable" String. This class heavily depends on the
+ * algorithm of the SQL function "GET_PHONETICALLY_SORTABLE_STRING", whose implementation
+ * is written in C++.
+ */
+public final class JapaneseContactListIndexer extends DataSetObserver implements SectionIndexer {
+ private static String TAG = "JapaneseContactListIndexer";
+
+ static private final String[] sSections = {
+ " ", // Sections of SectionIndexer should start with " " (some components assume it).
+ "\u3042", "\u304B", "\u3055", "\u305F", "\u306A", // a, ka, sa, ta, na
+ "\u306F", "\u307E", "\u3084", "\u3089", "\u308F", // ha, ma, ya, ra, wa
+ "\uFF21", "\uFF22", "\uFF23", "\uFF24", "\uFF25", // full-width ABCDE
+ "\uFF26", "\uFF27", "\uFF28", "\uFF29", "\uFF2A", // full-width FGHIJ
+ "\uFF2B", "\uFF2C", "\uFF2D", "\uFF2E", "\uFF2F", // full-width KLMNO
+ "\uFF30", "\uFF31", "\uFF32", "\uFF33", "\uFF34", // full-width PQRST
+ "\uFF35", "\uFF36", "\uFF37", "\uFF38", "\uFF39", // full-width UVWXY
+ "\uFF40", // full-width Z
+ "\u6570", "\u8A18" // alphabets, numbers, symbols
+ };
+ static private final int sSectionsLength = sSections.length;
+
+ private int mColumnIndex;
+ private Cursor mDataCursor;
+ private SparseIntArray mStringMap;
+
+ public JapaneseContactListIndexer(Cursor cursor, int columnIndex) {
+ int len = sSections.length;
+ mColumnIndex = columnIndex;
+ mDataCursor = cursor;
+ mStringMap = new SparseIntArray(sSectionsLength);
+ if (cursor != null) {
+ cursor.registerDataSetObserver(this);
+ }
+ }
+
+ public void setCursor(Cursor cursor) {
+ if (mDataCursor != null) {
+ mDataCursor.unregisterDataSetObserver(this);
+ }
+ mDataCursor = cursor;
+ if (cursor != null) {
+ mDataCursor.registerDataSetObserver(this);
+ }
+ }
+
+ private int getSectionCodePoint(int index) {
+ if (index < sSections.length - 2) {
+ return sSections[index].codePointAt(0);
+ } else if (index == sSections.length - 2) {
+ return 0xFF66; // Numbers are mapped from 0xFF66.
+ } else { // index == mSections.length - 1
+ return 0xFF70; // Symbols are mapped from 0xFF70.
+ }
+ }
+
+ public int getPositionForSection(int sectionIndex) {
+ final SparseIntArray stringMap = mStringMap;
+ final Cursor cursor = mDataCursor;
+
+ if (cursor == null || sectionIndex <= 0) {
+ return 0;
+ }
+
+ if (sectionIndex >= sSectionsLength) {
+ sectionIndex = sSectionsLength - 1;
+ }
+
+ int savedCursorPos = cursor.getPosition();
+
+ String targetLetter = sSections[sectionIndex];
+ int key = targetLetter.codePointAt(0);
+
+ // Check cache map
+ {
+ int tmp = stringMap.get(key, Integer.MIN_VALUE);
+ if (Integer.MIN_VALUE != tmp) {
+ return tmp;
+ }
+ }
+
+ int end = cursor.getCount();
+ int pos = 0;
+
+ {
+ // Note that sectionIndex > 0.
+ int prevLetter = sSections[sectionIndex - 1].codePointAt(0);
+ int prevLetterPos = stringMap.get(prevLetter, Integer.MIN_VALUE);
+ if (prevLetterPos != Integer.MIN_VALUE) {
+ pos = prevLetterPos;
+ }
+ }
+
+ // Do rough binary search if there are a lot of entries.
+ while (end - pos > 100) {
+ int tmp = (end + pos) / 2;
+ cursor.moveToPosition(tmp);
+ String sort_name;
+ do {
+ sort_name = cursor.getString(mColumnIndex);
+ if (sort_name == null || sort_name.length() == 0) {
+ // This should not happen, since sort_name field is created
+ // automatically when syncing to a server, or creating/editing
+ // the entry...
+ Log.e(TAG, "sort_name is null or its length is 0. index: " + tmp);
+ cursor.moveToNext();
+ tmp++;
+ continue;
+ }
+ break;
+ } while (tmp < end);
+ if (tmp == end) {
+ break;
+ }
+ int codePoint = sort_name.codePointAt(0);
+ if (codePoint < getSectionCodePoint(sectionIndex)) {
+ pos = tmp;
+ } else {
+ end = tmp;
+ }
+ }
+
+ for (cursor.moveToPosition(pos); !cursor.isAfterLast(); ++pos, cursor.moveToNext()) {
+ String sort_name = cursor.getString(mColumnIndex);
+ if (sort_name == null || sort_name.length() == 0) {
+ // This should not happen, since sort_name field is created
+ // automatically when syncing to a server, or creating/editing
+ // the entry...
+ Log.e(TAG, "sort_name is null or its length is 0. index: " + pos);
+ continue;
+ }
+ int codePoint = sort_name.codePointAt(0);
+ if (codePoint >= getSectionCodePoint(sectionIndex)) {
+ break;
+ }
+ }
+
+ stringMap.put(key, pos);
+ cursor.moveToPosition(savedCursorPos);
+ return pos;
+ }
+
+ public int getSectionForPosition(int position) {
+ // Not used in Contacts. Ignore for now.
+ return 0;
+ }
+
+ public Object[] getSections() {
+ return sSections;
+ }
+
+ @Override
+ public void onChanged() {
+ super.onChanged();
+ mStringMap.clear();
+ }
+
+ @Override
+ public void onInvalidated() {
+ super.onInvalidated();
+ mStringMap.clear();
+ }
+}
diff --git a/src/com/android/contacts/RecentCallsListActivity.java b/src/com/android/contacts/RecentCallsListActivity.java
index 8298d21..dbf2879 100644
--- a/src/com/android/contacts/RecentCallsListActivity.java
+++ b/src/com/android/contacts/RecentCallsListActivity.java
@@ -37,6 +37,7 @@
import android.provider.Contacts.People;
import android.provider.Contacts.Phones;
import android.provider.Contacts.Intents.Insert;
+import android.telephony.PhoneNumberUtils;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.text.format.DateUtils;
@@ -94,7 +95,7 @@
/** The projection to use when querying the phones table */
static final String[] PHONES_PROJECTION = new String[] {
Phones.PERSON_ID,
- Phones.NAME,
+ Phones.DISPLAY_NAME,
Phones.TYPE,
Phones.LABEL,
Phones.NUMBER
@@ -414,6 +415,9 @@
number = getString(R.string.private_num);
} else if (number.equals(mVoiceMailNumber)) {
number = getString(R.string.voicemail);
+ } else {
+ // Just a raw number, format it to look pretty
+ number = PhoneNumberUtils.formatNumber(number);
}
views.line1View.setText(number);
diff --git a/src/com/android/contacts/TwelveKeyDialer.java b/src/com/android/contacts/TwelveKeyDialer.java
index 1a06026..c80e67b 100644
--- a/src/com/android/contacts/TwelveKeyDialer.java
+++ b/src/com/android/contacts/TwelveKeyDialer.java
@@ -206,7 +206,7 @@
synchronized (mToneGeneratorLock) {
if (mToneGenerator == null) {
try {
- mToneGenerator = new ToneGenerator(AudioManager.STREAM_RING,
+ mToneGenerator = new ToneGenerator(AudioManager.STREAM_VOICE_CALL,
TONE_RELATIVE_VOLUME);
} catch (RuntimeException e) {
Log.w(TAG, "Exception caught while creating local tone generator: " + e);
@@ -379,7 +379,7 @@
synchronized(mToneGeneratorLock) {
if (mToneGenerator == null) {
try {
- mToneGenerator = new ToneGenerator(AudioManager.STREAM_RING,
+ mToneGenerator = new ToneGenerator(AudioManager.STREAM_VOICE_CALL,
TONE_RELATIVE_VOLUME);
} catch (RuntimeException e) {
Log.w(TAG, "Exception caught while creating local tone generator: " + e);
diff --git a/src/com/android/contacts/ViewContactActivity.java b/src/com/android/contacts/ViewContactActivity.java
index 4690b12..99e72b0 100644
--- a/src/com/android/contacts/ViewContactActivity.java
+++ b/src/com/android/contacts/ViewContactActivity.java
@@ -105,6 +105,8 @@
private static final String TAG = "ViewContact";
private static final String SHOW_BARCODE_INTENT = "com.google.zxing.client.android.ENCODE";
+ private static final boolean SHOW_SEPARATORS = false;
+
private static final String[] PHONE_KEYS = {
Contacts.Intents.Insert.PHONE,
Contacts.Intents.Insert.SECONDARY_PHONE,
@@ -313,7 +315,7 @@
mAdapter = new ViewAdapter(this, mSections);
setListAdapter(mAdapter);
} else {
- mAdapter.setSections(mSections, true);
+ mAdapter.setSections(mSections, SHOW_SEPARATORS);
}
} else {
Toast.makeText(this, R.string.invalidContactMessage, Toast.LENGTH_SHORT).show();
@@ -352,9 +354,9 @@
private boolean isBarcodeScannerInstalled() {
final Intent intent = new Intent(SHOW_BARCODE_INTENT);
- List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent,
+ ResolveInfo ri = getPackageManager().resolveActivity(intent,
PackageManager.MATCH_DEFAULT_ONLY);
- return list.size() > 0;
+ return ri != null;
}
@Override
@@ -373,7 +375,7 @@
return;
}
- ViewEntry entry = ContactEntryAdapter.getEntry(mSections, info.position, true);
+ ViewEntry entry = ContactEntryAdapter.getEntry(mSections, info.position, SHOW_SEPARATORS);
switch (entry.kind) {
case Contacts.KIND_PHONE: {
menu.add(0, 0, 0, R.string.menu_call).setIntent(entry.intent);
@@ -458,7 +460,8 @@
break;
}
- ViewEntry entry = ContactEntryAdapter.getEntry(mSections, info.position, true);
+ ViewEntry entry = ContactEntryAdapter.getEntry(mSections, info.position,
+ SHOW_SEPARATORS);
ContentValues values = new ContentValues(1);
values.put(People.PRIMARY_PHONE_ID, entry.id);
getContentResolver().update(mUri, values, null, null);
@@ -486,7 +489,7 @@
int index = getListView().getSelectedItemPosition();
if (index != -1) {
- ViewEntry entry = ViewAdapter.getEntry(mSections, index, true);
+ ViewEntry entry = ViewAdapter.getEntry(mSections, index, SHOW_SEPARATORS);
if (entry.kind == Contacts.KIND_PHONE) {
Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED, entry.uri);
startActivity(intent);
@@ -510,7 +513,7 @@
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
- ViewEntry entry = ViewAdapter.getEntry(mSections, position, true);
+ ViewEntry entry = ViewAdapter.getEntry(mSections, position, SHOW_SEPARATORS);
if (entry != null) {
Intent intent = entry.intent;
if (intent != null) {
@@ -576,7 +579,16 @@
separator.data = getString(R.string.listSeparatorOtherInformation);
mOtherEntries.add(separator);
}
-
+
+ private Uri constructImToUrl(String host, String data) {
+ // don't encode the url, because the Activity Manager can't find using the encoded url
+ StringBuilder buf = new StringBuilder("imto://");
+ buf.append(host);
+ buf.append('/');
+ buf.append(data);
+ return Uri.parse(buf.toString());
+ }
+
/**
* Build up the entries to display on the screen.
*
@@ -588,7 +600,10 @@
for (int i = 0; i < numSections; i++) {
mSections.get(i).clear();
}
- buildSeparators();
+
+ if (SHOW_SEPARATORS) {
+ buildSeparators();
+ }
// Build up the phone entries
final Uri phonesUri = Uri.withAppendedPath(mUri, People.Phones.CONTENT_DIRECTORY);
@@ -614,7 +629,8 @@
// Add a phone number entry
final ViewEntry entry = new ViewEntry();
- entry.label = Phones.getDisplayLabel(this, type, label).toString();
+ final CharSequence displayLabel = Phones.getDisplayLabel(this, type, label);
+ entry.label = buildActionString(R.string.actionCall, displayLabel, true);
entry.data = number;
entry.id = id;
entry.uri = uri;
@@ -625,13 +641,13 @@
if (isPrimary) {
entry.primaryIcon = R.drawable.ic_default_number;
}
- entry.actionIcon = R.drawable.sym_action_call;
+ entry.actionIcon = android.R.drawable.sym_action_call;
mPhoneEntries.add(entry);
if (type == Phones.TYPE_MOBILE || mShowSmsLinksForAllPhones) {
// Add an SMS entry
ViewEntry smsEntry = new ViewEntry();
- smsEntry.label = entry.label;
+ smsEntry.label = buildActionString(R.string.actionText, displayLabel, true);
smsEntry.data = number;
smsEntry.id = id;
smsEntry.uri = uri;
@@ -675,22 +691,18 @@
switch (kind) {
case Contacts.KIND_EMAIL:
- entry.label = ContactMethods.getDisplayLabel(this, kind, type, label)
- .toString();
+ entry.label = buildActionString(R.string.actionEmail,
+ ContactMethods.getDisplayLabel(this, kind, type, label), true);
entry.data = data;
entry.intent = new Intent(Intent.ACTION_SENDTO,
Uri.fromParts("mailto", data, null));
- if (!methodsCursor.isNull(METHODS_STATUS_COLUMN)) {
- entry.presenceIcon = Presence.getPresenceIconResourceId(
- methodsCursor.getInt(METHODS_STATUS_COLUMN));
- }
- entry.actionIcon = R.drawable.sym_action_email;
+ entry.actionIcon = android.R.drawable.sym_action_email;
mEmailEntries.add(entry);
break;
case Contacts.KIND_POSTAL:
- entry.label = ContactMethods.getDisplayLabel(this, kind, type, label)
- .toString();
+ entry.label = buildActionString(R.string.actionMap,
+ ContactMethods.getDisplayLabel(this, kind, type, label), true);
entry.data = data;
entry.maxLines = 4;
entry.intent = new Intent(Intent.ACTION_VIEW, uri);
@@ -701,34 +713,34 @@
case Contacts.KIND_IM: {
Object protocolObj = ContactMethods.decodeImProtocol(
methodsCursor.getString(METHODS_AUX_DATA_COLUMN));
- String providerCategory;
+ String host;
if (protocolObj instanceof Number) {
int protocol = ((Number) protocolObj).intValue();
- entry.label = protocolStrings[protocol];
- providerCategory = ContactMethods.lookupProviderCategoryFromId(
- protocol);
+ entry.label = buildActionString(R.string.actionChat,
+ protocolStrings[protocol], false);
+ host = ContactMethods.lookupProviderNameFromId(protocol).toLowerCase();
if (protocol == ContactMethods.PROTOCOL_GOOGLE_TALK
|| protocol == ContactMethods.PROTOCOL_MSN) {
entry.maxLabelLines = 2;
}
} else {
String providerName = (String) protocolObj;
- entry.label = providerName;
- providerCategory = Im.Provider.getProviderCategoryFromName(
- providerName);
+ entry.label = buildActionString(R.string.actionChat,
+ providerName, false);
+ host = providerName.toLowerCase();
}
- // Only add the intent if there is a valid provider name
- if (!TextUtils.isEmpty(providerCategory)) {
+ // Only add the intent if there is a valid host
+ if (!TextUtils.isEmpty(host)) {
entry.intent = new Intent(Intent.ACTION_SENDTO,
- Uri.fromParts("im", data, null)).addCategory(providerCategory);
+ constructImToUrl(host, data));
}
entry.data = data;
if (!methodsCursor.isNull(METHODS_STATUS_COLUMN)) {
entry.presenceIcon = Presence.getPresenceIconResourceId(
methodsCursor.getInt(METHODS_STATUS_COLUMN));
}
- entry.actionIcon = R.drawable.sym_action_chat;
+ entry.actionIcon = android.R.drawable.sym_action_chat;
mImEntries.add(entry);
break;
}
@@ -755,26 +767,25 @@
String label;
Object protocolObj = ContactMethods.decodeImProtocol(
presenceCursor.getString(1));
- String providerCategory;
+ String host;
if (protocolObj instanceof Number) {
int protocol = ((Number) protocolObj).intValue();
label = getResources().getStringArray(
android.R.array.imProtocols)[protocol];
- providerCategory = ContactMethods.lookupProviderCategoryFromId(
- protocol);
+ host = ContactMethods.lookupProviderNameFromId(protocol).toLowerCase();
} else {
String providerName = (String) protocolObj;
label = providerName;
- providerCategory = Im.Provider.getProviderCategoryFromName(providerName);
+ host = providerName.toLowerCase();
}
- if (TextUtils.isEmpty(providerCategory)) {
+ if (TextUtils.isEmpty(host)) {
// A valid provider name is required
continue;
}
- Intent intent = new Intent(Intent.ACTION_SENDTO,
- Uri.fromParts("im", data, null)).addCategory(providerCategory);
+
+ Intent intent = new Intent(Intent.ACTION_SENDTO, constructImToUrl(host, data));
// Check to see if there is already an entry for this IM account
boolean addEntry = true;
@@ -797,7 +808,7 @@
entry.data = data;
entry.label = label;
entry.intent = intent;
- entry.actionIcon = R.drawable.sym_action_chat;
+ entry.actionIcon = android.R.drawable.sym_action_chat;
entry.presenceIcon = Presence.getPresenceIconResourceId(
presenceCursor.getInt(2));
entry.maxLabelLines = 2;
@@ -820,11 +831,14 @@
entry.id = organizationsCursor.getLong(ORGANIZATIONS_ID_COLUMN);
entry.uri = ContentUris.withAppendedId(organizationsUri, entry.id);
entry.kind = Contacts.KIND_ORGANIZATION;
- entry.data = organizationsCursor.getString(ORGANIZATIONS_COMPANY_COLUMN);
- entry.data2 = organizationsCursor.getString(ORGANIZATIONS_TITLE_COLUMN);
+ entry.label = organizationsCursor.getString(ORGANIZATIONS_COMPANY_COLUMN);
+ entry.data = organizationsCursor.getString(ORGANIZATIONS_TITLE_COLUMN);
+ entry.actionIcon = R.drawable.sym_action_organization;
+/*
entry.label = Organizations.getDisplayLabel(this,
organizationsCursor.getInt(ORGANIZATIONS_TYPE_COLUMN),
organizationsCursor.getString(ORGANIZATIONS_LABEL_COLUMN)).toString();
+*/
mOrganizationEntries.add(entry);
}
@@ -843,6 +857,7 @@
entry.uri = null;
entry.intent = null;
entry.maxLines = 10;
+ entry.actionIcon = R.drawable.sym_note;
mOtherEntries.add(entry);
}
@@ -859,32 +874,41 @@
entry.data = ringtone.getTitle(this);
entry.kind = ViewEntry.KIND_CONTACT;
entry.uri = ringtoneUri;
+ entry.actionIcon = R.drawable.sym_ringtone;
mOtherEntries.add(entry);
}
}
}
+ // Build the send directly to voice mail entry
boolean sendToVoicemail = personCursor.getInt(CONTACT_SEND_TO_VOICEMAIL_COLUMN) == 1;
if (sendToVoicemail) {
ViewEntry entry = new ViewEntry();
- entry.label = getString(R.string.send_to_voicemail_view);
- entry.isLabelOnly = true;
+ entry.label = getString(R.string.actionIncomingCall);
+ entry.data = getString(R.string.detailIncomingCallsGoToVoicemail);
entry.kind = ViewEntry.KIND_CONTACT;
+ entry.actionIcon = R.drawable.sym_send_to_voicemail;
mOtherEntries.add(entry);
}
}
+ String buildActionString(int actionResId, CharSequence type, boolean lowerCase) {
+ if (lowerCase) {
+ return getString(actionResId, type.toString().toLowerCase());
+ } else {
+ return getString(actionResId, type.toString());
+ }
+ }
+
/**
* A basic structure with the data for a contact entry in the list.
*/
- private final static class ViewEntry extends ContactEntryAdapter.Entry {
+ final static class ViewEntry extends ContactEntryAdapter.Entry {
public int primaryIcon = -1;
public Intent intent;
public Intent auxIntent = null;
public int presenceIcon = -1;
public int actionIcon = -1;
- public String data2 = null;
- public boolean isLabelOnly = false;
public int maxLabelLines = 1;
}
@@ -893,25 +917,26 @@
static class ViewCache {
public TextView label;
public TextView data;
- public TextView data2;
+ public ImageView actionIcon;
+ public ImageView presenceIcon;
// Need to keep track of this too
ViewEntry entry;
}
ViewAdapter(Context context, ArrayList<ArrayList<ViewEntry>> sections) {
- super(context, sections, true);
+ super(context, sections, SHOW_SEPARATORS);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
- ViewEntry entry = getEntry(mSections, position, true);
+ ViewEntry entry = getEntry(mSections, position, false);
View v;
// Handle separators specially
if (entry.kind == ViewEntry.KIND_SEPARATOR) {
TextView separator = (TextView) mInflater.inflate(
- R.layout.list_separator, parent, false);
+ R.layout.list_separator, parent, SHOW_SEPARATORS);
separator.setText(entry.data);
return separator;
}
@@ -920,58 +945,23 @@
// Check to see if we can reuse convertView
if (convertView != null) {
- views = (ViewCache) convertView.getTag();
- if (views != null) {
- ViewEntry origEntry = views.entry;
- if (origEntry != null) {
- // Check to see if the view and the entry are compatible
- if (entry.kind == Contacts.KIND_ORGANIZATION
- && origEntry.kind != Contacts.KIND_ORGANIZATION) {
- v = null;
- } else if (entry.kind != Contacts.KIND_ORGANIZATION
- && origEntry.kind == Contacts.KIND_ORGANIZATION) {
- v = null;
- } else if (entry.isLabelOnly != origEntry.isLabelOnly) {
- v = null;
- } else {
- v = convertView;
- }
- } else {
- v = null;
- }
- } else {
- v = null;
- }
+ v = convertView;
+ views = (ViewCache) v.getTag();
} else {
- v = null;
- }
-
- // Create a new view if needed
- if (v == null) {
- if (entry.kind == Contacts.KIND_ORGANIZATION) {
- v = mInflater.inflate(R.layout.view_contact_entry_organization, parent, false);
- } else if (entry.isLabelOnly) {
- v = mInflater.inflate(R.layout.view_contact_entry_only_label, parent, false);
- } else {
- v = mInflater.inflate(R.layout.view_contact_entry, parent, false);
- }
+ // Create a new view if needed
+ v = mInflater.inflate(R.layout.list_item_text_icons, parent, false);
// Cache the children
views = new ViewCache();
- views.label = (TextView) v.findViewById(R.id.label);
- views.data = (TextView) v.findViewById(R.id.data);
- // label-only contact entries don't have a data view
- if (views.data != null) {
- views.data.setCompoundDrawablePadding(3);
- }
- views.data2 = (TextView) v.findViewById(R.id.data2);
- } else {
- views = (ViewCache) v.getTag();
+ views.label = (TextView) v.findViewById(android.R.id.text1);
+ views.data = (TextView) v.findViewById(android.R.id.text2);
+ views.actionIcon = (ImageView) v.findViewById(R.id.icon1);
+ views.presenceIcon = (ImageView) v.findViewById(R.id.icon2);
+ v.setTag(views);
}
- // Set the tag on the view so it knows what it's displaying
+ // Update the entry in the view cache
views.entry = entry;
- v.setTag(views);
// Bind the data to the view
bindView(v, entry);
@@ -1001,27 +991,30 @@
setMaxLines(data, entry.maxLines);
}
- // Set the left icon
- Drawable left = null;
- if (entry.primaryIcon != -1) {
- left = resources.getDrawable(entry.primaryIcon);
- } else if (entry.presenceIcon != -1) {
- left = resources.getDrawable(entry.presenceIcon);
- }
-
- // Set the right icon
- Drawable right = null;
+ // Set the action icon
+ ImageView action = views.actionIcon;
if (entry.actionIcon != -1) {
- right = resources.getDrawable(entry.actionIcon);
- }
-
- if (data != null) {
- data.setCompoundDrawablesWithIntrinsicBounds(left, null, right, null);
+ action.setImageDrawable(resources.getDrawable(entry.actionIcon));
+ action.setVisibility(View.VISIBLE);
+ } else {
+ // Things should still line up as if there was an icon, so make it invisible
+ action.setVisibility(View.INVISIBLE);
}
- // Set data2 if we have it
- if (entry.kind == Contacts.KIND_ORGANIZATION) {
- views.data2.setText(entry.data2);
+ // Set the presence icon
+ Drawable presenceIcon = null;
+ if (entry.primaryIcon != -1) {
+ presenceIcon = resources.getDrawable(entry.primaryIcon);
+ } else if (entry.presenceIcon != -1) {
+ presenceIcon = resources.getDrawable(entry.presenceIcon);
+ }
+
+ ImageView presence = views.presenceIcon;
+ if (presenceIcon != null) {
+ presence.setImageDrawable(presenceIcon);
+ presence.setVisibility(View.VISIBLE);
+ } else {
+ presence.setVisibility(View.GONE);
}
}