OSDN Git Service

auto import from //branches/cupcake/...@131421
authorThe Android Open Source Project <initial-contribution@android.com>
Fri, 13 Feb 2009 20:57:53 +0000 (12:57 -0800)
committerThe Android Open Source Project <initial-contribution@android.com>
Fri, 13 Feb 2009 20:57:53 +0000 (12:57 -0800)
42 files changed:
res/drawable-finger/btn_circle.xml [new file with mode: 0644]
res/drawable-finger/btn_circle_disable.png [new file with mode: 0644]
res/drawable-finger/btn_circle_disable_focused.png [new file with mode: 0644]
res/drawable-finger/btn_circle_longpress.png [new file with mode: 0644]
res/drawable-finger/btn_circle_normal.png [new file with mode: 0644]
res/drawable-finger/btn_circle_pressed.png [new file with mode: 0644]
res/drawable-finger/btn_circle_selected.png [new file with mode: 0644]
res/drawable-finger/btn_contact_picture.xml [new file with mode: 0644]
res/drawable-finger/contact_picture_border_highlight.9.png [new file with mode: 0644]
res/drawable-finger/contact_picture_border_longpress.9.png [new file with mode: 0644]
res/drawable-finger/contact_picture_border_normal.9.png [new file with mode: 0644]
res/drawable-finger/contact_picture_border_pressed.9.png [new file with mode: 0644]
res/drawable-finger/ic_btn_round_minus.png [new file with mode: 0644]
res/drawable-finger/ic_btn_round_more.png [new file with mode: 0644]
res/drawable-finger/ic_btn_round_plus.png [new file with mode: 0644]
res/layout-finger/edit_contact.xml
res/layout-finger/edit_contact_entry.xml
res/layout-finger/edit_contact_entry_org.xml
res/layout-finger/edit_contact_entry_ringtone.xml
res/layout-finger/edit_contact_entry_static_label.xml
res/layout-finger/edit_contact_entry_voicemail.xml [new file with mode: 0644]
res/layout-finger/edit_divider.xml [new file with mode: 0644]
res/layout-finger/edit_separator.xml
res/layout-finger/edit_separator_alone.xml [new file with mode: 0644]
res/values-cs/strings.xml
res/values-de/strings.xml
res/values-en-rGB/strings.xml [deleted file]
res/values-es/strings.xml
res/values-fr/strings.xml
res/values-it/strings.xml
res/values-ja/strings.xml
res/values-ko/strings.xml
res/values-nb/strings.xml
res/values-nl/strings.xml
res/values-pl/strings.xml
res/values-ru/strings.xml
res/values-zh-rCN/strings.xml
res/values-zh-rTW/strings.xml
res/values/strings.xml
res/values/styles.xml [new file with mode: 0644]
src/com/android/contacts/EditContactActivity.java
src/com/android/contacts/TwelveKeyDialer.java

diff --git a/res/drawable-finger/btn_circle.xml b/res/drawable-finger/btn_circle.xml
new file mode 100644 (file)
index 0000000..9208010
--- /dev/null
@@ -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 (file)
index 0000000..33b74a6
Binary files /dev/null and b/res/drawable-finger/btn_circle_disable.png 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 (file)
index 0000000..005ad8d
Binary files /dev/null and b/res/drawable-finger/btn_circle_disable_focused.png differ
diff --git a/res/drawable-finger/btn_circle_longpress.png b/res/drawable-finger/btn_circle_longpress.png
new file mode 100644 (file)
index 0000000..f27d411
Binary files /dev/null and b/res/drawable-finger/btn_circle_longpress.png differ
diff --git a/res/drawable-finger/btn_circle_normal.png b/res/drawable-finger/btn_circle_normal.png
new file mode 100644 (file)
index 0000000..51268af
Binary files /dev/null and b/res/drawable-finger/btn_circle_normal.png differ
diff --git a/res/drawable-finger/btn_circle_pressed.png b/res/drawable-finger/btn_circle_pressed.png
new file mode 100644 (file)
index 0000000..8f40afd
Binary files /dev/null and b/res/drawable-finger/btn_circle_pressed.png differ
diff --git a/res/drawable-finger/btn_circle_selected.png b/res/drawable-finger/btn_circle_selected.png
new file mode 100644 (file)
index 0000000..0828a7b
Binary files /dev/null and b/res/drawable-finger/btn_circle_selected.png differ
diff --git a/res/drawable-finger/btn_contact_picture.xml b/res/drawable-finger/btn_contact_picture.xml
new file mode 100644 (file)
index 0000000..643231a
--- /dev/null
@@ -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 (file)
index 0000000..fc4e01d
Binary files /dev/null and b/res/drawable-finger/contact_picture_border_highlight.9.png 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 (file)
index 0000000..c89a55a
Binary files /dev/null and b/res/drawable-finger/contact_picture_border_longpress.9.png 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 (file)
index 0000000..37451ae
Binary files /dev/null and b/res/drawable-finger/contact_picture_border_normal.9.png 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 (file)
index 0000000..11eaae5
Binary files /dev/null and b/res/drawable-finger/contact_picture_border_pressed.9.png 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 (file)
index 0000000..96dbb17
Binary files /dev/null and b/res/drawable-finger/ic_btn_round_minus.png 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 (file)
index 0000000..ebdc55c
Binary files /dev/null and b/res/drawable-finger/ic_btn_round_more.png 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 (file)
index 0000000..1ec8a95
Binary files /dev/null and b/res/drawable-finger/ic_btn_round_plus.png differ
index a33d447..a3a1849 100644 (file)
@@ -18,7 +18,6 @@
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:orientation="vertical"
-    android:scrollbarStyle="insideInset"
     android:fillViewport="true">
 
     <LinearLayout
         >
 
             <FrameLayout
