--- /dev/null
+<?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>
--- /dev/null
+<?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>
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>
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"
/>
<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>
<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>
-->
<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>
<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>
--- /dev/null
+<?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
--- /dev/null
+<?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"
+ />
<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>
--- /dev/null
+<?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>
<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>
<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>
+++ /dev/null
-<?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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
--- /dev/null
+<?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>
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;
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;
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;
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;
/** 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 */
private EditText mNameView;
private ImageView mPhotoImageView;
- private CheckBox mSendToVoicemailCheckBox;
private LinearLayout mLayout;
private LayoutInflater mInflater;
private MenuItem mPhotoMenuItem;
/* 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();
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
entry.view.setVisibility(View.GONE);
entry.isDeleted = true;
}
+
+ // Force rebuild of views because section headers might need to change
+ buildViews();
break;
}
}
break;
}
-
- case R.id.data: {
- EditEntry entry = findEntryForView(v);
- if (isRingtoneEntry(entry)) {
- doPickRingtone(entry);
- }
- break;
- }
}
}
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);
mSections.add(mEmailEntries);
mSections.add(mImEntries);
mSections.add(mPostalEntries);
+ mSections.add(mOrgEntries);
+ mSections.add(mNoteEntries);
mSections.add(mOtherEntries);
}
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);
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);
}
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();
setPhotoPresent(false);
}
mPhotoChanged = inState.getBoolean("photoChanged");
- mSendToVoicemailCheckBox.setChecked(inState.getBoolean("sendToVoicemail"));
mPhoneticNameView.setText(inState.getString("phoneticName"));
mContactChanged = inState.getBoolean("contactChanged");
.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);
showDialog(DELETE_CONFIRMATION_DIALOG);
return true;
- case MENU_ITEM_ADD:
- doAddAction();
- return true;
-
case MENU_ITEM_PHOTO:
if (!mPhotoPresent) {
doPickPhotoAction();
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() {
}
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;
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) {
@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)
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));
}
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) {
}
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);
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,
// 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();
}
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));
// 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) {
// 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);
}
* @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.
*
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 {
// 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);
}
}
}
/**
+ * 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,
}
/**
- * 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
}
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;
}
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);
}
}
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);
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);