-                android:layout_width="84dip"
-                android:layout_height="84dip"
+                android:layout_width="76dip"
+                android:layout_height="76dip"
                 android:layout_marginTop="4dip"
-                android:layout_marginLeft="3dip"
-                android:layout_marginBottom="3dip"
+                android:layout_marginLeft="6dip"
+                android:layout_marginBottom="6dip"
                 android:layout_marginRight="2dip"
             >
                 <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:src="@drawable/ic_menu_add_picture"
                     android:scaleType="center"
-                    android:background="@drawable/border"
+                    android:background="@drawable/btn_contact_picture"
                 />
             </FrameLayout>
 
@@ -60,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"
         <!-- "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"
                 android:orientation="vertical"
             />
 
-            <!-- Send to voicemail checkbox -->
-            <RelativeLayout
-                android:layout_width="fill_parent"
-                android:layout_height="?android:attr/listPreferredItemHeight"
-                android:layout_marginLeft="8dip"
-                android:layout_marginRight="6dip"
-            >
-
-                <TextView
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_centerVertical="true"
-                    android:layout_alignParentLeft="true"
-                    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"
-                />
-
-            </RelativeLayout>
-
-            <View
-                android:layout_width="fill_parent"
-                android:layout_height="1dip"
-                android:background="?android:attr/listDivider"
-            />
-
-            <TextView
-                android:layout_width="fill_parent"
-                android:layout_height="wrap_content"
-                android:gravity="center_vertical"
-                android:background="@android:drawable/dark_header"
-                android:textColor="?android:attr/textColorSecondary"
-                android:textStyle="bold"
-                android:textSize="14sp"
-                android:text="@string/listSeparatorMore_edit"
-                android:paddingLeft="8dip"
-            />
-
-            <View
-                android:layout_width="fill_parent"
-                android:layout_height="1dip"
-                android:background="?android:attr/listDivider"
-            />
-
-            <LinearLayout
-                android:layout_width="fill_parent"
-                android:layout_height="?android:attr/listPreferredItemHeight"
-                android:orientation="horizontal"
-                android:gravity="center_vertical"
-                android:baselineAligned="false"
-            >
-
-                <!-- The add more button -->
-                <Button android:id="@+id/addMore"
-                    android:layout_width="fill_parent"
-                    android:layout_height="wrap_content"
-                    android:textAppearance="?android:attr/textAppearanceMedium"
-                    android:text="@string/add_more_items"
-                    android:gravity="left|center_vertical"
-                    android:background="@android:drawable/btn_dropdown"
-                />
-
-            </LinearLayout>
-
-            <View
-                android:layout_width="fill_parent"
-                android:layout_height="32dip"
-            />
-
         </LinearLayout>
 
         <LinearLayout
-            android:orientation="horizontal"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
-            android:paddingTop="5dip"
-            android:paddingLeft="4dip"
-            android:paddingRight="4dip"
-            android:paddingBottom="1dip"   
-            android:background="@android:drawable/bottom_bar"
+            android:orientation="horizontal"
+            style="@android:style/ButtonBar"
         >
 
             <Button android:id="@+id/saveButton"
                 android:layout_width="0dip"
-                android:layout_height="fill_parent"
+                android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="@string/menu_done"
             />
 
             <Button android:id="@+id/discardButton"
                 android:layout_width="0dip"
-                android:layout_height="fill_parent"
+                android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:text="@string/menu_doNotSave"
             />
index 8512dd4..d17fdf7 100644 (file)
 <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="4dip"
+    <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:attr/listDivider"
-    />
 </LinearLayout>
index a2f5863..9daf3d1 100644 (file)
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
-    android:orientation="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"
+        />
+
     <LinearLayout
-        android:layout_width="fill_parent"
+        android:layout_width="0dip"
         android:layout_height="wrap_content"
-        android:orientation="horizontal"
+        android:layout_weight="1"
+        android:orientation="vertical"
         android:baselineAligned="false"
         android:gravity="center_vertical"
-    >
+        >
 
-        <Button android:id="@+id/label"
-            android:layout_width="100dip"
+        <EditText android:id="@+id/data"
+            android:layout_width="fill_parent"
             android:layout_height="wrap_content"
-            android:gravity="left|center_vertical"
-        />
+            android:layout_marginLeft="4dip"
+            />
 
-        <LinearLayout
+        <EditText android:id="@+id/data2"
             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"
-            >
-
-                <EditText android:id="@+id/data"
-                    android:layout_width="0dip"
-                    android:layout_weight="1"
-                    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"
-            >
+            android:layout_marginLeft="4dip"
+            />
 
-                <EditText android:id="@+id/data2"
-                    android:layout_width="0dip"
-                    android:layout_weight="1"
-                    android:layout_height="wrap_content"
-                    android:layout_marginLeft="4dip"
-                />
-
-                <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:attr/listDivider"
-    />
+    <ImageButton android:id="@+id/delete"
+        style="@style/MinusButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        />
+
 </LinearLayout>
index b1665d7..f2a171f 100644 (file)
 -->
 
 <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"
->
+    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"
+    >
 
-    <LinearLayout
-        android:layout_width="fill_parent"
+    <RelativeLayout
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:orientation="horizontal"
-        android:baselineAligned="false"
-        android:gravity="center_vertical"
-    >
+        android:layout_marginLeft="14dip"
+        android:layout_marginTop="6dip"
+        android:layout_marginBottom="6dip"
+        android:layout_weight="1"
+        android:duplicateParentState="true"
+        >
 
-        <!-- We still provide a label for our parent, but we keep it hidden -->
         <TextView android:id="@+id/label"
-            android:layout_width="0dip"
-            android:layout_height="0dip"
-            android:visibility="gone"
-        />
+            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"
+            />
 
-        <Button android:id="@+id/data"
-            android:layout_width="fill_parent"
+        <TextView android:id="@+id/data"
+            android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceMediumInverse"
-            android:baselineAligned="false"
-            android:background="@android:drawable/btn_dropdown"
-            android:gravity="left|center_vertical"
-            android:maxLines="1"
-            android:layout_marginTop="6dip"
-            android:layout_marginBottom="6dip"
-        />
+            android:layout_below="@+id/label"
+            android:layout_alignLeft="@+id/label"
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:maxLines="2"
+            android:duplicateParentState="true"
+            />
+
+    </RelativeLayout>
 
-    </LinearLayout>
+    <ImageView
+        style="@style/MoreButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        />
 
-    <View
-        android:layout_width="fill_parent"
-        android:layout_height="1dip"
-        android:background="?android:attr/listDivider"
-    />
 </LinearLayout>
index 12c8148..5e40631 100644 (file)
 <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:attr/listDivider"
-    />
 </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 (file)
index 0000000..7b66500
--- /dev/null
@@ -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/layout-finger/edit_divider.xml b/res/layout-finger/edit_divider.xml
new file mode 100644 (file)
index 0000000..1dbb563
--- /dev/null
@@ -0,0 +1,21 @@
+<?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.
+-->
+
+<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"
+    />
index 82fc12e..f638ade 100644 (file)
 <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="@android:drawable/dark_header"
-        android:textColor="?android:attr/textColorSecondary"
-        android:textStyle="bold"
-        android:textSize="14sp"
-        android:paddingLeft="8dip"
-    />
-
-    <View
-        android:layout_width="fill_parent"
-        android:layout_height="1dip"
-        android:background="?android:attr/listDivider"
-    />
+        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"
+        >
 
-</LinearLayout>
+        <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"
+            />
+
+        <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 (file)
index 0000000..c42af1c
--- /dev/null
@@ -0,0 +1,48 @@
+<?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"
+        />
+
+    <ImageView android:id="@+id/add"
+        style="@style/PlusButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:gravity="center_vertical"
+        />
+
+</LinearLayout>
index b87ef27..e3eef4e 100644 (file)
     <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">"Rychlé zasílání zpráv"</string>
+    <!-- no translation found for listSeparatorSendIm_edit (3793290685553377986) -->
+    <skip />
     <string name="listSeparatorMapAddress">"Adresa na mapě"</string>
-    <string name="listSeparatorMapAddress_edit">"Adresa na mapě"</string>
+    <!-- no translation found for listSeparatorMapAddress_edit (298711187672067985) -->
+    <skip />
     <string name="listSeparatorOrganizations">"Organizace"</string>
     <string name="listSeparatorOtherInformation">"Ostatní informace"</string>
     <string name="listSeparatorOtherInformation_edit">"Další možnosti"</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>
+    <!-- no translation found for actionCall (695145166039381504) -->
+    <skip />
+    <!-- no translation found for actionEmail (3870371552333656807) -->
+    <skip />
+    <!-- no translation found for actionText (6399049224844880108) -->
+    <skip />
+    <!-- no translation found for actionChat (31079429748650300) -->
+    <skip />
+    <!-- no translation found for actionMap (1977955782051732775) -->
+    <skip />
+    <!-- no translation found for actionIncomingCall (6028930669817038600) -->
+    <skip />
+    <!-- no translation found for detailIncomingCallsGoToVoicemail (9163373178772231307) -->
+    <skip />
+    <!-- no translation found for detailsRingtone (4052108748982701775) -->
+    <skip />
+    <!-- no translation found for callBack (5498224409038809224) -->
+    <skip />
 </resources>
index 489d43f..d1fcdc8 100644 (file)
     <string name="listSeparatorSendEmail">"E-Mail senden"</string>
     <string name="listSeparatorSendEmail_edit">"E-Mail-Adressen"</string>
     <string name="listSeparatorSendIm">"Per Chat kontaktieren"</string>
-    <string name="listSeparatorSendIm_edit">"Instant Messenger"</string>
+    <!-- no translation found for listSeparatorSendIm_edit (3793290685553377986) -->
+    <skip />
     <string name="listSeparatorMapAddress">"Adresse in Maps"</string>
-    <string name="listSeparatorMapAddress_edit">"Adresse auf der Karte"</string>
+    <!-- no translation found for listSeparatorMapAddress_edit (298711187672067985) -->
+    <skip />
     <string name="listSeparatorOrganizations">"Organisationen"</string>
     <string name="listSeparatorOtherInformation">"Mehr Informationen"</string>
     <string name="listSeparatorOtherInformation_edit">"Sonstige Optionen"</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>
+    <!-- no translation found for actionCall (695145166039381504) -->
+    <skip />
+    <!-- no translation found for actionEmail (3870371552333656807) -->
+    <skip />
+    <!-- no translation found for actionText (6399049224844880108) -->
+    <skip />
+    <!-- no translation found for actionChat (31079429748650300) -->
+    <skip />
+    <!-- no translation found for actionMap (1977955782051732775) -->
+    <skip />
+    <!-- no translation found for actionIncomingCall (6028930669817038600) -->
+    <skip />
+    <!-- no translation found for detailIncomingCallsGoToVoicemail (9163373178772231307) -->
+    <skip />
+    <!-- no translation found for detailsRingtone (4052108748982701775) -->
+    <skip />
+    <!-- no translation found for callBack (5498224409038809224) -->
+    <skip />
 </resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
deleted file mode 100644 (file)
index 67bf0cf..0000000
+++ /dev/null
@@ -1,123 +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="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>
index 0f750b9..b7a9914 100644 (file)
     <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">"Mensajería instantánea"</string>
+    <!-- no translation found for listSeparatorSendIm_edit (3793290685553377986) -->
+    <skip />
     <string name="listSeparatorMapAddress">"Dirección en mapa"</string>
-    <string name="listSeparatorMapAddress_edit">"Asignar dirección"</string>
+    <!-- no translation found for listSeparatorMapAddress_edit (298711187672067985) -->
+    <skip />
     <string name="listSeparatorOrganizations">"Organizaciones"</string>
     <string name="listSeparatorOtherInformation">"Otra información"</string>
     <string name="listSeparatorOtherInformation_edit">"Otras opciones"</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>
+    <!-- no translation found for actionCall (695145166039381504) -->
+    <skip />
+    <!-- no translation found for actionEmail (3870371552333656807) -->
+    <skip />
+    <!-- no translation found for actionText (6399049224844880108) -->
+    <skip />
+    <!-- no translation found for actionChat (31079429748650300) -->
+    <skip />
+    <!-- no translation found for actionMap (1977955782051732775) -->
+    <skip />
+    <!-- no translation found for actionIncomingCall (6028930669817038600) -->
+    <skip />
+    <!-- no translation found for detailIncomingCallsGoToVoicemail (9163373178772231307) -->
+    <skip />
+    <!-- no translation found for detailsRingtone (4052108748982701775) -->
+    <skip />
+    <!-- no translation found for callBack (5498224409038809224) -->
+    <skip />
 </resources>
index 9d921c0..c65567e 100644 (file)
     <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">"Instant Messenger"</string>
+    <!-- no translation found for listSeparatorSendIm_edit (3793290685553377986) -->
+    <skip />
     <string name="listSeparatorMapAddress">"Adresse sur un plan"</string>
-    <string name="listSeparatorMapAddress_edit">"Adresse postale"</string>
+    <!-- no translation found for listSeparatorMapAddress_edit (298711187672067985) -->
+    <skip />
     <string name="listSeparatorOrganizations">"Organisations"</string>
     <string name="listSeparatorOtherInformation">"Autres informations"</string>
     <string name="listSeparatorOtherInformation_edit">"Autres options"</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>
+    <!-- no translation found for actionCall (695145166039381504) -->
+    <skip />
+    <!-- no translation found for actionEmail (3870371552333656807) -->
+    <skip />
+    <!-- no translation found for actionText (6399049224844880108) -->
+    <skip />
+    <!-- no translation found for actionChat (31079429748650300) -->
+    <skip />
+    <!-- no translation found for actionMap (1977955782051732775) -->
+    <skip />
+    <!-- no translation found for actionIncomingCall (6028930669817038600) -->
+    <skip />
+    <!-- no translation found for detailIncomingCallsGoToVoicemail (9163373178772231307) -->
+    <skip />
+    <!-- no translation found for detailsRingtone (4052108748982701775) -->
+    <skip />
+    <!-- no translation found for callBack (5498224409038809224) -->
+    <skip />
 </resources>
index 0b00fac..22d50aa 100644 (file)
     <string name="listSeparatorSendEmail">"Invia email"</string>
     <string name="listSeparatorSendEmail_edit">"Indirizzi email"</string>
     <string name="listSeparatorSendIm">"Invia msg IM"</string>
-    <string name="listSeparatorSendIm_edit">"Messaggistica istantanea"</string>
+    <!-- no translation found for listSeparatorSendIm_edit (3793290685553377986) -->
+    <skip />
     <string name="listSeparatorMapAddress">"Indirizzo su mappa"</string>
-    <string name="listSeparatorMapAddress_edit">"Visualizza indirizzo nella mappa"</string>
+    <!-- no translation found for listSeparatorMapAddress_edit (298711187672067985) -->
+    <skip />
     <string name="listSeparatorOrganizations">"Organizzazioni"</string>
     <string name="listSeparatorOtherInformation">"Altre informazioni"</string>
     <string name="listSeparatorOtherInformation_edit">"Altre opzioni"</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 ulteriori elementi"</string>
+    <!-- no translation found for actionCall (695145166039381504) -->
+    <skip />
+    <!-- no translation found for actionEmail (3870371552333656807) -->
+    <skip />
+    <!-- no translation found for actionText (6399049224844880108) -->
+    <skip />
+    <!-- no translation found for actionChat (31079429748650300) -->
+    <skip />
+    <!-- no translation found for actionMap (1977955782051732775) -->
+    <skip />
+    <!-- no translation found for actionIncomingCall (6028930669817038600) -->
+    <skip />
+    <!-- no translation found for detailIncomingCallsGoToVoicemail (9163373178772231307) -->
+    <skip />
+    <!-- no translation found for detailsRingtone (4052108748982701775) -->
+    <skip />
+    <!-- no translation found for callBack (5498224409038809224) -->
+    <skip />
 </resources>
index 6c09fb5..9586e29 100644 (file)
     <string name="listSeparatorSendEmail">"メールを送信"</string>
     <string name="listSeparatorSendEmail_edit">"メールアドレス"</string>
     <string name="listSeparatorSendIm">"インスタントメッセージを送信"</string>
-    <string name="listSeparatorSendIm_edit">"インスタントメッセンジャー"</string>
+    <!-- no translation found for listSeparatorSendIm_edit (3793290685553377986) -->
+    <skip />
     <string name="listSeparatorMapAddress">"地図でみる"</string>
-    <string name="listSeparatorMapAddress_edit">"マップアドレス"</string>
+    <!-- no translation found for listSeparatorMapAddress_edit (298711187672067985) -->
+    <skip />
     <string name="listSeparatorOrganizations">"勤務先情報"</string>
     <string name="listSeparatorOtherInformation">"その他の情報"</string>
     <string name="listSeparatorOtherInformation_edit">"その他のオプション"</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>
+    <!-- no translation found for actionCall (695145166039381504) -->
+    <skip />
+    <!-- no translation found for actionEmail (3870371552333656807) -->
+    <skip />
+    <!-- no translation found for actionText (6399049224844880108) -->
+    <skip />
+    <!-- no translation found for actionChat (31079429748650300) -->
+    <skip />
+    <!-- no translation found for actionMap (1977955782051732775) -->
+    <skip />
+    <!-- no translation found for actionIncomingCall (6028930669817038600) -->
+    <skip />
+    <!-- no translation found for detailIncomingCallsGoToVoicemail (9163373178772231307) -->
+    <skip />
+    <!-- no translation found for detailsRingtone (4052108748982701775) -->
+    <skip />
+    <!-- no translation found for callBack (5498224409038809224) -->
+    <skip />
 </resources>
index d7ebcb6..5868fc6 100644 (file)
     <string name="listSeparatorSendEmail">"이메일 보내기"</string>
     <string name="listSeparatorSendEmail_edit">"이메일 주소"</string>
     <string name="listSeparatorSendIm">"인스턴트 메시지 보내기"</string>
-    <string name="listSeparatorSendIm_edit">"인스턴트 메신저"</string>
+    <!-- no translation found for listSeparatorSendIm_edit (3793290685553377986) -->
+    <skip />
     <string name="listSeparatorMapAddress">"지도상의 주소"</string>
-    <string name="listSeparatorMapAddress_edit">"지도 주소"</string>
+    <!-- no translation found for listSeparatorMapAddress_edit (298711187672067985) -->
+    <skip />
     <string name="listSeparatorOrganizations">"조직"</string>
     <string name="listSeparatorOtherInformation">"기타 정보"</string>
     <string name="listSeparatorOtherInformation_edit">"기타 옵션"</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>
+    <!-- no translation found for actionCall (695145166039381504) -->
+    <skip />
+    <!-- no translation found for actionEmail (3870371552333656807) -->
+    <skip />
+    <!-- no translation found for actionText (6399049224844880108) -->
+    <skip />
+    <!-- no translation found for actionChat (31079429748650300) -->
+    <skip />
+    <!-- no translation found for actionMap (1977955782051732775) -->
+    <skip />
+    <!-- no translation found for actionIncomingCall (6028930669817038600) -->
+    <skip />
+    <!-- no translation found for detailIncomingCallsGoToVoicemail (9163373178772231307) -->
+    <skip />
+    <!-- no translation found for detailsRingtone (4052108748982701775) -->
+    <skip />
+    <!-- no translation found for callBack (5498224409038809224) -->
+    <skip />
 </resources>
index a5ee768..bed3c27 100644 (file)
@@ -85,7 +85,7 @@
     <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="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="listSeparatorSendEmail">"Send e-post"</string>
     <string name="listSeparatorSendEmail_edit">"E-postadresser"</string>
     <string name="listSeparatorSendIm">"Send lynmelding"</string>
-    <!-- no translation found for listSeparatorSendIm_edit (3793290685553377986) -->
-    <skip />
+    <string name="listSeparatorSendIm_edit">"Prateadresser"</string>
     <string name="listSeparatorMapAddress">"Se i kart"</string>
-    <!-- no translation found for listSeparatorMapAddress_edit (298711187672067985) -->
-    <skip />
+    <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="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>
-    <!-- no translation found for actionCall (695145166039381504) -->
-    <skip />
-    <!-- no translation found for actionEmail (3870371552333656807) -->
-    <skip />
-    <!-- no translation found for actionText (6399049224844880108) -->
-    <skip />
-    <!-- no translation found for actionChat (31079429748650300) -->
-    <skip />
-    <!-- no translation found for actionMap (1977955782051732775) -->
-    <skip />
-    <!-- no translation found for actionIncomingCall (6028930669817038600) -->
-    <skip />
-    <!-- no translation found for detailIncomingCallsGoToVoicemail (9163373178772231307) -->
-    <skip />
-    <!-- no translation found for detailsRingtone (4052108748982701775) -->
-    <skip />
-    <!-- no translation found for callBack (5498224409038809224) -->
-    <skip />
+    <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>
 </resources>
index b7f137b..110e6c8 100644 (file)
     <string name="listSeparatorSendEmail">"E-mail verzenden"</string>
     <string name="listSeparatorSendEmail_edit">"E-mailadressen"</string>
     <string name="listSeparatorSendIm">"Chatbericht verzenden"</string>
-    <string name="listSeparatorSendIm_edit">"Instant messenger"</string>
+    <!-- no translation found for listSeparatorSendIm_edit (3793290685553377986) -->
+    <skip />
     <string name="listSeparatorMapAddress">"Adres op kaart weergeven"</string>
-    <string name="listSeparatorMapAddress_edit">"Adres op kaart"</string>
+    <!-- no translation found for listSeparatorMapAddress_edit (298711187672067985) -->
+    <skip />
     <string name="listSeparatorOrganizations">"Organisaties"</string>
     <string name="listSeparatorOtherInformation">"Overige informatie"</string>
     <string name="listSeparatorOtherInformation_edit">"Andere opties"</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>
+    <!-- no translation found for actionCall (695145166039381504) -->
+    <skip />
+    <!-- no translation found for actionEmail (3870371552333656807) -->
+    <skip />
+    <!-- no translation found for actionText (6399049224844880108) -->
+    <skip />
+    <!-- no translation found for actionChat (31079429748650300) -->
+    <skip />
+    <!-- no translation found for actionMap (1977955782051732775) -->
+    <skip />
+    <!-- no translation found for actionIncomingCall (6028930669817038600) -->
+    <skip />
+    <!-- no translation found for detailIncomingCallsGoToVoicemail (9163373178772231307) -->
+    <skip />
+    <!-- no translation found for detailsRingtone (4052108748982701775) -->
+    <skip />
+    <!-- no translation found for callBack (5498224409038809224) -->
+    <skip />
 </resources>
index ca5790d..01cc51a 100644 (file)
     <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">"Komunikator internetowy"</string>
+    <!-- no translation found for listSeparatorSendIm_edit (3793290685553377986) -->
+    <skip />
     <string name="listSeparatorMapAddress">"Pokaż adres na mapie"</string>
-    <string name="listSeparatorMapAddress_edit">"Adres na mapie"</string>
+    <!-- no translation found for listSeparatorMapAddress_edit (298711187672067985) -->
+    <skip />
     <string name="listSeparatorOrganizations">"Organizacje"</string>
     <string name="listSeparatorOtherInformation">"Inne informacje"</string>
     <string name="listSeparatorOtherInformation_edit">"Inne opcje"</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>
+    <!-- no translation found for actionCall (695145166039381504) -->
+    <skip />
+    <!-- no translation found for actionEmail (3870371552333656807) -->
+    <skip />
+    <!-- no translation found for actionText (6399049224844880108) -->
+    <skip />
+    <!-- no translation found for actionChat (31079429748650300) -->
+    <skip />
+    <!-- no translation found for actionMap (1977955782051732775) -->
+    <skip />
+    <!-- no translation found for actionIncomingCall (6028930669817038600) -->
+    <skip />
+    <!-- no translation found for detailIncomingCallsGoToVoicemail (9163373178772231307) -->
+    <skip />
+    <!-- no translation found for detailsRingtone (4052108748982701775) -->
+    <skip />
+    <!-- no translation found for callBack (5498224409038809224) -->
+    <skip />
 </resources>
index c1f3310..8b847b0 100644 (file)
     <string name="listSeparatorSendEmail">"Отправить сообщение электронной почты"</string>
     <string name="listSeparatorSendEmail_edit">"Адреса электронной почты"</string>
     <string name="listSeparatorSendIm">"Отправить мгновенное сообщение"</string>
-    <string name="listSeparatorSendIm_edit">"Instant messenger"</string>
+    <!-- no translation found for listSeparatorSendIm_edit (3793290685553377986) -->
+    <skip />
     <string name="listSeparatorMapAddress">"Адрес на карте"</string>
-    <string name="listSeparatorMapAddress_edit">"Адрес на карте"</string>
+    <!-- no translation found for listSeparatorMapAddress_edit (298711187672067985) -->
+    <skip />
     <string name="listSeparatorOrganizations">"Организации"</string>
     <string name="listSeparatorOtherInformation">"Другие сведения"</string>
     <string name="listSeparatorOtherInformation_edit">"Другие параметры"</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>
+    <!-- no translation found for actionCall (695145166039381504) -->
+    <skip />
+    <!-- no translation found for actionEmail (3870371552333656807) -->
+    <skip />
+    <!-- no translation found for actionText (6399049224844880108) -->
+    <skip />
+    <!-- no translation found for actionChat (31079429748650300) -->
+    <skip />
+    <!-- no translation found for actionMap (1977955782051732775) -->
+    <skip />
+    <!-- no translation found for actionIncomingCall (6028930669817038600) -->
+    <skip />
+    <!-- no translation found for detailIncomingCallsGoToVoicemail (9163373178772231307) -->
+    <skip />
+    <!-- no translation found for detailsRingtone (4052108748982701775) -->
+    <skip />
+    <!-- no translation found for callBack (5498224409038809224) -->
+    <skip />
 </resources>
index 368e074..c2e033e 100644 (file)
     <string name="listSeparatorSendEmail">"发送电子邮件"</string>
     <string name="listSeparatorSendEmail_edit">"电子邮件地址"</string>
     <string name="listSeparatorSendIm">"发送即时消息"</string>
-    <string name="listSeparatorSendIm_edit">"即时通讯软件"</string>
+    <!-- no translation found for listSeparatorSendIm_edit (3793290685553377986) -->
+    <skip />
     <string name="listSeparatorMapAddress">"地图地址"</string>
-    <string name="listSeparatorMapAddress_edit">"地图地址"</string>
+    <!-- no translation found for listSeparatorMapAddress_edit (298711187672067985) -->
+    <skip />
     <string name="listSeparatorOrganizations">"组织"</string>
     <string name="listSeparatorOtherInformation">"其他信息"</string>
     <string name="listSeparatorOtherInformation_edit">"其他选项"</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>
+    <!-- no translation found for actionCall (695145166039381504) -->
+    <skip />
+    <!-- no translation found for actionEmail (3870371552333656807) -->
+    <skip />
+    <!-- no translation found for actionText (6399049224844880108) -->
+    <skip />
+    <!-- no translation found for actionChat (31079429748650300) -->
+    <skip />
+    <!-- no translation found for actionMap (1977955782051732775) -->
+    <skip />
+    <!-- no translation found for actionIncomingCall (6028930669817038600) -->
+    <skip />
+    <!-- no translation found for detailIncomingCallsGoToVoicemail (9163373178772231307) -->
+    <skip />
+    <!-- no translation found for detailsRingtone (4052108748982701775) -->
+    <skip />
+    <!-- no translation found for callBack (5498224409038809224) -->
+    <skip />
 </resources>
index b011f19..d56c253 100644 (file)
     <string name="listSeparatorSendEmail">"傳送電子郵件"</string>
     <string name="listSeparatorSendEmail_edit">"電子郵件地址"</string>
     <string name="listSeparatorSendIm">"傳送即時訊息"</string>
-    <string name="listSeparatorSendIm_edit">"即時通訊程式"</string>
+    <!-- no translation found for listSeparatorSendIm_edit (3793290685553377986) -->
+    <skip />
     <string name="listSeparatorMapAddress">"在地圖上顯示地址"</string>
-    <string name="listSeparatorMapAddress_edit">"以地圖顯示地址"</string>
+    <!-- no translation found for listSeparatorMapAddress_edit (298711187672067985) -->
+    <skip />
     <string name="listSeparatorOrganizations">"組織"</string>
     <string name="listSeparatorOtherInformation">"其他資訊"</string>
     <string name="listSeparatorOtherInformation_edit">"其他選項"</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>
+    <!-- no translation found for actionCall (695145166039381504) -->
+    <skip />
+    <!-- no translation found for actionEmail (3870371552333656807) -->
+    <skip />
+    <!-- no translation found for actionText (6399049224844880108) -->
+    <skip />
+    <!-- no translation found for actionChat (31079429748650300) -->
+    <skip />
+    <!-- no translation found for actionMap (1977955782051732775) -->
+    <skip />
+    <!-- no translation found for actionIncomingCall (6028930669817038600) -->
+    <skip />
+    <!-- no translation found for detailIncomingCallsGoToVoicemail (9163373178772231307) -->
+    <skip />
+    <!-- no translation found for detailsRingtone (4052108748982701775) -->
+    <skip />
+    <!-- no translation found for callBack (5498224409038809224) -->
+    <skip />
 </resources>
index bd09510..0edfcab 100644 (file)
     <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>
+    <string name="menu_doNotSave">Revert</string>
 
     <!-- The title of the activity that edits and existing contact -->
     <string name="editContact_title_edit">Edit contact</string>
diff --git a/res/values/styles.xml b/res/values/styles.xml
new file mode 100644 (file)
index 0000000..e43842c
--- /dev/null
@@ -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>
index d34713d..c12074e 100644 (file)
@@ -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.Context;
 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;
@@ -77,11 +76,10 @@ import android.telephony.PhoneNumberFormattingTextWatcher;
 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 +90,21 @@ import android.view.ViewParent;
 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 +119,25 @@ public final class EditContactActivity extends Activity implements View.OnClickL
     /** 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,7 +161,6 @@ public final class EditContactActivity extends Activity implements View.OnClickL
     
     private EditText mNameView;
     private ImageView mPhotoImageView;
-    private CheckBox mSendToVoicemailCheckBox;
     private LinearLayout mLayout;
     private LayoutInflater mInflater;
     private MenuItem mPhotoMenuItem;
@@ -186,25 +176,62 @@ public final class EditContactActivity extends Activity implements View.OnClickL
     /* 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.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();
@@ -214,8 +241,7 @@ public final class EditContactActivity extends Activity implements View.OnClickL
                 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
@@ -223,6 +249,9 @@ public final class EditContactActivity extends Activity implements View.OnClickL
                     entry.view.setVisibility(View.GONE);
                     entry.isDeleted = true;
                 }
+                
+                // Force rebuild of views because section headers might need to change
+                buildViews();
                 break;
             }
 
@@ -238,14 +267,6 @@ public final class EditContactActivity extends Activity implements View.OnClickL
                 }
                 break;
             }
-                
-            case R.id.data: {
-                EditEntry entry = findEntryForView(v);
-                if (isRingtoneEntry(entry)) {
-                    doPickRingtone(entry);
-                }
-                break;
-            }
         }
     }
 
@@ -318,13 +339,10 @@ public final class EditContactActivity extends Activity implements View.OnClickL
         mNameView = (EditText) findViewById(R.id.name);
         mPhotoImageView = (ImageView) findViewById(R.id.photoImage);
         mPhotoImageView.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);
@@ -375,6 +393,8 @@ public final class EditContactActivity extends Activity implements View.OnClickL
         mSections.add(mEmailEntries);
         mSections.add(mImEntries);
         mSections.add(mPostalEntries);
+        mSections.add(mOrgEntries);
+        mSections.add(mNoteEntries);
         mSections.add(mOtherEntries);
     }
     
@@ -384,6 +404,8 @@ public final class EditContactActivity extends Activity implements View.OnClickL
         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);
@@ -391,7 +413,6 @@ public final class EditContactActivity extends Activity implements View.OnClickL
         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);
     }
@@ -402,6 +423,8 @@ public final class EditContactActivity extends Activity implements View.OnClickL
         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();
 
@@ -418,7 +441,6 @@ public final class EditContactActivity extends Activity implements View.OnClickL
             setPhotoPresent(false);
         }
         mPhotoChanged = inState.getBoolean("photoChanged");
-        mSendToVoicemailCheckBox.setChecked(inState.getBoolean("sendToVoicemail"));
         mPhoneticNameView.setText(inState.getString("phoneticName"));
         mContactChanged = inState.getBoolean("contactChanged");
 
@@ -479,10 +501,6 @@ public final class EditContactActivity extends Activity implements View.OnClickL
                     .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);
@@ -506,10 +524,6 @@ public final class EditContactActivity extends Activity implements View.OnClickL
                 showDialog(DELETE_CONFIRMATION_DIALOG);
                 return true;
     
-            case MENU_ITEM_ADD:
-                doAddAction();
-                return true;
-
             case MENU_ITEM_PHOTO:
                 if (!mPhotoPresent) {
                     doPickPhotoAction();
@@ -521,9 +535,98 @@ public final class EditContactActivity extends Activity implements View.OnClickL
 
         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(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;
 
-    private void doAddAction() {
-        showDialog(LABEL_PICKER_ALL_TYPES_DIALOG);
+            View dataView = entry.view.findViewById(R.id.data);
+            if (dataView == null) {
+                entry.view.requestFocus();
+            } else {
+                dataView.requestFocus();
+            }
+        }
     }
 
     private void doRevertAction() {
@@ -581,7 +684,7 @@ public final class EditContactActivity extends Activity implements View.OnClickL
     }
     
     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;
@@ -610,9 +713,7 @@ public final class EditContactActivity extends Activity implements View.OnClickL
             ringtoneName = ringtone.getTitle(this);
         }
         
-        // Build actual "Ringtone: Default" string that is assigned to spinner.
-        String text = getString(R.string.ringtone_spinner, ringtoneName);
-        updateDataView(entry, text);
+        updateDataView(entry, ringtoneName);
     }
     
     private void updateDataView(EditEntry entry, String text) {
@@ -623,9 +724,6 @@ public final class EditContactActivity extends Activity implements View.OnClickL
     @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)
@@ -668,230 +766,21 @@ public final class EditContactActivity extends Activity implements View.OnClickL
             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));
@@ -952,7 +841,6 @@ public final class EditContactActivity extends Activity implements View.OnClickL
         }
         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) {
@@ -1030,7 +918,6 @@ public final class EditContactActivity extends Activity implements View.OnClickL
         }
         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);
@@ -1130,13 +1017,7 @@ public final class EditContactActivity extends Activity implements View.OnClickL
             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,
@@ -1154,7 +1035,7 @@ public final class EditContactActivity extends Activity implements View.OnClickL
                 // 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();
         }
@@ -1163,13 +1044,18 @@ public final class EditContactActivity extends Activity implements View.OnClickL
         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));
@@ -1327,6 +1213,10 @@ public final class EditContactActivity extends Activity implements View.OnClickL
         // 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) {
@@ -1464,12 +1354,21 @@ public final class EditContactActivity extends Activity implements View.OnClickL
         // Remove existing views
         final LinearLayout layout = mLayout;
         layout.removeAllViews();
-
-        buildViewsForSection(layout, mPhoneEntries, R.string.listSeparatorCallNumber_edit);
-        buildViewsForSection(layout, mEmailEntries, R.string.listSeparatorSendEmail_edit);
-        buildViewsForSection(layout, mImEntries, R.string.listSeparatorSendIm_edit);
-        buildViewsForSection(layout, mPostalEntries, R.string.listSeparatorMapAddress_edit);
-        buildViewsForSection(layout, mOtherEntries, R.string.listSeparatorOtherInformation_edit);
+        
+        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);
     }
 
 
@@ -1480,25 +1379,74 @@ public final class EditContactActivity extends Activity implements View.OnClickL
      * @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.
      * 
@@ -1519,10 +1467,16 @@ public final class EditContactActivity extends Activity implements View.OnClickL
         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 {
@@ -1591,15 +1545,20 @@ public final class EditContactActivity extends Activity implements View.OnClickL
         // 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);
         }
     }
     
@@ -1962,6 +1921,23 @@ public final class EditContactActivity extends Activity implements View.OnClickL
         }
 
         /**
+         * 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,
@@ -2043,7 +2019,15 @@ public final class EditContactActivity extends Activity implements View.OnClickL
         }
 
         /**
-         * 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
@@ -2065,7 +2049,7 @@ public final class EditContactActivity extends Activity implements View.OnClickL
     }
 
     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;
     }
 
@@ -2076,9 +2060,10 @@ public final class EditContactActivity extends Activity implements View.OnClickL
     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);
     }
 }
index 1a06026..c80e67b 100644 (file)
@@ -206,7 +206,7 @@ public class TwelveKeyDialer extends Activity implements View.OnClickListener,
         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 @@ public class TwelveKeyDialer extends Activity implements View.OnClickListener,
         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);