summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrint E. Kriebel <bekit@cyngn.com>2014-10-01 00:03:12 -0700
committerBrint E. Kriebel <bekit@cyngn.com>2014-10-01 00:03:12 -0700
commitd5144a46d45015706a5a63fa17b407ac3d57229d (patch)
treea713d50dd3573b33d00cfd079f9da97d319a32a8
parentbf303f609f59f94ab578c51124a2a80bc9c31a25 (diff)
parent50662c405c2dd6878da02bc2c281d5bfe4241ff9 (diff)
downloadandroid_packages_apps_Dialer-d5144a46d45015706a5a63fa17b407ac3d57229d.tar.gz
android_packages_apps_Dialer-d5144a46d45015706a5a63fa17b407ac3d57229d.tar.bz2
android_packages_apps_Dialer-d5144a46d45015706a5a63fa17b407ac3d57229d.zip
Merge branch 'cm-11.0' into stable/cm-11.0
-rwxr-xr-x[-rw-r--r--]AndroidManifest.xml9
-rw-r--r--res/drawable-hdpi/ic_cancel_lt.pngbin0 -> 468 bytes
-rw-r--r--res/drawable-hdpi/ic_ims_incoming_holo_dark.pngbin0 -> 1384 bytes
-rw-r--r--res/drawable-hdpi/ic_ims_missed_holo_dark.pngbin0 -> 1365 bytes
-rw-r--r--res/drawable-hdpi/ic_ims_outgoing_holo_dark.pngbin0 -> 1378 bytes
-rw-r--r--res/drawable-hdpi/ic_search_lt.pngbin0 -> 915 bytes
-rw-r--r--res/drawable-hdpi/ic_video_incoming_holo_dark.pngbin0 -> 547 bytes
-rw-r--r--res/drawable-hdpi/ic_video_missed_holo_dark.pngbin0 -> 597 bytes
-rw-r--r--res/drawable-hdpi/ic_video_outgoing_holo_dark.pngbin0 -> 562 bytes
-rw-r--r--res/drawable-hdpi/textfield_search_lt.9.pngbin0 -> 200 bytes
-rw-r--r--res/drawable-mdpi/ic_contact_quick_contact_call_video_holo_dark.pngbin0 -> 519 bytes
-rw-r--r--res/drawable-mdpi/ic_ims_incoming_holo_dark.pngbin0 -> 1231 bytes
-rw-r--r--res/drawable-mdpi/ic_ims_missed_holo_dark.pngbin0 -> 1236 bytes
-rw-r--r--res/drawable-mdpi/ic_ims_outgoing_holo_dark.pngbin0 -> 1229 bytes
-rw-r--r--res/drawable-mdpi/ic_video_incoming_holo_dark.pngbin0 -> 356 bytes
-rw-r--r--res/drawable-mdpi/ic_video_missed_holo_dark.pngbin0 -> 367 bytes
-rw-r--r--res/drawable-mdpi/ic_video_outgoing_holo_dark.pngbin0 -> 358 bytes
-rw-r--r--res/drawable-xhdpi/ic_cancel_lt.pngbin0 -> 611 bytes
-rw-r--r--res/drawable-xhdpi/ic_ims_incoming_holo_dark.pngbin0 -> 1392 bytes
-rw-r--r--res/drawable-xhdpi/ic_ims_missed_holo_dark.pngbin0 -> 1465 bytes
-rw-r--r--res/drawable-xhdpi/ic_ims_outgoing_holo_dark.pngbin0 -> 1402 bytes
-rw-r--r--res/drawable-xhdpi/ic_search_lt.pngbin0 -> 1019 bytes
-rw-r--r--res/drawable-xhdpi/textfield_search_lt.9.pngbin0 -> 219 bytes
-rw-r--r--res/drawable-xxhdpi/ic_cancel_lt.pngbin0 -> 719 bytes
-rw-r--r--res/drawable-xxhdpi/ic_search_lt.pngbin0 -> 1619 bytes
-rw-r--r--res/drawable-xxhdpi/textfield_search_lt.9.pngbin0 -> 237 bytes
-rw-r--r--res/layout-land/call_detail.xml165
-rw-r--r--res/layout-land/call_detail_history_header.xml61
-rw-r--r--res/layout-land/call_stats_detail.xml147
-rw-r--r--res/layout/call_detail.xml167
-rw-r--r--res/layout/call_detail_history_header.xml4
-rw-r--r--res/layout/call_detail_history_item.xml29
-rw-r--r--res/layout/call_detail_pinned_header.xml223
-rwxr-xr-x[-rw-r--r--]res/layout/call_log_activity.xml1
-rwxr-xr-x[-rw-r--r--]res/layout/call_log_fragment.xml2
-rw-r--r--res/layout/call_log_list_item.xml21
-rw-r--r--res/layout/call_log_spinner_item.xml37
-rw-r--r--res/layout/call_stats_detail.xml148
-rw-r--r--res/layout/call_stats_fragment.xml1
-rwxr-xr-xres/layout/custom_action_bar.xml50
-rw-r--r--res/layout/msim_call_log_activity.xml38
-rw-r--r--res/layout/msim_call_log_fragment.xml89
-rwxr-xr-xres/layout/speed_dial_item.xml63
-rw-r--r--res/menu/call_details_options.xml5
-rw-r--r--res/menu/call_log_context_menu_options.xml58
-rwxr-xr-x[-rw-r--r--]res/menu/call_log_options.xml7
-rw-r--r--res/menu/dialpad_options.xml25
-rw-r--r--res/values-af/cm_caf.xml20
-rw-r--r--res/values-af/cm_strings.xml22
-rw-r--r--res/values-ar/cm_caf.xml20
-rw-r--r--res/values-ar/cm_strings.xml3
-rw-r--r--res/values-ca/cm_caf.xml20
-rw-r--r--res/values-ca/cm_strings.xml22
-rw-r--r--res/values-cs/cm_caf.xml20
-rw-r--r--res/values-cs/cm_strings.xml22
-rw-r--r--res/values-da/cm_caf.xml20
-rw-r--r--res/values-da/cm_strings.xml22
-rw-r--r--res/values-de/cm_caf.xml20
-rw-r--r--res/values-de/cm_strings.xml13
-rw-r--r--res/values-el/cm_caf.xml20
-rw-r--r--res/values-el/cm_strings.xml22
-rw-r--r--res/values-en-rGR/cm_strings.xml26
-rw-r--r--res/values-en-rIL/cm_strings.xml26
-rw-r--r--res/values-en-rRU/cm_strings.xml26
-rw-r--r--res/values-es-rXA/cm_caf.xml20
-rw-r--r--res/values-es-rXA/cm_strings.xml22
-rw-r--r--res/values-es/cm_caf.xml20
-rw-r--r--res/values-es/cm_strings.xml22
-rw-r--r--res/values-et/cm_caf.xml20
-rw-r--r--res/values-eu/cm_caf.xml20
-rw-r--r--res/values-eu/cm_strings.xml3
-rw-r--r--res/values-fi/cm_caf.xml20
-rw-r--r--res/values-fi/cm_strings.xml22
-rw-r--r--res/values-fr/cm_caf.xml20
-rw-r--r--res/values-fr/cm_strings.xml6
-rw-r--r--res/values-hr/cm_caf.xml20
-rw-r--r--res/values-hr/cm_strings.xml3
-rw-r--r--res/values-hu/cm_caf.xml20
-rw-r--r--res/values-hu/cm_strings.xml22
-rw-r--r--res/values-in/cm_caf.xml20
-rw-r--r--res/values-in/cm_strings.xml22
-rw-r--r--res/values-it/cm_caf.xml20
-rw-r--r--res/values-it/cm_strings.xml22
-rw-r--r--res/values-iw/cm_caf.xml20
-rw-r--r--res/values-iw/cm_strings.xml3
-rw-r--r--res/values-ja/cm_caf.xml20
-rw-r--r--res/values-ja/cm_strings.xml22
-rw-r--r--res/values-ko/cm_caf.xml20
-rw-r--r--res/values-ko/cm_strings.xml22
-rw-r--r--res/values-ku/cm_caf.xml20
-rw-r--r--res/values-ku/cm_strings.xml3
-rw-r--r--res/values-ku/strings.xml8
-rw-r--r--res/values-land/dimens.xml19
-rw-r--r--res/values-land/styles.xml5
-rw-r--r--res/values-lb/cm_arrays.xml8
-rw-r--r--res/values-lb/strings.xml4
-rw-r--r--res/values-lt/cm_caf.xml20
-rw-r--r--res/values-lt/cm_strings.xml22
-rw-r--r--res/values-nb/cm_caf.xml20
-rw-r--r--res/values-nb/cm_strings.xml22
-rw-r--r--res/values-nl/cm_caf.xml20
-rw-r--r--res/values-nl/cm_strings.xml22
-rw-r--r--res/values-pl/cm_caf.xml20
-rw-r--r--res/values-pl/cm_strings.xml22
-rw-r--r--res/values-pt-rBR/cm_caf.xml20
-rw-r--r--res/values-pt-rBR/cm_strings.xml22
-rw-r--r--res/values-pt-rPT/cm_caf.xml20
-rw-r--r--res/values-pt-rPT/cm_strings.xml22
-rw-r--r--res/values-ro/cm_caf.xml20
-rw-r--r--res/values-ro/cm_strings.xml3
-rw-r--r--res/values-ru/cm_arrays.xml8
-rw-r--r--res/values-ru/cm_caf.xml20
-rw-r--r--res/values-ru/cm_plurals.xml6
-rw-r--r--res/values-ru/cm_strings.xml24
-rw-r--r--res/values-si/cm_caf.xml20
-rw-r--r--res/values-si/cm_strings.xml22
-rw-r--r--res/values-sk/cm_caf.xml20
-rw-r--r--res/values-sk/cm_strings.xml22
-rw-r--r--res/values-sr/cm_caf.xml20
-rw-r--r--res/values-sr/cm_strings.xml24
-rw-r--r--res/values-sv/cm_caf.xml20
-rw-r--r--res/values-sv/cm_strings.xml3
-rw-r--r--res/values-th/cm_caf.xml20
-rw-r--r--res/values-th/cm_strings.xml22
-rw-r--r--res/values-tr/cm_caf.xml20
-rw-r--r--res/values-tr/cm_strings.xml22
-rw-r--r--res/values-uk/cm_caf.xml20
-rw-r--r--res/values-uk/cm_strings.xml3
-rw-r--r--res/values-zh-rCN/cm_caf.xml20
-rw-r--r--res/values-zh-rCN/cm_strings.xml22
-rwxr-xr-x[-rw-r--r--]res/values-zh-rCN/strings.xml2
-rw-r--r--res/values-zh-rHK/cm_caf.xml20
-rw-r--r--res/values-zh-rHK/cm_strings.xml5
-rw-r--r--res/values-zh-rTW/cm_caf.xml20
-rw-r--r--res/values-zh-rTW/cm_strings.xml2
-rw-r--r--res/values-zh-rTW/strings.xml2
-rw-r--r--res/values/cm_strings.xml33
-rw-r--r--res/values/config.xml1
-rw-r--r--res/values/dimens.xml8
-rw-r--r--res/values/strings.xml2
-rw-r--r--res/values/styles.xml24
-rwxr-xr-x[-rw-r--r--]src/com/android/dialer/CallDetailActivity.java20
-rw-r--r--src/com/android/dialer/CallDetailHeader.java102
-rw-r--r--src/com/android/dialer/DialtactsActivity.java118
-rwxr-xr-x[-rw-r--r--]src/com/android/dialer/PhoneCallDetails.java12
-rwxr-xr-x[-rw-r--r--]src/com/android/dialer/PhoneCallDetailsHelper.java43
-rw-r--r--src/com/android/dialer/PhoneCallDetailsViews.java12
-rwxr-xr-x[-rw-r--r--]src/com/android/dialer/SpecialCharSequenceMgr.java48
-rwxr-xr-xsrc/com/android/dialer/SpeedDialListActivity.java335
-rwxr-xr-xsrc/com/android/dialer/SpeedDialUtils.java63
-rwxr-xr-x[-rw-r--r--]src/com/android/dialer/calllog/CallDetailHistoryAdapter.java37
-rwxr-xr-x[-rw-r--r--]src/com/android/dialer/calllog/CallLogActivity.java385
-rwxr-xr-x[-rw-r--r--]src/com/android/dialer/calllog/CallLogAdapter.java68
-rw-r--r--src/com/android/dialer/calllog/CallLogFragment.java212
-rwxr-xr-x[-rw-r--r--]src/com/android/dialer/calllog/CallLogListItemHelper.java10
-rw-r--r--src/com/android/dialer/calllog/CallLogListItemViews.java7
-rw-r--r--src/com/android/dialer/calllog/CallLogNotificationsHelper.java15
-rwxr-xr-x[-rw-r--r--]src/com/android/dialer/calllog/CallLogQuery.java4
-rwxr-xr-x[-rw-r--r--]src/com/android/dialer/calllog/CallLogQueryHandler.java72
-rwxr-xr-xsrc/com/android/dialer/calllog/CallLogSearchFragment.java87
-rw-r--r--src/com/android/dialer/calllog/CallTypeHelper.java38
-rw-r--r--src/com/android/dialer/calllog/CallTypeIconsView.java52
-rw-r--r--src/com/android/dialer/calllog/IntentProvider.java31
-rwxr-xr-xsrc/com/android/dialer/calllog/MSimCallLogFragment.java305
-rw-r--r--src/com/android/dialer/callstats/CallStatsDetailActivity.java15
-rw-r--r--src/com/android/dialer/callstats/CallStatsFragment.java26
-rw-r--r--src/com/android/dialer/dialpad/DialpadFragment.java260
-rw-r--r--src/com/android/dialer/list/AllContactsActivity.java15
-rw-r--r--src/com/android/dialer/list/SearchFragment.java9
-rw-r--r--src/com/android/dialer/lookup/dastelefonbuch/TelefonbuchApi.java55
-rwxr-xr-x[-rw-r--r--]tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java22
-rwxr-xr-x[-rw-r--r--]tests/src/com/android/dialer/calllog/CallLogListItemHelperTest.java61
-rw-r--r--tests/src/com/android/dialer/calllog/CallLogQueryTestUtils.java2
173 files changed, 3629 insertions, 1876 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index e6dd30e95..0be343bec 100644..100755
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -115,6 +115,7 @@
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="tel" />
+ <data android:scheme="sip" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.CALL_BUTTON" />
@@ -290,6 +291,14 @@
</intent-filter>
</receiver>
+ <activity android:name=".SpeedDialListActivity"
+ android:theme="@style/DialtactsTheme"
+ android:label="@string/speed_dial_settings" >
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN"/>
+ </intent-filter>
+ </activity>
+
<receiver android:name=".interactions.UndemoteOutgoingCallReceiver">
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
diff --git a/res/drawable-hdpi/ic_cancel_lt.png b/res/drawable-hdpi/ic_cancel_lt.png
new file mode 100644
index 000000000..8f4c446d3
--- /dev/null
+++ b/res/drawable-hdpi/ic_cancel_lt.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_ims_incoming_holo_dark.png b/res/drawable-hdpi/ic_ims_incoming_holo_dark.png
new file mode 100644
index 000000000..4b4c1085a
--- /dev/null
+++ b/res/drawable-hdpi/ic_ims_incoming_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_ims_missed_holo_dark.png b/res/drawable-hdpi/ic_ims_missed_holo_dark.png
new file mode 100644
index 000000000..24ffc7900
--- /dev/null
+++ b/res/drawable-hdpi/ic_ims_missed_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_ims_outgoing_holo_dark.png b/res/drawable-hdpi/ic_ims_outgoing_holo_dark.png
new file mode 100644
index 000000000..b93b0c576
--- /dev/null
+++ b/res/drawable-hdpi/ic_ims_outgoing_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_search_lt.png b/res/drawable-hdpi/ic_search_lt.png
new file mode 100644
index 000000000..bcb5d85da
--- /dev/null
+++ b/res/drawable-hdpi/ic_search_lt.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_video_incoming_holo_dark.png b/res/drawable-hdpi/ic_video_incoming_holo_dark.png
new file mode 100644
index 000000000..b4fd7caa9
--- /dev/null
+++ b/res/drawable-hdpi/ic_video_incoming_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_video_missed_holo_dark.png b/res/drawable-hdpi/ic_video_missed_holo_dark.png
new file mode 100644
index 000000000..7308effca
--- /dev/null
+++ b/res/drawable-hdpi/ic_video_missed_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_video_outgoing_holo_dark.png b/res/drawable-hdpi/ic_video_outgoing_holo_dark.png
new file mode 100644
index 000000000..b6a020825
--- /dev/null
+++ b/res/drawable-hdpi/ic_video_outgoing_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/textfield_search_lt.9.png b/res/drawable-hdpi/textfield_search_lt.9.png
new file mode 100644
index 000000000..550f5ff36
--- /dev/null
+++ b/res/drawable-hdpi/textfield_search_lt.9.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_contact_quick_contact_call_video_holo_dark.png b/res/drawable-mdpi/ic_contact_quick_contact_call_video_holo_dark.png
new file mode 100644
index 000000000..562cdc9e1
--- /dev/null
+++ b/res/drawable-mdpi/ic_contact_quick_contact_call_video_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_ims_incoming_holo_dark.png b/res/drawable-mdpi/ic_ims_incoming_holo_dark.png
new file mode 100644
index 000000000..d58998e4f
--- /dev/null
+++ b/res/drawable-mdpi/ic_ims_incoming_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_ims_missed_holo_dark.png b/res/drawable-mdpi/ic_ims_missed_holo_dark.png
new file mode 100644
index 000000000..5b39c279e
--- /dev/null
+++ b/res/drawable-mdpi/ic_ims_missed_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_ims_outgoing_holo_dark.png b/res/drawable-mdpi/ic_ims_outgoing_holo_dark.png
new file mode 100644
index 000000000..ccf67e9ca
--- /dev/null
+++ b/res/drawable-mdpi/ic_ims_outgoing_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_video_incoming_holo_dark.png b/res/drawable-mdpi/ic_video_incoming_holo_dark.png
new file mode 100644
index 000000000..eb19c1855
--- /dev/null
+++ b/res/drawable-mdpi/ic_video_incoming_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_video_missed_holo_dark.png b/res/drawable-mdpi/ic_video_missed_holo_dark.png
new file mode 100644
index 000000000..3865fce7d
--- /dev/null
+++ b/res/drawable-mdpi/ic_video_missed_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_video_outgoing_holo_dark.png b/res/drawable-mdpi/ic_video_outgoing_holo_dark.png
new file mode 100644
index 000000000..34d91b024
--- /dev/null
+++ b/res/drawable-mdpi/ic_video_outgoing_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_cancel_lt.png b/res/drawable-xhdpi/ic_cancel_lt.png
new file mode 100644
index 000000000..04f05aae8
--- /dev/null
+++ b/res/drawable-xhdpi/ic_cancel_lt.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_ims_incoming_holo_dark.png b/res/drawable-xhdpi/ic_ims_incoming_holo_dark.png
new file mode 100644
index 000000000..afacf6c18
--- /dev/null
+++ b/res/drawable-xhdpi/ic_ims_incoming_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_ims_missed_holo_dark.png b/res/drawable-xhdpi/ic_ims_missed_holo_dark.png
new file mode 100644
index 000000000..c94244518
--- /dev/null
+++ b/res/drawable-xhdpi/ic_ims_missed_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_ims_outgoing_holo_dark.png b/res/drawable-xhdpi/ic_ims_outgoing_holo_dark.png
new file mode 100644
index 000000000..104d9872d
--- /dev/null
+++ b/res/drawable-xhdpi/ic_ims_outgoing_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_search_lt.png b/res/drawable-xhdpi/ic_search_lt.png
new file mode 100644
index 000000000..71800841e
--- /dev/null
+++ b/res/drawable-xhdpi/ic_search_lt.png
Binary files differ
diff --git a/res/drawable-xhdpi/textfield_search_lt.9.png b/res/drawable-xhdpi/textfield_search_lt.9.png
new file mode 100644
index 000000000..d0909888a
--- /dev/null
+++ b/res/drawable-xhdpi/textfield_search_lt.9.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_cancel_lt.png b/res/drawable-xxhdpi/ic_cancel_lt.png
new file mode 100644
index 000000000..9237b5496
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_cancel_lt.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_search_lt.png b/res/drawable-xxhdpi/ic_search_lt.png
new file mode 100644
index 000000000..a4f34d86c
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_search_lt.png
Binary files differ
diff --git a/res/drawable-xxhdpi/textfield_search_lt.9.png b/res/drawable-xxhdpi/textfield_search_lt.9.png
new file mode 100644
index 000000000..8b9af6770
--- /dev/null
+++ b/res/drawable-xxhdpi/textfield_search_lt.9.png
Binary files differ
diff --git a/res/layout-land/call_detail.xml b/res/layout-land/call_detail.xml
index 7024e1c3c..54642aed5 100644
--- a/res/layout-land/call_detail.xml
+++ b/res/layout-land/call_detail.xml
@@ -35,171 +35,8 @@
/>
<!-- All the controls which are part of the pinned header are in this layout. -->
- <RelativeLayout
- android:id="@+id/controls"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_alignParentStart="true"
- android:layout_alignParentTop="true"
- >
- <FrameLayout
- android:id="@+id/voicemail_status"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentStart="true"
- android:layout_alignParentTop="true"
- android:visibility="gone"
- >
- <include layout="@layout/call_log_voicemail_status"/>
- </FrameLayout>
-
- <view
- class="com.android.contacts.common.widget.ProportionalLayout"
- android:id="@+id/contact_background_sizer"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentStart="true"
- android:layout_below="@id/voicemail_status"
- ex:ratio="0.25"
- ex:direction="widthToHeight"
- >
- <ImageView
- android:id="@+id/contact_background"
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:adjustViewBounds="true"
- android:scaleType="centerCrop"
- />
- </view>
-
- <LinearLayout
- android:id="@+id/separator"
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:background="@color/background_dialer_light"
- android:layout_below="@+id/contact_background_sizer"
- />
- <View
- android:id="@+id/photo_text_bar"
- android:layout_width="match_parent"
- android:layout_height="42dip"
- android:background="@color/call_detail_photo_bg"
- android:layout_alignParentStart="true"
- android:layout_alignBottom="@id/contact_background_sizer"
- />
- <ImageView
- android:id="@+id/main_action"
- android:layout_width="wrap_content"
- android:layout_height="0dip"
- android:scaleType="center"
- android:layout_alignEnd="@id/photo_text_bar"
- android:layout_alignBottom="@id/photo_text_bar"
- android:layout_alignTop="@id/photo_text_bar"
- android:layout_marginEnd="@dimen/call_log_outer_margin"
- />
- <TextView
- android:id="@+id/header_text"
- android:layout_width="wrap_content"
- android:layout_height="0dip"
- android:layout_alignStart="@id/photo_text_bar"
- android:layout_toLeftOf="@id/main_action"
- android:layout_alignTop="@id/photo_text_bar"
- android:layout_alignBottom="@id/photo_text_bar"
- android:layout_marginEnd="@dimen/call_log_inner_margin"
- android:layout_marginStart="@dimen/call_detail_contact_name_margin"
- android:gravity="center_vertical"
- android:textColor="?attr/call_log_header_color"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:singleLine="true"
- />
- <ImageButton
- android:id="@+id/main_action_push_layer"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_alignStart="@id/contact_background_sizer"
- android:layout_alignTop="@id/contact_background_sizer"
- android:layout_alignEnd="@id/contact_background_sizer"
- android:layout_alignBottom="@id/contact_background_sizer"
- android:background="?android:attr/selectableItemBackground"
- />
- <LinearLayout
- android:id="@+id/voicemail_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_below="@id/separator"
- android:paddingBottom="@dimen/call_detail_button_spacing">
- <!-- The voicemail fragment will be put here. -->
- </LinearLayout>
- <FrameLayout
- android:id="@+id/call_and_sms"
- android:layout_width="match_parent"
- android:layout_height="@dimen/call_log_list_item_height"
- android:layout_marginBottom="@dimen/call_detail_button_spacing"
- android:layout_below="@id/voicemail_container"
- android:gravity="center_vertical"
- android:background="@color/background_dialer_list_items"
- >
-
- <LinearLayout
- android:id="@+id/call_and_sms_main_action"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="horizontal"
- android:focusable="true"
- android:background="?android:attr/selectableItemBackground"
- >
-
- <LinearLayout
- android:layout_width="0dip"
- android:layout_height="match_parent"
- android:layout_weight="1"
- android:paddingStart="@dimen/call_log_indent_margin"
- android:orientation="vertical"
- android:gravity="center_vertical"
- >
-
- <TextView android:id="@+id/call_and_sms_text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:paddingEnd="@dimen/call_log_icon_margin"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="?attr/call_log_primary_text_color"
- android:singleLine="true"
- android:ellipsize="end"
- />
-
- <TextView android:id="@+id/call_and_sms_label"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:paddingEnd="@dimen/call_log_icon_margin"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="?attr/call_log_primary_text_color"
- android:textAllCaps="true"
- android:singleLine="true"
- android:ellipsize="end"
- />
- </LinearLayout>
-
- <View android:id="@+id/call_and_sms_divider"
- android:layout_width="1px"
- android:layout_height="32dip"
- android:background="@color/background_dialer_light"
- android:layout_gravity="center_vertical"
- />
+ <include layout="@layout/call_detail_pinned_header"/>
- <ImageView android:id="@+id/call_and_sms_icon"
- android:layout_width="@color/call_log_voicemail_highlight_color"
- android:layout_height="match_parent"
- android:paddingStart="@dimen/call_log_inner_margin"
- android:paddingEnd="@dimen/call_log_outer_margin"
- android:gravity="center"
- android:scaleType="centerInside"
- android:focusable="true"
- android:background="?android:attr/selectableItemBackground"
- />
- </LinearLayout>
- </FrameLayout>
- </RelativeLayout>
<!--
Used to hide the UI when playing a voicemail and the proximity sensor
is detecting something near the screen.
diff --git a/res/layout-land/call_detail_history_header.xml b/res/layout-land/call_detail_history_header.xml
deleted file mode 100644
index 58728b9f7..000000000
--- a/res/layout-land/call_detail_history_header.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!-- This layout is supposed to match the content of the controls in call_detail.xml -->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:ex="http://schemas.android.com/apk/res-auto"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
-
- <!-- Contact photo. -->
- <view
- class="com.android.contacts.common.widget.ProportionalLayout"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentStart="true"
- android:layout_below="@id/voicemail_status"
- ex:ratio="0.25"
- ex:direction="widthToHeight"
- >
- <!-- Proportional layout requires a view in it. -->
- <View
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- />
- </view>
- <!-- Separator line -->
- <View
- android:layout_width="match_parent"
- android:layout_height="1dip"
- />
- <!-- Voicemail controls -->
- <!-- TODO: Make the height be based on a constant. -->
- <View
- android:id="@+id/header_voicemail_container"
- android:layout_width="match_parent"
- android:layout_height="140dip"
- android:layout_marginBottom="@dimen/call_detail_button_spacing"
- />
- <!-- Call and SMS -->
- <View
- android:id="@+id/header_call_and_sms_container"
- android:layout_width="match_parent"
- android:layout_height="@dimen/call_log_list_item_height"
- />
-
-</LinearLayout>
diff --git a/res/layout-land/call_stats_detail.xml b/res/layout-land/call_stats_detail.xml
index 24c5d01ae..8c350d8e7 100644
--- a/res/layout-land/call_stats_detail.xml
+++ b/res/layout-land/call_stats_detail.xml
@@ -73,152 +73,7 @@
</LinearLayout>
<!-- The contents of the title block -->
-
- <RelativeLayout
- android:id="@+id/controls"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentStart="true"
- android:layout_alignParentTop="true" >
-
- <com.android.contacts.common.widget.ProportionalLayout
- android:id="@+id/contact_background_sizer"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentStart="true"
- ex:direction="widthToHeight"
- ex:ratio="0.25" >
-
- <ImageView
- android:id="@+id/contact_background"
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:adjustViewBounds="true"
- android:scaleType="centerCrop" />
-
- </com.android.contacts.common.widget.ProportionalLayout>
-
- <LinearLayout
- android:id="@+id/separator"
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:layout_below="@+id/contact_background_sizer"
- android:background="@color/background_dialer_light" />
-
- <View
- android:id="@+id/photo_text_bar"
- android:layout_width="match_parent"
- android:layout_height="42dip"
- android:layout_alignBottom="@id/contact_background_sizer"
- android:layout_alignParentStart="true"
- android:background="@color/call_detail_photo_bg" />
-
- <ImageView
- android:id="@+id/main_action"
- android:layout_width="wrap_content"
- android:layout_height="0dip"
- android:layout_alignBottom="@id/photo_text_bar"
- android:layout_alignEnd="@id/photo_text_bar"
- android:layout_alignTop="@id/photo_text_bar"
- android:layout_marginEnd="@dimen/call_log_outer_margin"
- android:scaleType="center" />
-
- <TextView
- android:id="@+id/header_text"
- android:layout_width="wrap_content"
- android:layout_height="0dip"
- android:layout_alignBottom="@id/photo_text_bar"
- android:layout_alignStart="@id/photo_text_bar"
- android:layout_alignTop="@id/photo_text_bar"
- android:layout_marginStart="@dimen/call_detail_contact_name_margin"
- android:layout_marginEnd="@dimen/call_log_inner_margin"
- android:layout_toStartOf="@id/main_action"
- android:gravity="center_vertical"
- android:singleLine="true"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="?attr/call_log_header_color" />
-
- <ImageButton
- android:id="@+id/main_action_push_layer"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_alignBottom="@id/contact_background_sizer"
- android:layout_alignStart="@id/contact_background_sizer"
- android:layout_alignEnd="@id/contact_background_sizer"
- android:layout_alignTop="@id/contact_background_sizer"
- android:background="?android:attr/selectableItemBackground" />
-
- <FrameLayout
- android:id="@+id/call_and_sms"
- android:layout_width="match_parent"
- android:layout_height="@dimen/call_log_list_item_height"
- android:layout_below="@id/main_action_push_layer"
- android:layout_marginBottom="@dimen/call_detail_button_spacing"
- android:layout_marginTop="@dimen/call_detail_button_spacing"
- android:background="@color/background_dialer_list_items"
- android:gravity="center_vertical" >
-
- <LinearLayout
- android:id="@+id/call_and_sms_main_action"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="?android:attr/selectableItemBackground"
- android:focusable="true"
- android:orientation="horizontal" >
-
- <LinearLayout
- android:layout_width="0dip"
- android:layout_height="match_parent"
- android:layout_weight="1"
- android:gravity="center_vertical"
- android:orientation="vertical"
- android:paddingStart="@dimen/call_log_indent_margin" >
-
- <TextView
- android:id="@+id/call_and_sms_text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:ellipsize="end"
- android:paddingEnd="@dimen/call_log_icon_margin"
- android:singleLine="true"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="?attr/call_log_primary_text_color" />
-
- <TextView
- android:id="@+id/call_and_sms_label"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:ellipsize="end"
- android:paddingEnd="@dimen/call_log_icon_margin"
- android:singleLine="true"
- android:textAllCaps="true"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="?attr/call_log_primary_text_color" />
- </LinearLayout>
-
- <View
- android:id="@+id/call_and_sms_divider"
- android:layout_width="1px"
- android:layout_height="32dip"
- android:layout_gravity="center_vertical"
- android:background="@color/background_dialer_light" />
-
- <ImageView
- android:id="@+id/call_and_sms_icon"
- android:layout_width="@color/call_log_voicemail_highlight_color"
- android:layout_height="match_parent"
- android:background="?android:attr/selectableItemBackground"
- android:focusable="true"
- android:gravity="center"
- android:paddingStart="@dimen/call_log_inner_margin"
- android:paddingEnd="@dimen/call_log_outer_margin"
- android:scaleType="centerInside" />
-
- </LinearLayout>
-
- </FrameLayout>
-
- </RelativeLayout>
+ <include layout="@layout/call_detail_pinned_header" />
</RelativeLayout>
diff --git a/res/layout/call_detail.xml b/res/layout/call_detail.xml
index 5f319bcb8..4b02280b2 100644
--- a/res/layout/call_detail.xml
+++ b/res/layout/call_detail.xml
@@ -15,7 +15,6 @@
-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:ex="http://schemas.android.com/apk/res-auto"
android:id="@+id/call_detail"
android:layout_width="match_parent"
android:layout_height="match_parent"
@@ -34,172 +33,8 @@
android:layout_alignParentTop="true"
/>
- <!-- All the controls which are part of the pinned header are in this layout. -->
- <RelativeLayout
- android:id="@+id/controls"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_alignParentStart="true"
- android:layout_alignParentTop="true"
- >
- <FrameLayout
- android:id="@+id/voicemail_status"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentStart="true"
- android:layout_alignParentTop="true"
- android:visibility="gone"
- >
- <include layout="@layout/call_log_voicemail_status"/>
- </FrameLayout>
-
- <view
- class="com.android.contacts.common.widget.ProportionalLayout"
- android:id="@+id/contact_background_sizer"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentStart="true"
- android:layout_below="@id/voicemail_status"
- ex:ratio="0.5"
- ex:direction="widthToHeight"
- >
- <ImageView
- android:id="@+id/contact_background"
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:adjustViewBounds="true"
- android:scaleType="centerCrop"
- />
- </view>
-
- <LinearLayout
- android:id="@+id/separator"
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:background="@color/background_dialer_light"
- android:layout_below="@+id/contact_background_sizer"
- />
- <View
- android:id="@+id/photo_text_bar"
- android:layout_width="match_parent"
- android:layout_height="42dip"
- android:background="@color/call_detail_photo_bg"
- android:layout_alignParentStart="true"
- android:layout_alignBottom="@id/contact_background_sizer"
- />
- <ImageView
- android:id="@+id/main_action"
- android:layout_width="wrap_content"
- android:layout_height="0dip"
- android:scaleType="center"
- android:layout_alignEnd="@id/photo_text_bar"
- android:layout_alignBottom="@id/photo_text_bar"
- android:layout_alignTop="@id/photo_text_bar"
- android:layout_marginEnd="@dimen/call_log_outer_margin"
- />
- <TextView
- android:id="@+id/header_text"
- android:layout_width="wrap_content"
- android:layout_height="0dip"
- android:layout_alignStart="@id/photo_text_bar"
- android:layout_toLeftOf="@id/main_action"
- android:layout_alignTop="@id/photo_text_bar"
- android:layout_alignBottom="@id/photo_text_bar"
- android:layout_marginEnd="@dimen/call_log_inner_margin"
- android:layout_marginStart="@dimen/call_detail_contact_name_margin"
- android:gravity="center_vertical"
- android:textColor="?attr/call_log_header_color"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:singleLine="true"
- />
- <ImageButton
- android:id="@+id/main_action_push_layer"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_alignStart="@id/contact_background_sizer"
- android:layout_alignTop="@id/contact_background_sizer"
- android:layout_alignEnd="@id/contact_background_sizer"
- android:layout_alignBottom="@id/contact_background_sizer"
- android:background="?android:attr/selectableItemBackground"
- />
- <LinearLayout
- android:id="@+id/voicemail_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_below="@id/separator"
- android:paddingBottom="@dimen/call_detail_button_spacing">
- <!-- The voicemail fragment will be put here. -->
- </LinearLayout>
- <FrameLayout
- android:id="@+id/call_and_sms"
- android:layout_width="match_parent"
- android:layout_height="@dimen/call_log_list_item_height"
- android:layout_marginBottom="@dimen/call_detail_button_spacing"
- android:layout_below="@id/voicemail_container"
- android:gravity="center_vertical"
- android:background="@color/background_dialer_list_items"
- >
-
- <LinearLayout
- android:id="@+id/call_and_sms_main_action"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="horizontal"
- android:focusable="true"
- android:background="?android:attr/selectableItemBackground"
- >
-
- <LinearLayout
- android:layout_width="0dip"
- android:layout_height="match_parent"
- android:layout_weight="1"
- android:paddingStart="@dimen/call_log_indent_margin"
- android:orientation="vertical"
- android:gravity="center_vertical"
- >
-
- <TextView android:id="@+id/call_and_sms_text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:paddingEnd="@dimen/call_log_icon_margin"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="?attr/call_log_primary_text_color"
- android:singleLine="true"
- android:ellipsize="end"
- />
-
- <TextView android:id="@+id/call_and_sms_label"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:paddingEnd="@dimen/call_log_icon_margin"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="?attr/call_log_primary_text_color"
- android:textAllCaps="true"
- android:singleLine="true"
- android:ellipsize="end"
- />
- </LinearLayout>
-
- <View android:id="@+id/call_and_sms_divider"
- android:layout_width="1px"
- android:layout_height="32dip"
- android:background="@color/background_dialer_light"
- android:layout_gravity="center_vertical"
- />
+ <include layout="@layout/call_detail_pinned_header"/>
- <ImageView android:id="@+id/call_and_sms_icon"
- android:layout_width="@color/call_log_voicemail_highlight_color"
- android:layout_height="match_parent"
- android:paddingStart="@dimen/call_log_inner_margin"
- android:paddingEnd="@dimen/call_log_outer_margin"
- android:gravity="center"
- android:scaleType="centerInside"
- android:focusable="true"
- android:background="?android:attr/selectableItemBackground"
- />
- </LinearLayout>
- </FrameLayout>
- </RelativeLayout>
<!--
Used to hide the UI when playing a voicemail and the proximity sensor
is detecting something near the screen.
diff --git a/res/layout/call_detail_history_header.xml b/res/layout/call_detail_history_header.xml
index 40f943b1e..7cdfaaa5e 100644
--- a/res/layout/call_detail_history_header.xml
+++ b/res/layout/call_detail_history_header.xml
@@ -27,9 +27,7 @@
class="com.android.contacts.common.widget.ProportionalLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_alignParentStart="true"
- android:layout_below="@id/voicemail_status"
- ex:ratio="0.5"
+ ex:ratio="@dimen/call_detail_header_photo_ratio"
ex:direction="widthToHeight"
>
<!-- Proportional layout requires a view in it. -->
diff --git a/res/layout/call_detail_history_item.xml b/res/layout/call_detail_history_item.xml
index a5acf5258..473e1410c 100644
--- a/res/layout/call_detail_history_item.xml
+++ b/res/layout/call_detail_history_item.xml
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2011 The Android Open Source Project
+ Copyright (C) 2013, The Linux Foundation. All rights reserved.
+
+ Not a Contribution.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -47,13 +50,29 @@
android:textColor="?attr/call_log_secondary_text_color"
/>
</LinearLayout>
- <TextView
- android:id="@+id/date"
+
+ <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="?attr/call_log_secondary_text_color"
- />
+ android:orientation="horizontal"
+ >
+ <ImageView
+ android:id="@+id/sub_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginRight="@dimen/call_log_icon_margin"
+ android:layout_marginBottom="@dimen/call_detail_button_spacing"
+ android:layout_gravity="bottom"
+ />
+ <TextView
+ android:id="@+id/date"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textColor="?attr/call_log_secondary_text_color"
+ />
+ </LinearLayout>
+
<TextView
android:id="@+id/duration"
android:layout_width="wrap_content"
diff --git a/res/layout/call_detail_pinned_header.xml b/res/layout/call_detail_pinned_header.xml
new file mode 100644
index 000000000..6ef9e585f
--- /dev/null
+++ b/res/layout/call_detail_pinned_header.xml
@@ -0,0 +1,223 @@
+<?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.
+-->
+
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:ex="http://schemas.android.com/apk/res-auto"
+ android:id="@+id/controls"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_alignParentStart="true"
+ android:layout_alignParentTop="true"
+ >
+ <FrameLayout
+ android:id="@+id/voicemail_status"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_alignParentStart="true"
+ android:layout_alignParentTop="true"
+ android:visibility="gone"
+ >
+ <include layout="@layout/call_log_voicemail_status"/>
+ </FrameLayout>
+
+ <view
+ class="com.android.contacts.common.widget.ProportionalLayout"
+ android:id="@+id/contact_background_sizer"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_alignParentStart="true"
+ android:layout_below="@id/voicemail_status"
+ ex:ratio="@dimen/call_detail_header_photo_ratio"
+ ex:direction="widthToHeight"
+ >
+ <ImageView
+ android:id="@+id/contact_background"
+ android:layout_width="match_parent"
+ android:layout_height="0dip"
+ android:adjustViewBounds="true"
+ android:scaleType="centerCrop"
+ />
+ </view>
+
+ <LinearLayout
+ android:id="@+id/separator"
+ android:layout_width="match_parent"
+ android:layout_height="1dip"
+ android:background="@color/background_dialer_light"
+ android:layout_below="@+id/contact_background_sizer"
+ />
+ <View
+ android:id="@+id/photo_text_bar"
+ android:layout_width="match_parent"
+ android:layout_height="42dip"
+ android:background="@color/call_detail_photo_bg"
+ android:layout_alignParentStart="true"
+ android:layout_alignBottom="@id/contact_background_sizer"
+ />
+ <ImageView
+ android:id="@+id/main_action"
+ android:layout_width="wrap_content"
+ android:layout_height="0dip"
+ android:scaleType="center"
+ android:layout_alignEnd="@id/photo_text_bar"
+ android:layout_alignBottom="@id/photo_text_bar"
+ android:layout_alignTop="@id/photo_text_bar"
+ android:layout_marginEnd="@dimen/call_log_outer_margin"
+ />
+ <TextView
+ android:id="@+id/header_text"
+ android:layout_width="wrap_content"
+ android:layout_height="0dip"
+ android:layout_alignStart="@id/photo_text_bar"
+ android:layout_toLeftOf="@id/main_action"
+ android:layout_alignTop="@id/photo_text_bar"
+ android:layout_alignBottom="@id/photo_text_bar"
+ android:layout_marginEnd="@dimen/call_log_inner_margin"
+ android:layout_marginStart="@dimen/call_detail_contact_name_margin"
+ android:gravity="center_vertical"
+ android:textColor="?attr/call_log_header_color"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:singleLine="true"
+ />
+ <ImageButton
+ android:id="@+id/main_action_push_layer"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_alignStart="@id/contact_background_sizer"
+ android:layout_alignTop="@id/contact_background_sizer"
+ android:layout_alignEnd="@id/contact_background_sizer"
+ android:layout_alignBottom="@id/contact_background_sizer"
+ android:background="?android:attr/selectableItemBackground"
+ />
+ <LinearLayout
+ android:id="@+id/voicemail_container"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_below="@id/separator"
+ android:paddingBottom="@dimen/call_detail_button_spacing">
+ <!-- The voicemail fragment will be put here. -->
+ </LinearLayout>
+ <FrameLayout
+ android:id="@+id/call_and_sms"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/call_log_list_item_height"
+ android:layout_marginBottom="@dimen/call_detail_button_spacing"
+ android:layout_below="@id/voicemail_container"
+ android:gravity="center_vertical"
+ android:background="@color/background_dialer_list_items"
+ >
+
+ <LinearLayout
+ android:id="@+id/call_and_sms_main_action"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="horizontal"
+ android:focusable="true"
+ android:background="?android:attr/selectableItemBackground"
+ >
+
+ <LinearLayout
+ android:layout_width="0dip"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:paddingStart="@dimen/call_log_indent_margin"
+ android:orientation="vertical"
+ android:gravity="center_vertical"
+ >
+
+ <TextView android:id="@+id/call_and_sms_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingEnd="@dimen/call_log_icon_margin"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textColor="?attr/call_log_primary_text_color"
+ android:singleLine="true"
+ android:ellipsize="end"
+ />
+
+ <TextView android:id="@+id/call_and_sms_label"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingEnd="@dimen/call_log_icon_margin"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ android:textColor="?attr/call_log_primary_text_color"
+ android:textAllCaps="true"
+ android:singleLine="true"
+ android:ellipsize="end"
+ />
+ </LinearLayout>
+
+ <View android:id="@+id/call_and_sms_divider"
+ android:layout_width="1px"
+ android:layout_height="32dip"
+ android:background="@color/background_dialer_light"
+ android:layout_gravity="center_vertical"
+ />
+
+ <ImageView android:id="@+id/call_and_sms_icon"
+ android:layout_width="@color/call_log_voicemail_highlight_color"
+ android:layout_height="match_parent"
+ android:paddingStart="@dimen/call_log_inner_margin"
+ android:paddingEnd="@dimen/call_log_outer_margin"
+ android:gravity="center"
+ android:scaleType="centerInside"
+ android:focusable="true"
+ android:background="?android:attr/selectableItemBackground"
+ />
+
+ <View android:id="@+id/videocall_and_sms_divider"
+ android:layout_width="1px"
+ android:layout_height="32dip"
+ android:background="@drawable/ic_divider_dashed_holo_dark"
+ android:layout_gravity="center_vertical"
+ android:visibility="gone"
+ />
+
+ <ImageView android:id="@+id/videocall"
+ android:layout_width="@color/call_log_voicemail_highlight_color"
+ android:layout_height="match_parent"
+ android:paddingLeft="@dimen/call_log_inner_margin"
+ android:paddingRight="@dimen/call_log_outer_margin"
+ android:gravity="center"
+ android:scaleType="centerInside"
+ android:visibility="gone"
+ android:focusable="true"
+ android:background="?android:attr/selectableItemBackground"
+ />
+
+ <View android:id="@+id/videocall_and_sms_divider"
+ android:layout_width="1px"
+ android:layout_height="32dip"
+ android:background="@drawable/ic_divider_dashed_holo_dark"
+ android:layout_gravity="center_vertical"
+ android:visibility="gone"
+ />
+
+ <ImageView android:id="@+id/videocall"
+ android:layout_width="@color/call_log_voicemail_highlight_color"
+ android:layout_height="match_parent"
+ android:paddingLeft="@dimen/call_log_inner_margin"
+ android:paddingRight="@dimen/call_log_outer_margin"
+ android:gravity="center"
+ android:scaleType="centerInside"
+ android:visibility="gone"
+ android:focusable="true"
+ android:background="?android:attr/selectableItemBackground"
+ />
+ </LinearLayout>
+ </FrameLayout>
+</RelativeLayout>
+
diff --git a/res/layout/call_log_activity.xml b/res/layout/call_log_activity.xml
index f9806e802..40c8b83d2 100644..100755
--- a/res/layout/call_log_activity.xml
+++ b/res/layout/call_log_activity.xml
@@ -17,7 +17,6 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_marginTop="?android:attr/actionBarSize"
android:id="@+id/calllog_frame">
<android.support.v4.view.ViewPager
android:id="@+id/call_log_pager"
diff --git a/res/layout/call_log_fragment.xml b/res/layout/call_log_fragment.xml
index d6c330b19..6273694dc 100644..100755
--- a/res/layout/call_log_fragment.xml
+++ b/res/layout/call_log_fragment.xml
@@ -18,10 +18,10 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ style="@style/CallLogFragment"
android:orientation="vertical"
android:divider="?android:attr/dividerHorizontal"
android:showDividers="end">
-
<FrameLayout
android:id="@+id/voicemail_status"
android:layout_width="match_parent"
diff --git a/res/layout/call_log_list_item.xml b/res/layout/call_log_list_item.xml
index e17dc279b..875a3aa1b 100644
--- a/res/layout/call_log_list_item.xml
+++ b/res/layout/call_log_list_item.xml
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2007 The Android Open Source Project
+ Copyright (C) 2013, The Linux Foundation. All rights reserved.
+
+ Not a Contribution.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -88,6 +91,15 @@
android:layout_height="wrap_content"
android:orientation="horizontal"
>
+ <ImageView
+ android:id="@+id/sub_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginRight="@dimen/call_log_icon_margin"
+ android:layout_marginBottom="@dimen/call_detail_button_spacing"
+ android:layout_gravity="bottom"
+ android:visibility="gone"
+ />
<TextView
android:id="@+id/label"
android:layout_width="wrap_content"
@@ -153,6 +165,15 @@
android:background="?android:attr/selectableItemBackground"
android:nextFocusLeft="@id/primary_action_view"
/>
+ <ImageButton
+ android:id="@+id/call_action_sub_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="23dip"
+ android:layout_marginRight="8dip"
+ android:layout_alignParentRight="true"
+ android:visibility="gone"
+ />
</LinearLayout>
</LinearLayout>
<TextView
diff --git a/res/layout/call_log_spinner_item.xml b/res/layout/call_log_spinner_item.xml
new file mode 100644
index 000000000..d853c5c35
--- /dev/null
+++ b/res/layout/call_log_spinner_item.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright (c) 2013, The Linux Foundation. All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation, Inc. nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@android:id/text1"
+ style="@style/CallLogSpinnerStyle"
+ android:layout_width="match_parent"
+ android:layout_height="40dip"
+ android:paddingLeft="8dip"
+ android:paddingRight="8dip"
+ android:singleLine="true"
+ android:ellipsize="marquee" />
diff --git a/res/layout/call_stats_detail.xml b/res/layout/call_stats_detail.xml
index eb3b7738f..86ead26d7 100644
--- a/res/layout/call_stats_detail.xml
+++ b/res/layout/call_stats_detail.xml
@@ -72,153 +72,7 @@
<include layout="@layout/call_stats_detail_info" />
</LinearLayout>
- <!-- The contents of the title block -->
-
- <RelativeLayout
- android:id="@+id/controls"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentStart="true"
- android:layout_alignParentTop="true" >
-
- <com.android.contacts.common.widget.ProportionalLayout
- android:id="@+id/contact_background_sizer"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentStart="true"
- ex:direction="widthToHeight"
- ex:ratio="0.5" >
-
- <ImageView
- android:id="@+id/contact_background"
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:adjustViewBounds="true"
- android:scaleType="centerCrop" />
-
- </com.android.contacts.common.widget.ProportionalLayout>
-
- <LinearLayout
- android:id="@+id/separator"
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:layout_below="@+id/contact_background_sizer"
- android:background="@color/background_dialer_light" />
-
- <View
- android:id="@+id/photo_text_bar"
- android:layout_width="match_parent"
- android:layout_height="42dip"
- android:layout_alignBottom="@id/contact_background_sizer"
- android:layout_alignParentStart="true"
- android:background="@color/call_detail_photo_bg" />
-
- <ImageView
- android:id="@+id/main_action"
- android:layout_width="wrap_content"
- android:layout_height="0dip"
- android:layout_alignBottom="@id/photo_text_bar"
- android:layout_alignEnd="@id/photo_text_bar"
- android:layout_alignTop="@id/photo_text_bar"
- android:layout_marginEnd="@dimen/call_log_outer_margin"
- android:scaleType="center" />
-
- <TextView
- android:id="@+id/header_text"
- android:layout_width="wrap_content"
- android:layout_height="0dip"
- android:layout_alignBottom="@id/photo_text_bar"
- android:layout_alignStart="@id/photo_text_bar"
- android:layout_alignTop="@id/photo_text_bar"
- android:layout_marginStart="@dimen/call_detail_contact_name_margin"
- android:layout_marginEnd="@dimen/call_log_inner_margin"
- android:layout_toStartOf="@id/main_action"
- android:gravity="center_vertical"
- android:singleLine="true"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="?attr/call_log_header_color" />
-
- <ImageButton
- android:id="@+id/main_action_push_layer"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_alignBottom="@id/contact_background_sizer"
- android:layout_alignStart="@id/contact_background_sizer"
- android:layout_alignEnd="@id/contact_background_sizer"
- android:layout_alignTop="@id/contact_background_sizer"
- android:background="?android:attr/selectableItemBackground" />
-
- <FrameLayout
- android:id="@+id/call_and_sms"
- android:layout_width="match_parent"
- android:layout_height="@dimen/call_log_list_item_height"
- android:layout_below="@id/main_action_push_layer"
- android:layout_marginBottom="@dimen/call_detail_button_spacing"
- android:layout_marginTop="@dimen/call_detail_button_spacing"
- android:background="@color/background_dialer_list_items"
- android:gravity="center_vertical" >
-
- <LinearLayout
- android:id="@+id/call_and_sms_main_action"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="?android:attr/selectableItemBackground"
- android:focusable="true"
- android:orientation="horizontal" >
-
- <LinearLayout
- android:layout_width="0dip"
- android:layout_height="match_parent"
- android:layout_weight="1"
- android:gravity="center_vertical"
- android:orientation="vertical"
- android:paddingStart="@dimen/call_log_indent_margin" >
-
- <TextView
- android:id="@+id/call_and_sms_text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:ellipsize="end"
- android:paddingEnd="@dimen/call_log_icon_margin"
- android:singleLine="true"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="?attr/call_log_primary_text_color" />
-
- <TextView
- android:id="@+id/call_and_sms_label"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:ellipsize="end"
- android:paddingEnd="@dimen/call_log_icon_margin"
- android:singleLine="true"
- android:textAllCaps="true"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="?attr/call_log_primary_text_color" />
- </LinearLayout>
-
- <View
- android:id="@+id/call_and_sms_divider"
- android:layout_width="1px"
- android:layout_height="32dip"
- android:layout_gravity="center_vertical"
- android:background="@color/background_dialer_light" />
-
- <ImageView
- android:id="@+id/call_and_sms_icon"
- android:layout_width="@color/call_log_voicemail_highlight_color"
- android:layout_height="match_parent"
- android:background="?android:attr/selectableItemBackground"
- android:focusable="true"
- android:gravity="center"
- android:paddingStart="@dimen/call_log_inner_margin"
- android:paddingEnd="@dimen/call_log_outer_margin"
- android:scaleType="centerInside" />
-
- </LinearLayout>
-
- </FrameLayout>
-
- </RelativeLayout>
+ <include layout="@layout/call_detail_pinned_header" />
</RelativeLayout>
diff --git a/res/layout/call_stats_fragment.xml b/res/layout/call_stats_fragment.xml
index c8dba8915..c625d4d1a 100644
--- a/res/layout/call_stats_fragment.xml
+++ b/res/layout/call_stats_fragment.xml
@@ -19,6 +19,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ style="@style/CallLogFragment"
android:divider="?android:attr/dividerHorizontal"
android:orientation="vertical"
android:showDividers="end" >
diff --git a/res/layout/custom_action_bar.xml b/res/layout/custom_action_bar.xml
new file mode 100755
index 000000000..3856f1719
--- /dev/null
+++ b/res/layout/custom_action_bar.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (c) 2014, The Linux Foundation. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ -->
+
+<FrameLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="0dip"
+ android:layout_height="0dip" >
+
+ <!-- To prevent the search view from getting the initial focus. -->
+ <View
+ android:focusable="true"
+ android:focusableInTouchMode="true"
+ android:layout_width="1px"
+ android:layout_height="1px" >
+ <requestFocus />
+ </View>
+ <SearchView
+ android:id="@+id/search_view"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:iconifiedByDefault="false"
+ android:inputType="textFilter" />
+</FrameLayout>
diff --git a/res/layout/msim_call_log_activity.xml b/res/layout/msim_call_log_activity.xml
new file mode 100644
index 000000000..54b37d422
--- /dev/null
+++ b/res/layout/msim_call_log_activity.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright (c) 2013, The Linux Foundation. All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation, Inc. nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:id="@+id/calllog_frame">
+ <android.support.v4.view.ViewPager
+ android:id="@+id/call_log_pager"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_marginTop="?android:attr/actionBarSize" />
+</FrameLayout>
diff --git a/res/layout/msim_call_log_fragment.xml b/res/layout/msim_call_log_fragment.xml
new file mode 100644
index 000000000..524291695
--- /dev/null
+++ b/res/layout/msim_call_log_fragment.xml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+Copyright (c) 2013, The Linux Foundation. All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation, Inc. nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<!-- Layout parameters are set programmatically. -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:divider="?android:attr/dividerHorizontal"
+ android:showDividers="end">
+
+ <FrameLayout
+ android:id="@+id/voicemail_status"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:visibility="gone">
+ <include layout="@layout/call_log_voicemail_status"
+ />
+ </FrameLayout>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:paddingLeft="@dimen/call_log_outer_margin"
+ android:paddingRight="@dimen/call_log_outer_margin"
+ >
+ <Spinner
+ android:id="@+id/filter_sub_spinner"
+ android:layout_width="0dip"
+ android:layout_height="@dimen/list_section_divider_min_height"
+ android:layout_weight="1"
+ android:layout_marginTop="5dip"
+ />
+ <Spinner
+ android:id="@+id/filter_status_spinner"
+ android:layout_width="0dip"
+ android:layout_height="@dimen/list_section_divider_min_height"
+ android:layout_weight="2"
+ android:layout_marginTop="5dip"
+ />
+ </LinearLayout>
+
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+ <ListView android:id="@android:id/list"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:fadingEdge="none"
+ android:scrollbarStyle="outsideOverlay"
+ android:divider="@null"
+ />
+ <TextView android:id="@android:id/empty"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:text="@string/recentCalls_empty"
+ android:gravity="center"
+ android:layout_marginTop="@dimen/empty_message_top_margin"
+ android:textColor="?android:attr/textColorSecondary"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ />
+ </FrameLayout>
+</LinearLayout>
diff --git a/res/layout/speed_dial_item.xml b/res/layout/speed_dial_item.xml
new file mode 100755
index 000000000..53807db14
--- /dev/null
+++ b/res/layout/speed_dial_item.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The CyanogenMod Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingStart="8dip"
+ android:paddingEnd="8dip"
+ android:orientation="horizontal"
+ android:minHeight="?android:attr/listPreferredItemHeight">
+
+ <TextView
+ android:id="@+id/index"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_vertical"
+ android:layout_marginStart="4dp"
+ android:layout_marginEnd="12dp"
+ android:textStyle="bold"
+ android:textAppearance="?android:attr/textAppearanceLarge" />
+
+ <LinearLayout
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:layout_gravity="center_vertical"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/name"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textAppearance="?android:attr/textAppearanceMedium" />
+
+ <TextView
+ android:id="@+id/number"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" />
+
+ </LinearLayout>
+
+ <QuickContactBadge
+ android:id="@+id/photo"
+ android:layout_width="@dimen/speed_dial_list_contact_photo_size"
+ android:layout_height="@dimen/speed_dial_list_contact_photo_size"
+ android:layout_gravity="center_vertical"
+ android:layout_marginEnd="8dp" />
+
+</LinearLayout>
+
diff --git a/res/menu/call_details_options.xml b/res/menu/call_details_options.xml
index 549203998..b34fc5c09 100644
--- a/res/menu/call_details_options.xml
+++ b/res/menu/call_details_options.xml
@@ -15,6 +15,11 @@
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
+ android:id="@+id/menu_calllog_detail_video_call"
+ android:title="@string/video_call"
+ android:onClick="onMenuVTCall"
+ />
+ <item
android:id="@+id/menu_trash"
android:icon="@drawable/ic_menu_delete_dk"
android:showAsAction="ifRoom"
diff --git a/res/menu/call_log_context_menu_options.xml b/res/menu/call_log_context_menu_options.xml
new file mode 100644
index 000000000..6fad0adaa
--- /dev/null
+++ b/res/menu/call_log_context_menu_options.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-->
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+ <item
+ android:id="@+id/menu_ip_call_by_slot1"
+ android:showAsAction="withText"
+ android:orderInCategory="1" />
+
+ <item
+ android:id="@+id/menu_ip_call_by_slot2"
+ android:showAsAction="withText"
+ android:orderInCategory="1" />
+
+ <item
+ android:id="@+id/menu_edit_before_call"
+ android:title="@string/recentCalls_editNumberBeforeCall"
+ android:showAsAction="withText"
+ android:orderInCategory="1" />
+
+ <item
+ android:id="@+id/menu_send_text_message"
+ android:title="@string/menu_sendTextMessage"
+ android:showAsAction="withText"
+ android:orderInCategory="1" />
+
+ <item
+ android:id="@+id/menu_add_to_contacts"
+ android:title="@string/recentCalls_addToContact"
+ android:showAsAction="withText"
+ android:orderInCategory="1" />
+</menu>
diff --git a/res/menu/call_log_options.xml b/res/menu/call_log_options.xml
index 50b1cad5b..f0cbdf142 100644..100755
--- a/res/menu/call_log_options.xml
+++ b/res/menu/call_log_options.xml
@@ -15,8 +15,13 @@
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
+ android:id="@+id/search_calllog"
+ android:title="@string/calllog_search_hint"
+ android:showAsAction="never"
+ android:orderInCategory="1"/>
+ <item
android:id="@+id/delete_all"
android:title="@string/recentCalls_deleteAll"
android:showAsAction="never"
- android:orderInCategory="1"/>
+ android:orderInCategory="2"/>
</menu>
diff --git a/res/menu/dialpad_options.xml b/res/menu/dialpad_options.xml
index 0727dd57c..1ac7998d5 100644
--- a/res/menu/dialpad_options.xml
+++ b/res/menu/dialpad_options.xml
@@ -15,6 +15,14 @@
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
+ android:id="@+id/menu_ip_call_by_slot1"
+ android:showAsAction="withText"
+ android:orderInCategory="1" />
+ <item
+ android:id="@+id/menu_ip_call_by_slot2"
+ android:showAsAction="withText"
+ android:orderInCategory="1" />
+ <item
android:id="@+id/menu_add_contacts"
android:title="@string/recentCalls_addToContact"
android:showAsAction="withText"
@@ -29,4 +37,21 @@
android:title="@string/add_wait"
android:showAsAction="withText"
android:orderInCategory="1" />
+<!-- add for CSVT -->
+ <item
+ android:id="@+id/menu_video_call"
+ android:title="@string/video_call"
+ android:showAsAction="withText"
+ android:orderInCategory="1" />
+ <item
+ android:id="@+id/menu_video_call_settings"
+ android:title="@string/video_call_settings"
+ android:showAsAction="withText"
+ android:orderInCategory="1" />
+<!-- add for CSVT -->
+ <item
+ android:id="@+id/speed_dial"
+ android:title="@string/speed_dial_settings"
+ android:showAsAction="withText"
+ android:orderInCategory="1" />
</menu>
diff --git a/res/values-af/cm_caf.xml b/res/values-af/cm_caf.xml
deleted file mode 100644
index c724badce..000000000
--- a/res/values-af/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Soek deur geskakelde lys</string>
-</resources>
diff --git a/res/values-af/cm_strings.xml b/res/values-af/cm_strings.xml
index 5af05a5b5..428251663 100644
--- a/res/values-af/cm_strings.xml
+++ b/res/values-af/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Statistieke</string>
<string name="callStatsDetailTitle">Oproep stat besonderhede</string>
- <string name="call_stats">Oproep statistieke</string>
- <string name="call_stats_refresh">Herlaai</string>
- <string name="activity_title_call_stats">Oproep statistieke</string>
<string name="call_stats_nav_all">Alles</string>
<string name="call_stats_nav_incoming">Inkomende</string>
<string name="call_stats_nav_outgoing">Uitgaande</string>
@@ -53,4 +50,23 @@
<string name="start_call_playback">Speel opname</string>
<string name="stop_call_playback">Stop</string>
<string name="call_playback_error_message">Kon nie opname speel nie</string>
+ <string name="calllog_search_hint">Soek deur geskakelde lys</string>
+ <string name="video_call">Video oproep</string>
+ <string name="video_call_settings">Video oproep instellings</string>
+ <string name="description_videocall">Video oproep <xliff:g id="name">%1$s</xliff:g></string>
+ <string name="speed_dial_settings">Snel keuse instellings</string>
+ <string name="speed_dial_not_set">(nie gestel)</string>
+ <string name="speed_dial_replace">Vervang</string>
+ <string name="speed_dial_delete">Verwyder</string>
+ <string name="speed_dial_unassigned_dialog_title">Sleutel nie toegeken</string>
+ <string name="speed_dial_unassigned_dialog_message">Geen vinnige skakel aksie toegeken aan nommer sleutel \'<xliff:g id="number">%s</xliff:g>\'. Wil jy \'n aksie toe ken?</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"Om vinnige skakel aksie te gebruik skakel vliegtuigmodus eers af."</string>
+ <string name="msim_ime_dialog_title">Toestel identifiseerder</string>
+ <string name="multi_sim_slot_name">SIM <xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">Alle SIMs</string>
+ <string name="yes">Ja</string>
+ <string name="no">Nee</string>
+ <string name="call_duration_active">Aktiewe tydsduur:</string>
+ <string name="call_duration_call_out">Oproep tydsduur:</string>
+ <string name="call_log_all_calls_header">Alle oproepe</string>
</resources>
diff --git a/res/values-ar/cm_caf.xml b/res/values-ar/cm_caf.xml
deleted file mode 100644
index 72c7b9c8e..000000000
--- a/res/values-ar/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">البحث عن سجل المكالمات</string>
-</resources>
diff --git a/res/values-ar/cm_strings.xml b/res/values-ar/cm_strings.xml
index c742bf18e..c3c29cc3d 100644
--- a/res/values-ar/cm_strings.xml
+++ b/res/values-ar/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">الإحصائيات</string>
<string name="callStatsDetailTitle">اإحصائيات تفاصيل الإتصال</string>
- <string name="call_stats">إحصاءات مكالمة</string>
- <string name="call_stats_refresh">تحديث</string>
- <string name="activity_title_call_stats">إحصاءات المكالمات</string>
<string name="call_stats_nav_all">الكل</string>
<string name="call_stats_nav_incoming">الوارد</string>
<string name="call_stats_nav_outgoing">الفائتة</string>
diff --git a/res/values-ca/cm_caf.xml b/res/values-ca/cm_caf.xml
deleted file mode 100644
index 878c082c8..000000000
--- a/res/values-ca/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Cerca el registre de trucades</string>
-</resources>
diff --git a/res/values-ca/cm_strings.xml b/res/values-ca/cm_strings.xml
index 11d620938..630d7ea6a 100644
--- a/res/values-ca/cm_strings.xml
+++ b/res/values-ca/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Estadístiques</string>
<string name="callStatsDetailTitle">Detalls de les trucades</string>
- <string name="call_stats">Estadístiques de les trucades</string>
- <string name="call_stats_refresh">Refresca</string>
- <string name="activity_title_call_stats">Estadístiques de les trucades</string>
<string name="call_stats_nav_all">Totes</string>
<string name="call_stats_nav_incoming">Entrants</string>
<string name="call_stats_nav_outgoing">Sortints</string>
@@ -53,4 +50,23 @@
<string name="start_call_playback">Reprodueix gravació</string>
<string name="stop_call_playback">Para</string>
<string name="call_playback_error_message">No s\'ha pogut reproduir la gravació</string>
+ <string name="calllog_search_hint">Cerca el registre de trucades</string>
+ <string name="video_call">Videotrucada</string>
+ <string name="video_call_settings">Ajustaments de videotrucada</string>
+ <string name="description_videocall">Videotrucada <xliff:g id="name">%1$s</xliff:g></string>
+ <string name="speed_dial_settings">Ajustaments de trucada ràpida</string>
+ <string name="speed_dial_not_set">(no configurat)</string>
+ <string name="speed_dial_replace">Substitueix</string>
+ <string name="speed_dial_delete">Esborra</string>
+ <string name="speed_dial_unassigned_dialog_title">Tecla no assignada</string>
+ <string name="speed_dial_unassigned_dialog_message">No hi ha una acció de trucada ràpida assignada a la tecla número \'<xliff:g id="number">%s</xliff:g>\'. Vols assignar una acció ara?</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"Per utilitzar la trucada ràpida, primer has d'apagar el mode avió."</string>
+ <string name="msim_ime_dialog_title">Identificador del dispositiu</string>
+ <string name="multi_sim_slot_name">SIM <xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">Totes les SIMs</string>
+ <string name="yes">Sí</string>
+ <string name="no">No</string>
+ <string name="call_duration_active">Durada actiu:</string>
+ <string name="call_duration_call_out">Durada de la trucada:</string>
+ <string name="call_log_all_calls_header">Totes les trucades</string>
</resources>
diff --git a/res/values-cs/cm_caf.xml b/res/values-cs/cm_caf.xml
deleted file mode 100644
index d011d89dd..000000000
--- a/res/values-cs/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Prohledávat výpis hovorů</string>
-</resources>
diff --git a/res/values-cs/cm_strings.xml b/res/values-cs/cm_strings.xml
index 6e6b4145d..4ebe9760f 100644
--- a/res/values-cs/cm_strings.xml
+++ b/res/values-cs/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Statistika</string>
<string name="callStatsDetailTitle">Detaily statiskitky hovorů</string>
- <string name="call_stats">Statistiky hovoru</string>
- <string name="call_stats_refresh">Obnovit</string>
- <string name="activity_title_call_stats">Statistiky hovoru</string>
<string name="call_stats_nav_all">Vše</string>
<string name="call_stats_nav_incoming">Příchozí</string>
<string name="call_stats_nav_outgoing">Odchozí</string>
@@ -53,4 +50,23 @@
<string name="start_call_playback">Přehrát záznam</string>
<string name="stop_call_playback">Stop</string>
<string name="call_playback_error_message">Selhalo přehrávání záznamu</string>
+ <string name="calllog_search_hint">Prohledávat výpis hovorů</string>
+ <string name="video_call">Video hovor</string>
+ <string name="video_call_settings">Nastavení video hovoru</string>
+ <string name="description_videocall">Video hovor <xliff:g id="name">%1$s</xliff:g></string>
+ <string name="speed_dial_settings">Nastavení rychlého vytáčení</string>
+ <string name="speed_dial_not_set">(nenastaveno)</string>
+ <string name="speed_dial_replace">Nahradit</string>
+ <string name="speed_dial_delete">Odstranit</string>
+ <string name="speed_dial_unassigned_dialog_title">Klávesa nepřiřazena</string>
+ <string name="speed_dial_unassigned_dialog_message">Akce pro rychlé vytáčení není pro tuto klávesu „<xliff:g id="number">%s</xliff:g>“ přiřazena. Chcete jí nyní přiřadit?</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"Pro použití rychlého vytáčení nejprve vypněte režim „V letadle“."</string>
+ <string name="msim_ime_dialog_title">Identifikátor zařízení</string>
+ <string name="multi_sim_slot_name">SIM <xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">Všechny SIM karty</string>
+ <string name="yes">Ano</string>
+ <string name="no">Ne</string>
+ <string name="call_duration_active">Aktivní trvání:</string>
+ <string name="call_duration_call_out">Dálka hovoru:</string>
+ <string name="call_log_all_calls_header">Všechny hovory</string>
</resources>
diff --git a/res/values-da/cm_caf.xml b/res/values-da/cm_caf.xml
deleted file mode 100644
index f7620ef25..000000000
--- a/res/values-da/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Søg opkaldsliste</string>
-</resources>
diff --git a/res/values-da/cm_strings.xml b/res/values-da/cm_strings.xml
index 8410d9d6b..22db7f53a 100644
--- a/res/values-da/cm_strings.xml
+++ b/res/values-da/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Statistik</string>
<string name="callStatsDetailTitle">Detaljer om opkaldsstatistik</string>
- <string name="call_stats">Opkaldsstatistik</string>
- <string name="call_stats_refresh">Opdatér</string>
- <string name="activity_title_call_stats">Opkaldsstatistik</string>
<string name="call_stats_nav_all">Alle</string>
<string name="call_stats_nav_incoming">Indgående</string>
<string name="call_stats_nav_outgoing">Udgående</string>
@@ -53,4 +50,23 @@
<string name="start_call_playback">Afspil optagelse</string>
<string name="stop_call_playback">Stop</string>
<string name="call_playback_error_message">Kunne ikke afspille optagelse</string>
+ <string name="calllog_search_hint">Søg i opkaldsloggen</string>
+ <string name="video_call">Videoopkald</string>
+ <string name="video_call_settings">Indstillinger for videoopkald</string>
+ <string name="description_videocall">Videoopkald <xliff:g id="name">%1$s</xliff:g></string>
+ <string name="speed_dial_settings">Indstillinger for hurtigopkald</string>
+ <string name="speed_dial_not_set">(ikke angivet)</string>
+ <string name="speed_dial_replace">Erstat</string>
+ <string name="speed_dial_delete">Slet</string>
+ <string name="speed_dial_unassigned_dialog_title">Tast ikke tildelt</string>
+ <string name="speed_dial_unassigned_dialog_message">Intet hurtigopkald tildelt tasten \'<xliff:g id="number">%s</xliff:g>\'. Vil du tildele et opkald nu?</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"For at bruge hurtigopkald, skal du først deaktivere Flytilstand."</string>
+ <string name="msim_ime_dialog_title">Enheds-id</string>
+ <string name="multi_sim_slot_name">SIM <xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">Alle SIM-kort</string>
+ <string name="yes">Ja</string>
+ <string name="no">Nej</string>
+ <string name="call_duration_active">Aktiv i:</string>
+ <string name="call_duration_call_out">Varighed af opkald:</string>
+ <string name="call_log_all_calls_header">Alle opkald</string>
</resources>
diff --git a/res/values-de/cm_caf.xml b/res/values-de/cm_caf.xml
deleted file mode 100644
index 9d18ddbdf..000000000
--- a/res/values-de/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Anrufprotokoll durchsuchen</string>
-</resources>
diff --git a/res/values-de/cm_strings.xml b/res/values-de/cm_strings.xml
index ee3c4a5cb..40db5fb65 100644
--- a/res/values-de/cm_strings.xml
+++ b/res/values-de/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Statistiken</string>
<string name="callStatsDetailTitle">Anrufstatistikdetails</string>
- <string name="call_stats">Anrufstatistik</string>
- <string name="call_stats_refresh">Aktualisieren</string>
- <string name="activity_title_call_stats">Anrufstatistik</string>
<string name="call_stats_nav_all">Alle</string>
<string name="call_stats_nav_incoming">Eingehend</string>
<string name="call_stats_nav_outgoing">Ausgehend</string>
@@ -53,4 +50,14 @@
<string name="start_call_playback">Aufzeichnung abspielen</string>
<string name="stop_call_playback">Stopp</string>
<string name="call_playback_error_message">Wiedergabe der Aufzeichnung fehlgeschlagen</string>
+ <string name="calllog_search_hint">Anrufprotokoll durchsuchen</string>
+ <string name="speed_dial_settings">Kurzwahl-Einstellungen</string>
+ <string name="speed_dial_replace">Ersetzen</string>
+ <string name="speed_dial_delete">Löschen</string>
+ <string name="multi_sim_slot_name">SIM <xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">Alle SIM-Karten</string>
+ <string name="yes">Ja</string>
+ <string name="no">Nein</string>
+ <string name="call_duration_call_out">Gesprächsdauer:</string>
+ <string name="call_log_all_calls_header">Alle Anrufe</string>
</resources>
diff --git a/res/values-el/cm_caf.xml b/res/values-el/cm_caf.xml
deleted file mode 100644
index e05a3ffb9..000000000
--- a/res/values-el/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Αναζήτηση αρχείου κλήσεων</string>
-</resources>
diff --git a/res/values-el/cm_strings.xml b/res/values-el/cm_strings.xml
index 961ece2e7..3e559b0a9 100644
--- a/res/values-el/cm_strings.xml
+++ b/res/values-el/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Στατιστικά</string>
<string name="callStatsDetailTitle">Λεπτομέρειες στατιστικών κλήσεων</string>
- <string name="call_stats">Στατιστικά κλήσεων</string>
- <string name="call_stats_refresh">Ανανέωση</string>
- <string name="activity_title_call_stats">Στατιστικά κλήσεων</string>
<string name="call_stats_nav_all">Όλες</string>
<string name="call_stats_nav_incoming">Εισερχόμενες</string>
<string name="call_stats_nav_outgoing">Εξερχόμενες</string>
@@ -53,4 +50,23 @@
<string name="start_call_playback">Αναπαραγωγή καταγραφής</string>
<string name="stop_call_playback">Διακοπή</string>
<string name="call_playback_error_message">Αποτυχία αναπαραγωγής της καταγραφής κλήσης</string>
+ <string name="calllog_search_hint">Αναζήτηση αρχείου κλήσεων</string>
+ <string name="video_call">Βίντεο κλήση</string>
+ <string name="video_call_settings">Ρυθμίσεις κλήσεων βίντεο</string>
+ <string name="description_videocall">Βίντεο κλήση <xliff:g id="name">%1$s</xliff:g></string>
+ <string name="speed_dial_settings">Ρυθμίσεις ταχείας κλήσης</string>
+ <string name="speed_dial_not_set">(δεν έχει οριστεί)</string>
+ <string name="speed_dial_replace">Αντικατάσταση</string>
+ <string name="speed_dial_delete">Διαγραφή</string>
+ <string name="speed_dial_unassigned_dialog_title">Μη εκχωρημένο πλήκτρο</string>
+ <string name="speed_dial_unassigned_dialog_message">Καμία ενέργεια ταχείας κλήσης δεν έχει εκχωρηθεί στο πλήκτρο \'<xliff:g id="number">%s</xliff:g>\'. Θέλετε να ορίσετε μια ενέργεια τώρα;</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"Για να χρησιμοποιήσετε την ταχεία κλήση, πρώτα απενεργοποιήστε την λειτουργία πτήσης."</string>
+ <string name="msim_ime_dialog_title">Αναγνωριστικό συσκευής</string>
+ <string name="multi_sim_slot_name">SIM <xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">Όλες οι SIM</string>
+ <string name="yes">Ναί</string>
+ <string name="no">Όχι</string>
+ <string name="call_duration_active">Διάρκεια κλήσης:</string>
+ <string name="call_duration_call_out">Διάρκεια κλήσης:</string>
+ <string name="call_log_all_calls_header">Όλες οι κλήσεις</string>
</resources>
diff --git a/res/values-en-rGR/cm_strings.xml b/res/values-en-rGR/cm_strings.xml
deleted file mode 100644
index b947305dc..000000000
--- a/res/values-en-rGR/cm_strings.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2013-2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="dialpad_2_2_letters">ΑΒΓ</string>
- <string name="dialpad_3_2_letters">ΔΕΖ</string>
- <string name="dialpad_4_2_letters">ΗΘΙ</string>
- <string name="dialpad_5_2_letters">ΚΛΜ</string>
- <string name="dialpad_6_2_letters">ΝΞΟ</string>
- <string name="dialpad_7_2_letters">ΠΡΣ</string>
- <string name="dialpad_8_2_letters">ΤΥΦ</string>
- <string name="dialpad_9_2_letters">ΧΨΩ</string>
-</resources>
diff --git a/res/values-en-rIL/cm_strings.xml b/res/values-en-rIL/cm_strings.xml
deleted file mode 100644
index 1d3b228b2..000000000
--- a/res/values-en-rIL/cm_strings.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2012-2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="dialpad_2_2_letters">דהו</string>
- <string name="dialpad_3_2_letters">אבג</string>
- <string name="dialpad_4_2_letters">מנ</string>
- <string name="dialpad_5_2_letters">יכל</string>
- <string name="dialpad_6_2_letters">זחט</string>
- <string name="dialpad_7_2_letters">רשת</string>
- <string name="dialpad_8_2_letters">צק</string>
- <string name="dialpad_9_2_letters">סעפ</string>
-</resources>
diff --git a/res/values-en-rRU/cm_strings.xml b/res/values-en-rRU/cm_strings.xml
deleted file mode 100644
index c45f76e4a..000000000
--- a/res/values-en-rRU/cm_strings.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2013 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="dialpad_2_2_letters">АБВГ</string>
- <string name="dialpad_3_2_letters">ДЕЖЗ</string>
- <string name="dialpad_4_2_letters">ИЙКЛ</string>
- <string name="dialpad_5_2_letters">МНОП</string>
- <string name="dialpad_6_2_letters">РСТУ</string>
- <string name="dialpad_7_2_letters">ФХЦЧ</string>
- <string name="dialpad_8_2_letters">ШЩЪЫ</string>
- <string name="dialpad_9_2_letters">ЬЭЮЯ</string>
-</resources>
diff --git a/res/values-es-rXA/cm_caf.xml b/res/values-es-rXA/cm_caf.xml
deleted file mode 100644
index c18a6cc22..000000000
--- a/res/values-es-rXA/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Guetar rexistru de llamaes</string>
-</resources>
diff --git a/res/values-es-rXA/cm_strings.xml b/res/values-es-rXA/cm_strings.xml
index 71ded5ead..5d66a907b 100644
--- a/res/values-es-rXA/cm_strings.xml
+++ b/res/values-es-rXA/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Estadístiques</string>
<string name="callStatsDetailTitle">Detalles de llamada</string>
- <string name="call_stats">Estadístiques de llamaes</string>
- <string name="call_stats_refresh">Anovar</string>
- <string name="activity_title_call_stats">Estadístiques de llamaes</string>
<string name="call_stats_nav_all">Toes</string>
<string name="call_stats_nav_incoming">Entrantes</string>
<string name="call_stats_nav_outgoing">Salientes</string>
@@ -53,4 +50,23 @@
<string name="start_call_playback">Reproducir grabación</string>
<string name="stop_call_playback">Parar</string>
<string name="call_playback_error_message">Nun pudo reproducise la grabación</string>
+ <string name="calllog_search_hint">Guetar rexistru de llamaes</string>
+ <string name="video_call">Videollamada</string>
+ <string name="video_call_settings">Axustes de videollamada</string>
+ <string name="description_videocall">Videollamada <xliff:g id="name">%1$s</xliff:g></string>
+ <string name="speed_dial_settings">Axustes de marcáu rápidu</string>
+ <string name="speed_dial_not_set">(ensin afitar)</string>
+ <string name="speed_dial_replace">Trocar</string>
+ <string name="speed_dial_delete">Desaniciar</string>
+ <string name="speed_dial_unassigned_dialog_title">Tecla ensin asignar</string>
+ <string name="speed_dial_unassigned_dialog_message">Nun hai una aición de marcáu rápidu asignada a la tecla númberu \'<xliff:g id="number">%s</xliff:g>\'. Quies asigna-y agora una aición?</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"Pa usar el marcáu rápidu, primero desactiva'l mou avión."</string>
+ <string name="msim_ime_dialog_title">Identificador del preséu</string>
+ <string name="multi_sim_slot_name">SIM <xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">Toles SIM</string>
+ <string name="yes">Sí</string>
+ <string name="no">Non</string>
+ <string name="call_duration_active">Duración activa:</string>
+ <string name="call_duration_call_out">Duración de llamada:</string>
+ <string name="call_log_all_calls_header">Toles llamaes</string>
</resources>
diff --git a/res/values-es/cm_caf.xml b/res/values-es/cm_caf.xml
deleted file mode 100644
index 27703724d..000000000
--- a/res/values-es/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Buscar registro de llamadas</string>
-</resources>
diff --git a/res/values-es/cm_strings.xml b/res/values-es/cm_strings.xml
index 8f8cfcede..5d510258e 100644
--- a/res/values-es/cm_strings.xml
+++ b/res/values-es/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Estadísticas</string>
<string name="callStatsDetailTitle">Detalles de llamada</string>
- <string name="call_stats">Estadísticas de llamadas</string>
- <string name="call_stats_refresh">Actualizar</string>
- <string name="activity_title_call_stats">Estadísticas de llamadas</string>
<string name="call_stats_nav_all">Todas</string>
<string name="call_stats_nav_incoming">Entrantes</string>
<string name="call_stats_nav_outgoing">Salientes</string>
@@ -53,4 +50,23 @@
<string name="start_call_playback">Reproducir grabación</string>
<string name="stop_call_playback">Detener</string>
<string name="call_playback_error_message">Ocurrió un error al reproducir la grabación</string>
+ <string name="calllog_search_hint">Buscar en el registro de llamadas</string>
+ <string name="video_call">Videollamada</string>
+ <string name="video_call_settings">Ajustes de videollamada</string>
+ <string name="description_videocall">Videollamada <xliff:g id="name">%1$s</xliff:g></string>
+ <string name="speed_dial_settings">Ajustes de marcado</string>
+ <string name="speed_dial_not_set">(sin establecer)</string>
+ <string name="speed_dial_replace">Reemplazar</string>
+ <string name="speed_dial_delete">Eliminar</string>
+ <string name="speed_dial_unassigned_dialog_title">Tecla sin asignar</string>
+ <string name="speed_dial_unassigned_dialog_message">La tecla \u00AB<xliff:g id="number">%s</xliff:g>\u00BB no tiene una acción asignada. ¿Quieres asignar una acción ahora?</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"Para usar el marcado rápido, primero desactiva el modo avión."</string>
+ <string name="msim_ime_dialog_title">Identificador del dispositivo</string>
+ <string name="multi_sim_slot_name">SIM <xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">Todas las SIM</string>
+ <string name="yes">Sí</string>
+ <string name="no">No</string>
+ <string name="call_duration_active">Duración activa:</string>
+ <string name="call_duration_call_out">Duración de llamada:</string>
+ <string name="call_log_all_calls_header">Todas las llamadas</string>
</resources>
diff --git a/res/values-et/cm_caf.xml b/res/values-et/cm_caf.xml
deleted file mode 100644
index f4d0d18f5..000000000
--- a/res/values-et/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Otsi kõnelogist</string>
-</resources>
diff --git a/res/values-eu/cm_caf.xml b/res/values-eu/cm_caf.xml
deleted file mode 100644
index e10fdacb2..000000000
--- a/res/values-eu/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Deien erregistroa bilatu</string>
-</resources>
diff --git a/res/values-eu/cm_strings.xml b/res/values-eu/cm_strings.xml
index abdf7dcd4..974d44041 100644
--- a/res/values-eu/cm_strings.xml
+++ b/res/values-eu/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Estatistikak</string>
<string name="callStatsDetailTitle">Deiaren xehetasunak</string>
- <string name="call_stats">Deien estatistikak</string>
- <string name="call_stats_refresh">Eguneratu</string>
- <string name="activity_title_call_stats">Deien estatistikak</string>
<string name="call_stats_nav_all">Denak</string>
<string name="call_stats_nav_incoming">Sartzen diren deiak</string>
<string name="call_stats_nav_outgoing">Irtetzen diren deiak</string>
diff --git a/res/values-fi/cm_caf.xml b/res/values-fi/cm_caf.xml
deleted file mode 100644
index bbd5f3b88..000000000
--- a/res/values-fi/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Etsi puhelulokista</string>
-</resources>
diff --git a/res/values-fi/cm_strings.xml b/res/values-fi/cm_strings.xml
index a8037a09c..1af19efc0 100644
--- a/res/values-fi/cm_strings.xml
+++ b/res/values-fi/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Tilastot</string>
<string name="callStatsDetailTitle">Puheluiden lisätiedot</string>
- <string name="call_stats">Puhelutiedot</string>
- <string name="call_stats_refresh">Päivitä</string>
- <string name="activity_title_call_stats">Puhelutiedot</string>
<string name="call_stats_nav_all">Kaikki</string>
<string name="call_stats_nav_incoming">Vastatut</string>
<string name="call_stats_nav_outgoing">Soitetut</string>
@@ -53,4 +50,23 @@
<string name="start_call_playback">Toista nauhoitus</string>
<string name="stop_call_playback">Lopeta</string>
<string name="call_playback_error_message">Nauhoituksen toisto epäonnistui</string>
+ <string name="calllog_search_hint">Etsi puhelulokista</string>
+ <string name="video_call">Videopuhelu</string>
+ <string name="video_call_settings">Videopuhelun asetukset</string>
+ <string name="description_videocall">Videopuhelu <xliff:g id="name">%1$s</xliff:g></string>
+ <string name="speed_dial_settings">Pikavalinta-asetukset</string>
+ <string name="speed_dial_not_set">(ei määritetty)</string>
+ <string name="speed_dial_replace">Korvaa</string>
+ <string name="speed_dial_delete">Poista</string>
+ <string name="speed_dial_unassigned_dialog_title">Näppäinta ei määritetty</string>
+ <string name="speed_dial_unassigned_dialog_message">Mitään pikavalintaa ei ole määritetty numerolle \'<xliff:g id="number">%s</xliff:g>\'. Haluatko määrittää tehtävän nyt?</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"Käyttääksesi pikavalintaa, ota lentokonetila pois käytöstä."</string>
+ <string name="msim_ime_dialog_title">Laitteen tunnus</string>
+ <string name="multi_sim_slot_name">SIM <xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">Kaikki SIMit</string>
+ <string name="yes">Kyllä</string>
+ <string name="no">Ei</string>
+ <string name="call_duration_active">Aktiivisena:</string>
+ <string name="call_duration_call_out">Puhelun kesto:</string>
+ <string name="call_log_all_calls_header">Kaikki puhelut</string>
</resources>
diff --git a/res/values-fr/cm_caf.xml b/res/values-fr/cm_caf.xml
deleted file mode 100644
index 09e05d0b0..000000000
--- a/res/values-fr/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Recherche du journal d\'appels</string>
-</resources>
diff --git a/res/values-fr/cm_strings.xml b/res/values-fr/cm_strings.xml
index 8a3c680b7..adad9bb7a 100644
--- a/res/values-fr/cm_strings.xml
+++ b/res/values-fr/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Statistiques</string>
<string name="callStatsDetailTitle">Détails des statistiques d\'appels</string>
- <string name="call_stats">Statistiques d\'appels</string>
- <string name="call_stats_refresh">Actualiser</string>
- <string name="activity_title_call_stats">Statistiques d\'appels</string>
<string name="call_stats_nav_all">Tous</string>
<string name="call_stats_nav_incoming">Entrants</string>
<string name="call_stats_nav_outgoing">Sortants</string>
@@ -53,4 +50,7 @@
<string name="start_call_playback">Lire l\'enregistrement</string>
<string name="stop_call_playback">Arrêter</string>
<string name="call_playback_error_message">Impossible de lire l\'enregistrement</string>
+ <string name="speed_dial_not_set">(non défini)</string>
+ <string name="speed_dial_replace">Remplacer</string>
+ <string name="speed_dial_delete">Supprimer</string>
</resources>
diff --git a/res/values-hr/cm_caf.xml b/res/values-hr/cm_caf.xml
deleted file mode 100644
index 09138f2b0..000000000
--- a/res/values-hr/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Traži ispis poziva</string>
-</resources>
diff --git a/res/values-hr/cm_strings.xml b/res/values-hr/cm_strings.xml
index 0bb1bf97e..f9c4dbcf9 100644
--- a/res/values-hr/cm_strings.xml
+++ b/res/values-hr/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Satatistike</string>
<string name="callStatsDetailTitle">Detalji statistike poziva</string>
- <string name="call_stats">Statistika poziva</string>
- <string name="call_stats_refresh">Osvježi</string>
- <string name="activity_title_call_stats">Statistika poziva</string>
<string name="call_stats_nav_all">Svi pozivi</string>
<string name="call_stats_nav_incoming">Dolazni</string>
<string name="call_stats_nav_outgoing">Odlazni</string>
diff --git a/res/values-hu/cm_caf.xml b/res/values-hu/cm_caf.xml
deleted file mode 100644
index 279747a8b..000000000
--- a/res/values-hu/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Keresés a hívásnaplóban</string>
-</resources>
diff --git a/res/values-hu/cm_strings.xml b/res/values-hu/cm_strings.xml
index b6a87fc00..6e616699e 100644
--- a/res/values-hu/cm_strings.xml
+++ b/res/values-hu/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Statisztikák</string>
<string name="callStatsDetailTitle">Részletek</string>
- <string name="call_stats">Hívásinfó</string>
- <string name="call_stats_refresh">Frissítés</string>
- <string name="activity_title_call_stats">Hívásinfó</string>
<string name="call_stats_nav_all">Mind</string>
<string name="call_stats_nav_incoming">Bejövő</string>
<string name="call_stats_nav_outgoing">Kimenő</string>
@@ -53,4 +50,23 @@
<string name="start_call_playback">Felvétel lejátszása</string>
<string name="stop_call_playback">Leállítás</string>
<string name="call_playback_error_message">Nem sikerült lejátszani a felvételt</string>
+ <string name="calllog_search_hint">Keresés a hívásnaplóban</string>
+ <string name="video_call">Videóhívás</string>
+ <string name="video_call_settings">Videóhívás beállítások</string>
+ <string name="description_videocall">Videóhívás <xliff:g id="name">%1$s</xliff:g></string>
+ <string name="speed_dial_settings">Gyorstárcsázó beállítások</string>
+ <string name="speed_dial_not_set">(nincs beállítva)</string>
+ <string name="speed_dial_replace">Cserél</string>
+ <string name="speed_dial_delete">Törlés</string>
+ <string name="speed_dial_unassigned_dialog_title">Nem hozzárendelt kulcs</string>
+ <string name="speed_dial_unassigned_dialog_message">Nincs gyorstárcsázási művelet hozzárendelve a következő számhoz: \"<xliff:g id="number">%s</xliff:g>\". Szeretne most hozzárendelni egy műveletet?</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"Gyorshívás használatához először kapcsolja ki a Repülőgép üzemmódot."</string>
+ <string name="msim_ime_dialog_title">Eszköz azonosító</string>
+ <string name="multi_sim_slot_name">SIM <xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">Minden SIM</string>
+ <string name="yes">Igen</string>
+ <string name="no">Nem</string>
+ <string name="call_duration_active">Aktív időtartam:</string>
+ <string name="call_duration_call_out">Hívás időtartama:</string>
+ <string name="call_log_all_calls_header">Minden hívás</string>
</resources>
diff --git a/res/values-in/cm_caf.xml b/res/values-in/cm_caf.xml
deleted file mode 100644
index bee2e8737..000000000
--- a/res/values-in/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Cari dalam daftar panggilan</string>
-</resources>
diff --git a/res/values-in/cm_strings.xml b/res/values-in/cm_strings.xml
index eb2be38d1..666c84dda 100644
--- a/res/values-in/cm_strings.xml
+++ b/res/values-in/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Statistik</string>
<string name="callStatsDetailTitle">Rincian statistik panggilan</string>
- <string name="call_stats">Statistik panggilan</string>
- <string name="call_stats_refresh">Refresh</string>
- <string name="activity_title_call_stats">Statistik panggilan</string>
<string name="call_stats_nav_all">Semua</string>
<string name="call_stats_nav_incoming">Masuk</string>
<string name="call_stats_nav_outgoing">Keluar</string>
@@ -53,4 +50,23 @@
<string name="start_call_playback">Putar rekaman</string>
<string name="stop_call_playback">Hentikan</string>
<string name="call_playback_error_message">Gagal untuk memutar rekaman</string>
+ <string name="calllog_search_hint">Cari log panggilan</string>
+ <string name="video_call">Panggilan video</string>
+ <string name="video_call_settings">Pengaturan panggilan video</string>
+ <string name="description_videocall">Panggilan video <xliff:g id="name">%1$s</xliff:g></string>
+ <string name="speed_dial_settings">Pengaturan panggilan cepat</string>
+ <string name="speed_dial_not_set">(tidak ditetapkan)</string>
+ <string name="speed_dial_replace">Ganti</string>
+ <string name="speed_dial_delete">Hapus</string>
+ <string name="speed_dial_unassigned_dialog_title">Tombol belum ditetapkan</string>
+ <string name="speed_dial_unassigned_dialog_message">Tidak ada tindakan panggilan cepat ditugaskan untuk tombol angka \'<xliff:g id="angka">%s</xliff:g>\'. Apakah Anda ingin menentukan sebuah tindakan sekarang?</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"Untuk menggunakan panggilan cepat, pertama matikan mode Pesawat."</string>
+ <string name="msim_ime_dialog_title">Identifikasi perangkat</string>
+ <string name="multi_sim_slot_name">SIM <xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">Semua SIM</string>
+ <string name="yes">Ya</string>
+ <string name="no">Tidak</string>
+ <string name="call_duration_active">Durasi aktif:</string>
+ <string name="call_duration_call_out">Durasi panggilan:</string>
+ <string name="call_log_all_calls_header">Semua panggilan</string>
</resources>
diff --git a/res/values-it/cm_caf.xml b/res/values-it/cm_caf.xml
deleted file mode 100644
index 8f42d0aa8..000000000
--- a/res/values-it/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Cerca nel registro chiamate</string>
-</resources>
diff --git a/res/values-it/cm_strings.xml b/res/values-it/cm_strings.xml
index 4a73c3b07..d2188e101 100644
--- a/res/values-it/cm_strings.xml
+++ b/res/values-it/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Statistiche</string>
<string name="callStatsDetailTitle">Dettagli chiamate</string>
- <string name="call_stats">Statistiche</string>
- <string name="call_stats_refresh">Aggiorna</string>
- <string name="activity_title_call_stats">Statistiche</string>
<string name="call_stats_nav_all">Tutte</string>
<string name="call_stats_nav_incoming">Ricevute</string>
<string name="call_stats_nav_outgoing">Effettuate</string>
@@ -53,4 +50,23 @@
<string name="start_call_playback">Riproduci registrazione</string>
<string name="stop_call_playback">Ferma</string>
<string name="call_playback_error_message">Impossibile riprodurre la registrazione</string>
+ <string name="calllog_search_hint">Cerca nel registro chiamate</string>
+ <string name="video_call">Videochiamata</string>
+ <string name="video_call_settings">Impostazioni videochiamata</string>
+ <string name="description_videocall">Videochiamata <xliff:g id="name">%1$s</xliff:g></string>
+ <string name="speed_dial_settings">Impostazioni di composizione rapida</string>
+ <string name="speed_dial_not_set">(non impostato)</string>
+ <string name="speed_dial_replace">Sostituisci</string>
+ <string name="speed_dial_delete">Elimina</string>
+ <string name="speed_dial_unassigned_dialog_title">Pulsante non assegnato</string>
+ <string name="speed_dial_unassigned_dialog_message">Nessuna azione di composizione rapida assegnata al pulsante numero <xliff:g id="number">%s</xliff:g>. Vuoi assegnare un\'azione ora?</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"Per usare la composizione rapida occorre disattivare la modalità aereo."</string>
+ <string name="msim_ime_dialog_title">Identificativo del dispositivo</string>
+ <string name="multi_sim_slot_name">SIM <xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">Tutte le SIM</string>
+ <string name="yes">Si</string>
+ <string name="no">No</string>
+ <string name="call_duration_active">Durata corrente:</string>
+ <string name="call_duration_call_out">Durata della chiamata:</string>
+ <string name="call_log_all_calls_header">Tutte le chiamate</string>
</resources>
diff --git a/res/values-iw/cm_caf.xml b/res/values-iw/cm_caf.xml
deleted file mode 100644
index d08badfd0..000000000
--- a/res/values-iw/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">חיפוש ביומן שיחות</string>
-</resources>
diff --git a/res/values-iw/cm_strings.xml b/res/values-iw/cm_strings.xml
index 41701bef9..23862f852 100644
--- a/res/values-iw/cm_strings.xml
+++ b/res/values-iw/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">סטטיסטיקה</string>
<string name="callStatsDetailTitle">פרטים של סטטיסטיקת שיחות</string>
- <string name="call_stats">סטטיסטיקת שיחות</string>
- <string name="call_stats_refresh">רענן</string>
- <string name="activity_title_call_stats">סטטיסטיקת שיחות</string>
<string name="call_stats_nav_all">הכל</string>
<string name="call_stats_nav_incoming">נכנסות</string>
<string name="call_stats_nav_outgoing">יוצאות</string>
diff --git a/res/values-ja/cm_caf.xml b/res/values-ja/cm_caf.xml
deleted file mode 100644
index bdabb08aa..000000000
--- a/res/values-ja/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">通話履歴を検索</string>
-</resources>
diff --git a/res/values-ja/cm_strings.xml b/res/values-ja/cm_strings.xml
index 1084d6575..48bf66d4c 100644
--- a/res/values-ja/cm_strings.xml
+++ b/res/values-ja/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">統計情報</string>
<string name="callStatsDetailTitle">通話の統計情報の詳細</string>
- <string name="call_stats">通話の統計情報</string>
- <string name="call_stats_refresh">更新</string>
- <string name="activity_title_call_stats">通話の統計情報</string>
<string name="call_stats_nav_all">すべて</string>
<string name="call_stats_nav_incoming">着信</string>
<string name="call_stats_nav_outgoing">発信</string>
@@ -53,4 +50,23 @@
<string name="start_call_playback">録音を再生</string>
<string name="stop_call_playback">停止</string>
<string name="call_playback_error_message">録音を再生できませんでした</string>
+ <string name="calllog_search_hint">通話履歴を検索</string>
+ <string name="video_call">ビデオ通話</string>
+ <string name="video_call_settings">ビデオ通話の設定</string>
+ <string name="description_videocall">ビデオ通話 <xliff:g id="name">%1$s</xliff:g></string>
+ <string name="speed_dial_settings">スピードダイヤルの設定</string>
+ <string name="speed_dial_not_set">(未設定)</string>
+ <string name="speed_dial_replace">書き換える</string>
+ <string name="speed_dial_delete">削除</string>
+ <string name="speed_dial_unassigned_dialog_title">キーが割り当てられていません</string>
+ <string name="speed_dial_unassigned_dialog_message"><xliff:g id="number">%s</xliff:g>番のキーにスピードダイアルの動作が割り当てられていません。動作を割り当てますか?</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"スピードダイヤルを使用するには、機内モードをOFFにしてください。"</string>
+ <string name="msim_ime_dialog_title">端末識別子</string>
+ <string name="multi_sim_slot_name">SIM <xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">すべてのSIM</string>
+ <string name="yes">はい</string>
+ <string name="no">いいえ</string>
+ <string name="call_duration_active">アクティブ状態の長さ:</string>
+ <string name="call_duration_call_out">呼び出しの長さ:</string>
+ <string name="call_log_all_calls_header">すべての通話</string>
</resources>
diff --git a/res/values-ko/cm_caf.xml b/res/values-ko/cm_caf.xml
deleted file mode 100644
index 359858e6f..000000000
--- a/res/values-ko/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">통화 기록 검색</string>
-</resources>
diff --git a/res/values-ko/cm_strings.xml b/res/values-ko/cm_strings.xml
index eee8ab3f6..68ed63cad 100644
--- a/res/values-ko/cm_strings.xml
+++ b/res/values-ko/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">통계</string>
<string name="callStatsDetailTitle">전화 통계 정보</string>
- <string name="call_stats">전화 통계</string>
- <string name="call_stats_refresh">새로 고침</string>
- <string name="activity_title_call_stats">전화 통계</string>
<string name="call_stats_nav_all">전부</string>
<string name="call_stats_nav_incoming">수신</string>
<string name="call_stats_nav_outgoing">발신</string>
@@ -53,4 +50,23 @@
<string name="start_call_playback">녹음 재생</string>
<string name="stop_call_playback">정지</string>
<string name="call_playback_error_message">녹음을 재생할 수 없습니다</string>
+ <string name="calllog_search_hint">통화 기록 검색</string>
+ <string name="video_call">영상통화</string>
+ <string name="video_call_settings">영상통화 설정</string>
+ <string name="description_videocall">영상 통화 <xliff:g id="name">%1$s</xliff:g></string>
+ <string name="speed_dial_settings">스피드 다이얼 설정</string>
+ <string name="speed_dial_not_set">(설정되지 않음)</string>
+ <string name="speed_dial_replace">바꾸기</string>
+ <string name="speed_dial_delete">삭제</string>
+ <string name="speed_dial_unassigned_dialog_title">할당되지 않은 키</string>
+ <string name="speed_dial_unassigned_dialog_message">\'<xliff:g id="number">%s</xliff:g>\' 키에 스피드 다이얼 동작이 할당되어 있지 않습니다. 지금 동작을 할당할까요?</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"스피드 다이얼을 사용하려면 비행기 모드를 해제하십시오."</string>
+ <string name="msim_ime_dialog_title">장치 식별자</string>
+ <string name="multi_sim_slot_name">SIM <xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">모든 SIM</string>
+ <string name="yes">예</string>
+ <string name="no">아니오</string>
+ <string name="call_duration_active">활성 통화 시간:</string>
+ <string name="call_duration_call_out">통화 시간:</string>
+ <string name="call_log_all_calls_header">모든 통화</string>
</resources>
diff --git a/res/values-ku/cm_caf.xml b/res/values-ku/cm_caf.xml
deleted file mode 100644
index a9292c391..000000000
--- a/res/values-ku/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">گەڕان بۆ مێژوی پەیوەندی</string>
-</resources>
diff --git a/res/values-ku/cm_strings.xml b/res/values-ku/cm_strings.xml
index 36c6b11b1..6b1db90b6 100644
--- a/res/values-ku/cm_strings.xml
+++ b/res/values-ku/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">سەرژمێرەیەکان</string>
<string name="callStatsDetailTitle">زانیاری پەیوەندی</string>
- <string name="call_stats">سەرژمێریەکانی پەیوەندی</string>
- <string name="call_stats_refresh">تازەکردنەوە</string>
- <string name="activity_title_call_stats">سەرژمێریەکانی پەیوەندی</string>
<string name="call_stats_nav_all">هەمووی</string>
<string name="call_stats_nav_incoming">هاتوو</string>
<string name="call_stats_nav_outgoing">ڕۆیشتوو</string>
diff --git a/res/values-ku/strings.xml b/res/values-ku/strings.xml
index 351dc567e..d5d425f7f 100644
--- a/res/values-ku/strings.xml
+++ b/res/values-ku/strings.xml
@@ -108,13 +108,13 @@
<string name="type_incoming">په‌یوه‌ندی هاتوو</string>
<string name="type_outgoing">په‌یوه‌ندی ڕۆشتوو</string>
<string name="type_missed">په‌یوه‌ندی وه‌ڵامنه‌دراوه‌</string>
- <string name="type_voicemail">دەنگەنامە</string>
+ <string name="type_voicemail">پۆستی دەنگی</string>
<string name="actionIncomingCall">په‌یوه‌ندی هاتوو</string>
<string name="description_call_log_play_button">لێدانی ده‌نگه‌نامه‌</string>
<string name="description_call_log_incoming_call">په‌یوه‌ندی هاتوو</string>
<string name="description_call_log_outgoing_call">په‌یوه‌ندی ڕۆشتوو</string>
<string name="description_call_log_missed_call">په‌یوه‌ندی وه‌ڵامنه‌دراوه‌</string>
- <string name="description_call_log_voicemail">دەنگەنامە</string>
+ <string name="description_call_log_voicemail">پۆستی دەنگی</string>
<string name="description_add_contact">زیادکردن بۆ پەیوەندەکان</string>
<string name="description_view_contact">بینینی په‌یوه‌ندی <xliff:g id="name">%1$s</xliff:g></string>
<string name="description_call">په‌یوه‌ندی <xliff:g id="name">%1$s</xliff:g></string>
@@ -134,7 +134,7 @@
<string name="description_start_voice_search">ده‌ستپێکردن ده‌نگه‌ گه‌ڕان</string>
<string name="menu_callNumber">په‌یوه‌ندی <xliff:g id="number">%s</xliff:g></string>
<string name="unknown">نەناسراو</string>
- <string name="voicemail">دەنگەنامە</string>
+ <string name="voicemail">پۆستی دەنگی</string>
<string name="private_num">ژمارەی تایبەتی</string>
<string name="payphone">کڕینی مۆبایل</string>
<string name="dialerKeyboardHintText">به‌کارهێنانی ته‌خته‌کلیل بۆ لێدانی ژماره‌</string>
@@ -151,7 +151,7 @@
<string name="add_contact_not_available">دوباره‌کارکردنه‌وه‌ی به‌رنامه‌ی خه‌ڵک بۆ ئه‌م خزمه‌تگوزارییه‌.</string>
<string name="voice_search_not_available">گه‌ڕانی ده‌نگی ئاماده‌نییه‌.</string>
<string name="dialer_hint_find_contact">ناوێک یان ژماره‌یه‌ک بنووسه‌</string>
- <string name="call_log_all_title">هەموو</string>
+ <string name="call_log_all_title">گشت</string>
<string name="call_log_missed_title">وەڵام نەدراوه‌</string>
<string name="call_log_activity_title_font_family">sans-serif-light</string>
<string name="show_all_contacts_title_font_family">sans-serif-light</string>
diff --git a/res/values-land/dimens.xml b/res/values-land/dimens.xml
new file mode 100644
index 000000000..cba9d97d0
--- /dev/null
+++ b/res/values-land/dimens.xml
@@ -0,0 +1,19 @@
+<!--
+ Copyright (C) 2012 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>
+ <item name="call_detail_header_photo_ratio" type="dimen" format="float">0.25</item>
+</resources>
diff --git a/res/values-land/styles.xml b/res/values-land/styles.xml
index 1388a17f1..ef640ec0c 100644
--- a/res/values-land/styles.xml
+++ b/res/values-land/styles.xml
@@ -15,8 +15,7 @@
-->
<resources>
-
- <style name="FragmentActionBarPadding">
- <item name="android:paddingBottom">0dp</item>
+ <style name="CallLogFragment">
+ <item name="android:paddingTop">0dp</item>
</style>
</resources>
diff --git a/res/values-lb/cm_arrays.xml b/res/values-lb/cm_arrays.xml
index 58fdc551e..4ff7fd299 100644
--- a/res/values-lb/cm_arrays.xml
+++ b/res/values-lb/cm_arrays.xml
@@ -20,11 +20,9 @@
<item><xliff:g id="seconds" example="2 secs">%3$s</xliff:g></item>
<item><xliff:g id="minutes" example="2 mins">%2$s</xliff:g></item>
<item><xliff:g id="minutes" example="2 mins">%2$s</xliff:g>, <xliff:g id="seconds" example="2 secs">%3$s</xliff:g></item>
- <item>
- <xliff:g id="hours" example="2 hrs">%1$s</xliff:g>
- </item>
+ <item><xliff:g id="hours" example="2 hrs">%1$s</xliff:g></item>
<item><xliff:g id="hours" example="2 hrs">%1$s</xliff:g>, <xliff:g id="seconds" example="2 secs">%3$s</xliff:g></item>
- <item><xliff:g id="hours" example="2 hrs">%1$s</xliff:g> <xliff:g id="minutes" example="2 mins">%2$s</xliff:g></item>
- <item><xliff:g id="hours" example="2 hrs">%1$s</xliff:g> <xliff:g id="minutes" example="2 mins">%2$s</xliff:g> <xliff:g id="seconds" example="2 secs">%3$s</xliff:g></item>
+ <item><xliff:g id="hours" example="2 hrs">%1$s</xliff:g>, <xliff:g id="minutes" example="2 mins">%2$s</xliff:g></item>
+ <item><xliff:g id="hours" example="2 hrs">%1$s</xliff:g>, <xliff:g id="minutes" example="2 mins">%2$s</xliff:g>, <xliff:g id="seconds" example="2 secs">%3$s</xliff:g></item>
</string-array>
</resources>
diff --git a/res/values-lb/strings.xml b/res/values-lb/strings.xml
index ec16710b6..94d6651a5 100644
--- a/res/values-lb/strings.xml
+++ b/res/values-lb/strings.xml
@@ -51,6 +51,9 @@
<string name="description_image_button_pound">Pond</string>
<string name="description_search_button">sichen</string>
<string name="description_dial_button">wielen</string>
+ <string name="description_delete_button">Récktast</string>
+ <string name="action_menu_call_history_description">Urufffhistorique</string>
+ <string name="action_menu_overflow_description" msgid="2295659037509008453">Méi Optiounen</string>
<string name="menu_copy">Kopéieren</string>
<string name="call_settings">Astellungen</string>
<string name="menu_newContact">Neie Kontakt</string>
@@ -63,6 +66,7 @@
<string name="imei">IMEI</string>
<string name="meid">MEID</string>
<string name="call_log_all_title">All</string>
+ <string name="show_all_contacts">All d\'Kontakter uweisen</string>
<string name="call_log_activity_title">Historique</string>
<string name="dialpad_0_number">0</string>
<string name="dialpad_1_number">1</string>
diff --git a/res/values-lt/cm_caf.xml b/res/values-lt/cm_caf.xml
deleted file mode 100644
index 02cca6659..000000000
--- a/res/values-lt/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Ieškoti skambučių žurnalo</string>
-</resources>
diff --git a/res/values-lt/cm_strings.xml b/res/values-lt/cm_strings.xml
index ca8b53f02..8546544cd 100644
--- a/res/values-lt/cm_strings.xml
+++ b/res/values-lt/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Statistika</string>
<string name="callStatsDetailTitle">Skambučių statistikos informacija</string>
- <string name="call_stats">Skambučių statistika</string>
- <string name="call_stats_refresh">Atnaujinti</string>
- <string name="activity_title_call_stats">Skambučių statistika</string>
<string name="call_stats_nav_all">Visi</string>
<string name="call_stats_nav_incoming">Įeinantys</string>
<string name="call_stats_nav_outgoing">Išeinantys</string>
@@ -53,4 +50,23 @@
<string name="start_call_playback">Paleisti įrašą</string>
<string name="stop_call_playback">Sustabdyti</string>
<string name="call_playback_error_message">Nepavyko paleisti įrašo</string>
+ <string name="calllog_search_hint">Ieškoti skambučių žurnalo</string>
+ <string name="video_call">Vaizdo skambutis</string>
+ <string name="video_call_settings">Vaizdo skambučio nustatymai</string>
+ <string name="description_videocall">Vaizdo skambutis <xliff:g id="name">%1$s</xliff:g></string>
+ <string name="speed_dial_settings">Greitojo rinkimo nustatymai</string>
+ <string name="speed_dial_not_set">(nenustatyta)</string>
+ <string name="speed_dial_replace">Pakeisti</string>
+ <string name="speed_dial_delete">Ištrinti</string>
+ <string name="speed_dial_unassigned_dialog_title">Klavišas nepriskirtas</string>
+ <string name="speed_dial_unassigned_dialog_message">Nėra priskirto greitojo rinkimo numerio klavišui „<xliff:g id="number">%s</xliff:g>“. Ar norite priskirtį veiksmą dabar?</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"Norėdami naudotis greituoju rinkimu, pirmiausiai išjunkite lėktuvo režimą."</string>
+ <string name="msim_ime_dialog_title">Įrenginio identifikavimo kodas</string>
+ <string name="multi_sim_slot_name">SIM <xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">Visos SIM</string>
+ <string name="yes">Taip</string>
+ <string name="no">Ne</string>
+ <string name="call_duration_active">Aktyvi trukmė:</string>
+ <string name="call_duration_call_out">Skambučio trukmė:</string>
+ <string name="call_log_all_calls_header">Visi skambučiai</string>
</resources>
diff --git a/res/values-nb/cm_caf.xml b/res/values-nb/cm_caf.xml
deleted file mode 100644
index a3e60ec12..000000000
--- a/res/values-nb/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Søk i samtaleloggen</string>
-</resources>
diff --git a/res/values-nb/cm_strings.xml b/res/values-nb/cm_strings.xml
index b709bca6e..e80b9f23f 100644
--- a/res/values-nb/cm_strings.xml
+++ b/res/values-nb/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Statistikk</string>
<string name="callStatsDetailTitle">Detaljer for samtalestatus</string>
- <string name="call_stats">Samtalestatistikk</string>
- <string name="call_stats_refresh">Oppdater</string>
- <string name="activity_title_call_stats">Samtalestatistikk</string>
<string name="call_stats_nav_all">Alle</string>
<string name="call_stats_nav_incoming">Innkommende</string>
<string name="call_stats_nav_outgoing">Utgående</string>
@@ -53,4 +50,23 @@
<string name="start_call_playback">Spill av opptak</string>
<string name="stop_call_playback">Stopp</string>
<string name="call_playback_error_message">Kunne ikke spille av opptak</string>
+ <string name="calllog_search_hint">Søk i samtaleloggen</string>
+ <string name="video_call">Videoanrop</string>
+ <string name="video_call_settings">Innstillinger for videoanrop</string>
+ <string name="description_videocall">Videoanrop <xliff:g id="name">%1$s</xliff:g></string>
+ <string name="speed_dial_settings">Innstillinger for hurtigringing</string>
+ <string name="speed_dial_not_set">(ikke angitt)</string>
+ <string name="speed_dial_replace">Erstatt</string>
+ <string name="speed_dial_delete">Slett</string>
+ <string name="speed_dial_unassigned_dialog_title">Nøkkel utilordnet</string>
+ <string name="speed_dial_unassigned_dialog_message">Ingen hurtigringing er angitt til denne nummertasten \'<xliff:g id="number">%s</xliff:g>\'. Vil du angi ett nå?</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"For å bruke hurtigoppringing må du skru av flymodus."</string>
+ <string name="msim_ime_dialog_title">Enhetsidentifikator</string>
+ <string name="multi_sim_slot_name">SIM <xliff:g id="index"> %d </xliff:g></string>
+ <string name="call_log_show_all_slots">Alle SIM-kort</string>
+ <string name="yes">Ja</string>
+ <string name="no">Nei</string>
+ <string name="call_duration_active">Aktiv varighet:</string>
+ <string name="call_duration_call_out">Samtalevarighet:</string>
+ <string name="call_log_all_calls_header">Alle samtaler</string>
</resources>
diff --git a/res/values-nl/cm_caf.xml b/res/values-nl/cm_caf.xml
deleted file mode 100644
index ad5ed9dcf..000000000
--- a/res/values-nl/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Gespreksstatistieken doorzoeken</string>
-</resources>
diff --git a/res/values-nl/cm_strings.xml b/res/values-nl/cm_strings.xml
index 4d3c4109a..ab5d0af24 100644
--- a/res/values-nl/cm_strings.xml
+++ b/res/values-nl/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Statistieken</string>
<string name="callStatsDetailTitle">Gespreksstatistiekdetails</string>
- <string name="call_stats">Gespreksstatistieken</string>
- <string name="call_stats_refresh">Vernieuwen</string>
- <string name="activity_title_call_stats">Gespreksstatistieken</string>
<string name="call_stats_nav_all">Alles</string>
<string name="call_stats_nav_incoming">Inkomend</string>
<string name="call_stats_nav_outgoing">Uitgaand</string>
@@ -53,4 +50,23 @@
<string name="start_call_playback">Opname afspelen</string>
<string name="stop_call_playback">Stoppen</string>
<string name="call_playback_error_message">Opname afspelen mislukt</string>
+ <string name="calllog_search_hint">Gespreksstatistieken doorzoeken</string>
+ <string name="video_call">Videogesprek</string>
+ <string name="video_call_settings">Instellingen videogesprek</string>
+ <string name="description_videocall">Videogesprek <xliff:g id="name">%1$s</xliff:g></string>
+ <string name="speed_dial_settings">Instellingen snelkiesnummers</string>
+ <string name="speed_dial_not_set">(niet ingesteld)</string>
+ <string name="speed_dial_replace">Vervangen</string>
+ <string name="speed_dial_delete">Verwijderen</string>
+ <string name="speed_dial_unassigned_dialog_title">Toets niet toegewezen</string>
+ <string name="speed_dial_unassigned_dialog_message">Er is geen contact toegewezen aan snelkiesnummer \'<xliff:g id="number">%s</xliff:g>\'. Wilt u nu een contact toewijzen?</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"Om snelkiesnummers te gebruiken dient u eerst Vliegmodus uit te schakelen."</string>
+ <string name="msim_ime_dialog_title">Apparaat-ID</string>
+ <string name="multi_sim_slot_name">SIM <xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">Alle simkaarten</string>
+ <string name="yes">Ja</string>
+ <string name="no">Nee</string>
+ <string name="call_duration_active">Actieve duur:</string>
+ <string name="call_duration_call_out">Gespreksduur:</string>
+ <string name="call_log_all_calls_header">Alle gesprekken</string>
</resources>
diff --git a/res/values-pl/cm_caf.xml b/res/values-pl/cm_caf.xml
deleted file mode 100644
index 6f3b736f8..000000000
--- a/res/values-pl/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Szukaj w historii połączeń</string>
-</resources>
diff --git a/res/values-pl/cm_strings.xml b/res/values-pl/cm_strings.xml
index a53e4c0fd..9c4ecbc89 100644
--- a/res/values-pl/cm_strings.xml
+++ b/res/values-pl/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Statystyki</string>
<string name="callStatsDetailTitle">Szczegółowe statystyki połączeń</string>
- <string name="call_stats">Statystyki połączeń</string>
- <string name="call_stats_refresh">Odśwież</string>
- <string name="activity_title_call_stats">Statystyki połączeń</string>
<string name="call_stats_nav_all">Wszystkie</string>
<string name="call_stats_nav_incoming">Przychodzące</string>
<string name="call_stats_nav_outgoing">Wychodzące</string>
@@ -53,4 +50,23 @@
<string name="start_call_playback">Rozpocznij nagrywanie</string>
<string name="stop_call_playback">Zatrzymaj</string>
<string name="call_playback_error_message">Nie udało się zarejestrować nagrania</string>
+ <string name="calllog_search_hint">Szukaj w historii połączeń</string>
+ <string name="video_call">Połączenie wideo</string>
+ <string name="video_call_settings">Ustawienia połączeń wideo</string>
+ <string name="description_videocall">Połączenie wideo <xliff:g id="name">%1$s</xliff:g></string>
+ <string name="speed_dial_settings">Ustawienia szybkiego wybierania</string>
+ <string name="speed_dial_not_set">(nieustawione)</string>
+ <string name="speed_dial_replace">Zastąp</string>
+ <string name="speed_dial_delete">Usuń</string>
+ <string name="speed_dial_unassigned_dialog_title">Klawisz nieprzypisany</string>
+ <string name="speed_dial_unassigned_dialog_message">Brak akcji szybkiego wybierania dla przycisku numer \'<xliff:g id="number">%s</xliff:g>\'. Chcesz przypisać akcję teraz?</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"Aby korzystać z szybkiego wybierania, najpierw należy wyłączyć tryb samolotowy."</string>
+ <string name="msim_ime_dialog_title">Identyfikator urządzenia</string>
+ <string name="multi_sim_slot_name">SIM <xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">Wszystkie karty SIM</string>
+ <string name="yes">Tak</string>
+ <string name="no">Nie</string>
+ <string name="call_duration_active">Aktywny czas trwania:</string>
+ <string name="call_duration_call_out">Czas trwania połączenia:</string>
+ <string name="call_log_all_calls_header">Wszystkie połączenia</string>
</resources>
diff --git a/res/values-pt-rBR/cm_caf.xml b/res/values-pt-rBR/cm_caf.xml
deleted file mode 100644
index d3a5b9af1..000000000
--- a/res/values-pt-rBR/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Pesquisar no registro de chamadas</string>
-</resources>
diff --git a/res/values-pt-rBR/cm_strings.xml b/res/values-pt-rBR/cm_strings.xml
index b84a83c9e..a55521248 100644
--- a/res/values-pt-rBR/cm_strings.xml
+++ b/res/values-pt-rBR/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Estatísticas</string>
<string name="callStatsDetailTitle">Estatística de chamadas detalhadas</string>
- <string name="call_stats">Estatísticas de chamadas</string>
- <string name="call_stats_refresh">Atualizar</string>
- <string name="activity_title_call_stats">Estatísticas de chamadas</string>
<string name="call_stats_nav_all">Todos</string>
<string name="call_stats_nav_incoming">Recebidas</string>
<string name="call_stats_nav_outgoing">Enviadas</string>
@@ -53,4 +50,23 @@
<string name="start_call_playback">Reproduzir a gravação</string>
<string name="stop_call_playback">Parar</string>
<string name="call_playback_error_message">Não conseguiram reproduzir a gravação</string>
+ <string name="calllog_search_hint">Pesquisar no registro de chamadas</string>
+ <string name="video_call">Vídeo chamada</string>
+ <string name="video_call_settings">Configurações de vídeo chamada</string>
+ <string name="description_videocall">Vídeo chamada <xliff:g id="name">%1$s</xliff:g></string>
+ <string name="speed_dial_settings">Configurações de discagem rápida</string>
+ <string name="speed_dial_not_set">(não definido)</string>
+ <string name="speed_dial_replace">Substituir</string>
+ <string name="speed_dial_delete">Apagar</string>
+ <string name="speed_dial_unassigned_dialog_title">Tecla não atribuída</string>
+ <string name="speed_dial_unassigned_dialog_message">Nenhuma ação de discagem rápida está atribuída à tecla \'<xliff:g id="number">%s</xliff:g>\'. Deseja atribuir uma ação agora?</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"Para utilizar a discagem rápida, primeiro desligue o modo avião."</string>
+ <string name="msim_ime_dialog_title">Identificador de dispositivo</string>
+ <string name="multi_sim_slot_name">SIM <xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">Todos os cartões SIM</string>
+ <string name="yes">Sim</string>
+ <string name="no">Não</string>
+ <string name="call_duration_active">Duração de atividade:</string>
+ <string name="call_duration_call_out">Duração de chamada:</string>
+ <string name="call_log_all_calls_header">Todas as chamadas</string>
</resources>
diff --git a/res/values-pt-rPT/cm_caf.xml b/res/values-pt-rPT/cm_caf.xml
deleted file mode 100644
index e499ebf16..000000000
--- a/res/values-pt-rPT/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Pesquisar registo de chamadas</string>
-</resources>
diff --git a/res/values-pt-rPT/cm_strings.xml b/res/values-pt-rPT/cm_strings.xml
index 42088018f..6991c00c1 100644
--- a/res/values-pt-rPT/cm_strings.xml
+++ b/res/values-pt-rPT/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Estatísticas</string>
<string name="callStatsDetailTitle">Detalhes de estatísticas de chamadas</string>
- <string name="call_stats">Estatísticas de chamadas</string>
- <string name="call_stats_refresh">Atualizar</string>
- <string name="activity_title_call_stats">Estatísticas de chamadas</string>
<string name="call_stats_nav_all">Todas</string>
<string name="call_stats_nav_incoming">Recebidas</string>
<string name="call_stats_nav_outgoing">Realizadas</string>
@@ -53,4 +50,23 @@
<string name="start_call_playback">Reproduzir a gravação</string>
<string name="stop_call_playback">Parar</string>
<string name="call_playback_error_message">Falha ao reproduzir a gravação</string>
+ <string name="calllog_search_hint">Pesquisar registo de chamadas</string>
+ <string name="video_call">Chamada de vídeo</string>
+ <string name="video_call_settings">Definições de chamada de vídeo</string>
+ <string name="description_videocall">Chamada de vídeo <xliff:g id="name">%1$s</xliff:g></string>
+ <string name="speed_dial_settings">Definições de marcação rápida</string>
+ <string name="speed_dial_not_set">(não definido)</string>
+ <string name="speed_dial_replace">Substituir</string>
+ <string name="speed_dial_delete">Apagar</string>
+ <string name="speed_dial_unassigned_dialog_title">Tecla não atribuída</string>
+ <string name="speed_dial_unassigned_dialog_message">Nenhuma ação de marcação rápida está atribuída à tecla número \'<xliff:g id="number">%s</xliff:g>\'. Quer atribuir uma ação agora?</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"Para utilizar a marcação rápida, primeiro desligue o modo avião."</string>
+ <string name="msim_ime_dialog_title">Identificador de dispositivo</string>
+ <string name="multi_sim_slot_name">SIM <xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">Todos os cartões SIM</string>
+ <string name="yes">Sim</string>
+ <string name="no">Não</string>
+ <string name="call_duration_active">Duração ativa:</string>
+ <string name="call_duration_call_out">Duração da chamada:</string>
+ <string name="call_log_all_calls_header">Todas as chamadas</string>
</resources>
diff --git a/res/values-ro/cm_caf.xml b/res/values-ro/cm_caf.xml
deleted file mode 100644
index 3cf0d87bc..000000000
--- a/res/values-ro/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Căutare în jurnalul de apeluri</string>
-</resources>
diff --git a/res/values-ro/cm_strings.xml b/res/values-ro/cm_strings.xml
index 8b3300bcd..1e754223e 100644
--- a/res/values-ro/cm_strings.xml
+++ b/res/values-ro/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Statistici</string>
<string name="callStatsDetailTitle">Detalii statistică apel</string>
- <string name="call_stats">Statistici apel</string>
- <string name="call_stats_refresh">Reîmprospătare</string>
- <string name="activity_title_call_stats">Statistici apel</string>
<string name="call_stats_nav_all">Toate</string>
<string name="call_stats_nav_incoming">Primite</string>
<string name="call_stats_nav_outgoing">Efectuate</string>
diff --git a/res/values-ru/cm_arrays.xml b/res/values-ru/cm_arrays.xml
index 4ff7fd299..9202571e0 100644
--- a/res/values-ru/cm_arrays.xml
+++ b/res/values-ru/cm_arrays.xml
@@ -19,10 +19,10 @@
<string-array name="call_stats_duration">
<item><xliff:g id="seconds" example="2 secs">%3$s</xliff:g></item>
<item><xliff:g id="minutes" example="2 mins">%2$s</xliff:g></item>
- <item><xliff:g id="minutes" example="2 mins">%2$s</xliff:g>, <xliff:g id="seconds" example="2 secs">%3$s</xliff:g></item>
+ <item><xliff:g id="minutes" example="2 mins">%2$s</xliff:g> <xliff:g id="seconds" example="2 secs">%3$s</xliff:g></item>
<item><xliff:g id="hours" example="2 hrs">%1$s</xliff:g></item>
- <item><xliff:g id="hours" example="2 hrs">%1$s</xliff:g>, <xliff:g id="seconds" example="2 secs">%3$s</xliff:g></item>
- <item><xliff:g id="hours" example="2 hrs">%1$s</xliff:g>, <xliff:g id="minutes" example="2 mins">%2$s</xliff:g></item>
- <item><xliff:g id="hours" example="2 hrs">%1$s</xliff:g>, <xliff:g id="minutes" example="2 mins">%2$s</xliff:g>, <xliff:g id="seconds" example="2 secs">%3$s</xliff:g></item>
+ <item><xliff:g id="hours" example="2 hrs">%1$s</xliff:g> <xliff:g id="seconds" example="2 secs">%3$s</xliff:g></item>
+ <item><xliff:g id="hours" example="2 hrs">%1$s</xliff:g> <xliff:g id="minutes" example="2 mins">%2$s</xliff:g></item>
+ <item><xliff:g id="hours" example="2 hrs">%1$s</xliff:g> <xliff:g id="minutes" example="2 mins">%2$s</xliff:g> <xliff:g id="seconds" example="2 secs">%3$s</xliff:g></item>
</string-array>
</resources>
diff --git a/res/values-ru/cm_caf.xml b/res/values-ru/cm_caf.xml
deleted file mode 100644
index 8af0a8f72..000000000
--- a/res/values-ru/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Искать в журнале вызовов</string>
-</resources>
diff --git a/res/values-ru/cm_plurals.xml b/res/values-ru/cm_plurals.xml
index 48e0d6f72..979db0ad4 100644
--- a/res/values-ru/cm_plurals.xml
+++ b/res/values-ru/cm_plurals.xml
@@ -32,8 +32,8 @@
<item quantity="other">%d сек.</item>
</plurals>
<plurals name="call">
- <item quantity="one">%d звонок</item>
- <item quantity="few">%d звонка</item>
- <item quantity="other">%d звонков</item>
+ <item quantity="one">%d вызов</item>
+ <item quantity="few">%d вызова</item>
+ <item quantity="other">%d вызовов</item>
</plurals>
</resources>
diff --git a/res/values-ru/cm_strings.xml b/res/values-ru/cm_strings.xml
index 6eb14ca6e..15891db20 100644
--- a/res/values-ru/cm_strings.xml
+++ b/res/values-ru/cm_strings.xml
@@ -17,10 +17,7 @@
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Статистика</string>
- <string name="callStatsDetailTitle">Статистика звонков</string>
- <string name="call_stats">Статистика звонков</string>
- <string name="call_stats_refresh">Обновить</string>
- <string name="activity_title_call_stats">Статистика звонков</string>
+ <string name="callStatsDetailTitle">Статистика вызовов</string>
<string name="call_stats_nav_all">Все</string>
<string name="call_stats_nav_incoming">Входящие</string>
<string name="call_stats_nav_outgoing">Исходящие</string>
@@ -53,4 +50,23 @@
<string name="start_call_playback">Воспроизвести запись</string>
<string name="stop_call_playback">Остановить</string>
<string name="call_playback_error_message">Не удалось воспроизвести запись</string>
+ <string name="calllog_search_hint">Искать в журнале вызовов</string>
+ <string name="video_call">Видеовызов</string>
+ <string name="video_call_settings">Настройки видеовызовов</string>
+ <string name="description_videocall">Видеовызов <xliff:g id="name">%1$s</xliff:g></string>
+ <string name="speed_dial_settings">Настройки быстрого набора</string>
+ <string name="speed_dial_not_set">(не установлено)</string>
+ <string name="speed_dial_replace">Изменить</string>
+ <string name="speed_dial_delete">Удалить</string>
+ <string name="speed_dial_unassigned_dialog_title">Нет назначенного номера</string>
+ <string name="speed_dial_unassigned_dialog_message">Клавише «<xliff:g id="number">%s</xliff:g>» не присвоен номер быстрого набора. Назначить его?</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"Чтобы использовать Быстрый набор, выключите режим полёта."</string>
+ <string name="msim_ime_dialog_title">Идентификатор устройства</string>
+ <string name="multi_sim_slot_name">SIM <xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">Все SIM-карты</string>
+ <string name="yes">Да</string>
+ <string name="no">Нет</string>
+ <string name="call_duration_active">Длительность активн.:</string>
+ <string name="call_duration_call_out">Длительность вызова:</string>
+ <string name="call_log_all_calls_header">Все вызовы</string>
</resources>
diff --git a/res/values-si/cm_caf.xml b/res/values-si/cm_caf.xml
deleted file mode 100644
index 4aa614110..000000000
--- a/res/values-si/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">ඇමතුම් ලොගය සොයන්න</string>
-</resources>
diff --git a/res/values-si/cm_strings.xml b/res/values-si/cm_strings.xml
index 7708b8fb9..874e8bb50 100644
--- a/res/values-si/cm_strings.xml
+++ b/res/values-si/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">සංඛ්‍යාති</string>
<string name="callStatsDetailTitle">ඇමතුම් තත්ව තොරතුරු</string>
- <string name="call_stats">ඇමතුම් සංඛ්‍යාති</string>
- <string name="call_stats_refresh">නැවුම් කරන්න</string>
- <string name="activity_title_call_stats">ඇමතුම් සංඛ්‍යාති</string>
<string name="call_stats_nav_all">සියලු</string>
<string name="call_stats_nav_incoming">පැමිණි</string>
<string name="call_stats_nav_outgoing">ලබාගත්</string>
@@ -53,4 +50,23 @@
<string name="start_call_playback">රෙකෝඩිතය ධාවනය කරන්න</string>
<string name="stop_call_playback">නවත්වන්න</string>
<string name="call_playback_error_message">රෙකෝඩිතය ධාවනයට අසමත් විය</string>
+ <string name="calllog_search_hint">ඇමතුම් ලොගය සොයන්න</string>
+ <string name="video_call">වීඩියෝ ඇමතුම</string>
+ <string name="video_call_settings">වීඩියෝ ඇමතුම් සැකසීම්</string>
+ <string name="description_videocall">වීඩියෝ ඇමතුම <xliff:g id="name">%1$s</xliff:g></string>
+ <string name="speed_dial_settings">ඉක්මන් ඩයල් කිරීමේ සැකසීම්</string>
+ <string name="speed_dial_not_set">(සකසා නැත)</string>
+ <string name="speed_dial_replace">ප්‍රතිස්ථාපනය</string>
+ <string name="speed_dial_delete">මකන්න</string>
+ <string name="speed_dial_unassigned_dialog_title">යතුර පවරා නොමැත</string>
+ <string name="speed_dial_unassigned_dialog_message">\'<xliff:g id="number">%s</xliff:g>\' අංක යතුර සඳහා ඉක්මන් ඩයල් කිරීමේ ක්‍රියාවක් පවරා නැත. ඔබට දැන් ක්‍රියාවක් පැවරීමට අවශ්‍යද?</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"ඉක්මන් ඩයල් කිරීම භාවිතයට පෙරාතුව, අහස්යානා ප්‍රකාරය අක්‍රීය කරන්න."</string>
+ <string name="msim_ime_dialog_title">උපාංගයේ හඳුන්වනය</string>
+ <string name="multi_sim_slot_name">සිම් <xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">සියලුම් සිම්</string>
+ <string name="yes">ඔව්</string>
+ <string name="no">නැහැ</string>
+ <string name="call_duration_active">සක්‍රීය කාලමාත්‍රාව:</string>
+ <string name="call_duration_call_out">ඇමතුම් කාලමාත්‍රාව:</string>
+ <string name="call_log_all_calls_header">සියලුම ඇමතුම්</string>
</resources>
diff --git a/res/values-sk/cm_caf.xml b/res/values-sk/cm_caf.xml
deleted file mode 100644
index 37bfc381e..000000000
--- a/res/values-sk/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Prehľadať denník hovorov</string>
-</resources>
diff --git a/res/values-sk/cm_strings.xml b/res/values-sk/cm_strings.xml
index ed0275514..374a6ca75 100644
--- a/res/values-sk/cm_strings.xml
+++ b/res/values-sk/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Štatistiky</string>
<string name="callStatsDetailTitle">Podrobné štatistiky hovorov</string>
- <string name="call_stats">Štatistiky hovorov</string>
- <string name="call_stats_refresh">Obnoviť</string>
- <string name="activity_title_call_stats">Štatistiky hovorov</string>
<string name="call_stats_nav_all">Všetko</string>
<string name="call_stats_nav_incoming">Prichádzajúce</string>
<string name="call_stats_nav_outgoing">Odchádzajúce</string>
@@ -53,4 +50,23 @@
<string name="start_call_playback">Prehrať nahrávku</string>
<string name="stop_call_playback">Zastaviť</string>
<string name="call_playback_error_message">Prehrávanie nahrávky zlyhalo</string>
+ <string name="calllog_search_hint">Hľadať v denníku hovorov</string>
+ <string name="video_call">Videohovor</string>
+ <string name="video_call_settings">Nastavenia videohovorov</string>
+ <string name="description_videocall">Videohovor <xliff:g id="name">%1$s</xliff:g></string>
+ <string name="speed_dial_settings">Nastavenia rýchleho vytáčania</string>
+ <string name="speed_dial_not_set">(nenastavené)</string>
+ <string name="speed_dial_replace">Nahradiť</string>
+ <string name="speed_dial_delete">Odstrániť</string>
+ <string name="speed_dial_unassigned_dialog_title">Nepriradené tlačidlo</string>
+ <string name="speed_dial_unassigned_dialog_message">Nie je priradená žiadna akcia rýchleho vytáčania pre tlačidlo s číslom \'<xliff:g id="number">%s</xliff:g>\'. Chcete priradiť akciu teraz?</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"Pre použitie rýchleho vytáčania najprv vypnite režim V lietadle."</string>
+ <string name="msim_ime_dialog_title">Identifikátor zariadenia</string>
+ <string name="multi_sim_slot_name">SIM <xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">Všetky karty SIM</string>
+ <string name="yes">Áno</string>
+ <string name="no">Nie</string>
+ <string name="call_duration_active">Aktívna dĺžka:</string>
+ <string name="call_duration_call_out">Dĺžka hovoru:</string>
+ <string name="call_log_all_calls_header">Všetky hovory</string>
</resources>
diff --git a/res/values-sr/cm_caf.xml b/res/values-sr/cm_caf.xml
deleted file mode 100644
index 760d569c9..000000000
--- a/res/values-sr/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Претражи евиденцију позива</string>
-</resources>
diff --git a/res/values-sr/cm_strings.xml b/res/values-sr/cm_strings.xml
index 54c438a9e..7018fb879 100644
--- a/res/values-sr/cm_strings.xml
+++ b/res/values-sr/cm_strings.xml
@@ -17,10 +17,7 @@
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Статистика</string>
- <string name="callStatsDetailTitle">Детаљи статистике позива</string>
- <string name="call_stats">Статистика позива</string>
- <string name="call_stats_refresh">Освежи</string>
- <string name="activity_title_call_stats">Статистика позива</string>
+ <string name="callStatsDetailTitle">Детаљи статистике</string>
<string name="call_stats_nav_all">Сви</string>
<string name="call_stats_nav_incoming">Долазни</string>
<string name="call_stats_nav_outgoing">Одлазни</string>
@@ -53,4 +50,23 @@
<string name="start_call_playback">Пусти снимак</string>
<string name="stop_call_playback">Заустави</string>
<string name="call_playback_error_message">Пуштање снимка није успело</string>
+ <string name="calllog_search_hint">Претражи евиденцију позива</string>
+ <string name="video_call">Видео позив</string>
+ <string name="video_call_settings">Подешавања видео позива</string>
+ <string name="description_videocall">Видео позив <xliff:g id="name">%1$s</xliff:g></string>
+ <string name="speed_dial_settings">Подешавања брзог бирања</string>
+ <string name="speed_dial_not_set">(није постављено)</string>
+ <string name="speed_dial_replace">Замени</string>
+ <string name="speed_dial_delete">Избриши</string>
+ <string name="speed_dial_unassigned_dialog_title">Тастер недодељен</string>
+ <string name="speed_dial_unassigned_dialog_message">Нема додељене акције брзог бирања нумеричком тастеру \'<xliff:g id="number">%s</xliff:g>\'. Да ли желиш сада да доделиш акцију?</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"Да би користио брзо бирање, прво искључи режим рада у авиону."</string>
+ <string name="msim_ime_dialog_title">Идентификатор уређаја</string>
+ <string name="multi_sim_slot_name">SIM <xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">Све SIM картице</string>
+ <string name="yes">Да</string>
+ <string name="no">Не</string>
+ <string name="call_duration_active">Активно трајање:</string>
+ <string name="call_duration_call_out">Трајање позива:</string>
+ <string name="call_log_all_calls_header">Сви позиви</string>
</resources>
diff --git a/res/values-sv/cm_caf.xml b/res/values-sv/cm_caf.xml
deleted file mode 100644
index dbce01941..000000000
--- a/res/values-sv/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Sök i samtalslista</string>
-</resources>
diff --git a/res/values-sv/cm_strings.xml b/res/values-sv/cm_strings.xml
index c41b50d26..05d5ae1eb 100644
--- a/res/values-sv/cm_strings.xml
+++ b/res/values-sv/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Statistik</string>
<string name="callStatsDetailTitle">Detaljer för samtalsstatus</string>
- <string name="call_stats">Samtalsstatistik</string>
- <string name="call_stats_refresh">Uppdatera</string>
- <string name="activity_title_call_stats">Samtalsstatistik</string>
<string name="call_stats_nav_all">Alla</string>
<string name="call_stats_nav_incoming">Inkommande</string>
<string name="call_stats_nav_outgoing">Utgående</string>
diff --git a/res/values-th/cm_caf.xml b/res/values-th/cm_caf.xml
deleted file mode 100644
index 06079be92..000000000
--- a/res/values-th/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">ค้นหาประวัติการโทร</string>
-</resources>
diff --git a/res/values-th/cm_strings.xml b/res/values-th/cm_strings.xml
index aebd11dd6..660fcb3f6 100644
--- a/res/values-th/cm_strings.xml
+++ b/res/values-th/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">สถิติ</string>
<string name="callStatsDetailTitle">รายละเอียดสถิติการโทร</string>
- <string name="call_stats">สถิติการโทร</string>
- <string name="call_stats_refresh">โหลดใหม่</string>
- <string name="activity_title_call_stats">สถิติการโทร</string>
<string name="call_stats_nav_all">ทั้งหมด</string>
<string name="call_stats_nav_incoming">สายเรียกเข้า</string>
<string name="call_stats_nav_outgoing">สายโทรออก</string>
@@ -53,4 +50,23 @@
<string name="start_call_playback">เล่นบันทึก</string>
<string name="stop_call_playback">หยุด</string>
<string name="call_playback_error_message">ไม่สามารถเล่นบันทึกได้</string>
+ <string name="calllog_search_hint">ค้นหาประวัติการโทร</string>
+ <string name="video_call">สนทนาวิดีโอ</string>
+ <string name="video_call_settings">ตั้งค่าการสนทนาวีดีโอ</string>
+ <string name="description_videocall">สนทนาวิดีโอ <xliff:g id="name">%1$s</xliff:g></string>
+ <string name="speed_dial_settings">ตั้งค่าการโทรอย่างรวดเร็ว</string>
+ <string name="speed_dial_not_set">(ไม่ได้กำหนด)</string>
+ <string name="speed_dial_replace">แทน​ที่</string>
+ <string name="speed_dial_delete">ลบ</string>
+ <string name="speed_dial_unassigned_dialog_title">ไม่ได้ระบุปุ่ม</string>
+ <string name="speed_dial_unassigned_dialog_message">ไม่ได้ตั้งการโทรอย่างรวดเร็วไว้บนปุ่ม \'<xliff:g id="number">%s</xliff:g>\' คุณต้องการตั้งเดี๋ยวนี้?</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"เพื่อใช้การโทรอย่างรวดเร็ว, ต้องปิดโหมดเครื่องบินก่อน"</string>
+ <string name="msim_ime_dialog_title">รหัสอุปกรณ์</string>
+ <string name="multi_sim_slot_name">ซิม<xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">ทุกซิม</string>
+ <string name="yes">ใช่</string>
+ <string name="no">ไม่</string>
+ <string name="call_duration_active">ระยะเวลาใช้งาน:</string>
+ <string name="call_duration_call_out">ระยะเวลาการโทร:</string>
+ <string name="call_log_all_calls_header">การใช้สายทั้งหมด</string>
</resources>
diff --git a/res/values-tr/cm_caf.xml b/res/values-tr/cm_caf.xml
deleted file mode 100644
index 6512acda5..000000000
--- a/res/values-tr/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Arama kaydını araştır</string>
-</resources>
diff --git a/res/values-tr/cm_strings.xml b/res/values-tr/cm_strings.xml
index e8931ba40..b184c8706 100644
--- a/res/values-tr/cm_strings.xml
+++ b/res/values-tr/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">İstatistikler</string>
<string name="callStatsDetailTitle">Arama istatistik detayları</string>
- <string name="call_stats">Arama istatistikleri</string>
- <string name="call_stats_refresh">Yenile</string>
- <string name="activity_title_call_stats">Arama istatistikleri</string>
<string name="call_stats_nav_all">Tümü</string>
<string name="call_stats_nav_incoming">Gelen</string>
<string name="call_stats_nav_outgoing">Giden</string>
@@ -53,4 +50,23 @@
<string name="start_call_playback">Kaydı oynat</string>
<string name="stop_call_playback">Durdur</string>
<string name="call_playback_error_message">Kayıt oynatılamadı</string>
+ <string name="calllog_search_hint">Arama kaydını araştır</string>
+ <string name="video_call">Görüntülü arama</string>
+ <string name="video_call_settings">Görüntülü arama ayarları</string>
+ <string name="description_videocall">Görüntülü ara : <xliff:g id="name">%1$s</xliff:g></string>
+ <string name="speed_dial_settings">Hızlı arama ayarları</string>
+ <string name="speed_dial_not_set">(ayarlanmadı)</string>
+ <string name="speed_dial_replace">Değiştir</string>
+ <string name="speed_dial_delete">Sil</string>
+ <string name="speed_dial_unassigned_dialog_title">Numara atanmadı</string>
+ <string name="speed_dial_unassigned_dialog_message">\'<xliff:g id="number">%s</xliff:g>\' numarasına hızlı arama işlevi atanmadı. Şimdi atamak ister misiniz?</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"Hızlı aramayı kullanmak için, önce uçak modunu kapatın."</string>
+ <string name="msim_ime_dialog_title">Cihaz tanımlayıcısı</string>
+ <string name="multi_sim_slot_name">SIM <xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">Tüm SIMler</string>
+ <string name="yes">Evet</string>
+ <string name="no">Hayır</string>
+ <string name="call_duration_active">Etkin süre:</string>
+ <string name="call_duration_call_out">Arama süresi:</string>
+ <string name="call_log_all_calls_header">Tüm aramalar</string>
</resources>
diff --git a/res/values-uk/cm_caf.xml b/res/values-uk/cm_caf.xml
deleted file mode 100644
index 5d527d3c1..000000000
--- a/res/values-uk/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">Шукати в журналі дзвінків</string>
-</resources>
diff --git a/res/values-uk/cm_strings.xml b/res/values-uk/cm_strings.xml
index d804a32c3..83314af12 100644
--- a/res/values-uk/cm_strings.xml
+++ b/res/values-uk/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">Статистика</string>
<string name="callStatsDetailTitle">Детальна статистика дзвінків</string>
- <string name="call_stats">Статистика дзвінків</string>
- <string name="call_stats_refresh">Оновити</string>
- <string name="activity_title_call_stats">Статистика дзвінків</string>
<string name="call_stats_nav_all">Все</string>
<string name="call_stats_nav_incoming">Вхідні</string>
<string name="call_stats_nav_outgoing">Вихідні</string>
diff --git a/res/values-zh-rCN/cm_caf.xml b/res/values-zh-rCN/cm_caf.xml
deleted file mode 100644
index 54e66bdc0..000000000
--- a/res/values-zh-rCN/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">搜索通话记录</string>
-</resources>
diff --git a/res/values-zh-rCN/cm_strings.xml b/res/values-zh-rCN/cm_strings.xml
index c6593baf9..09c22b761 100644
--- a/res/values-zh-rCN/cm_strings.xml
+++ b/res/values-zh-rCN/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">统计</string>
<string name="callStatsDetailTitle">通话统计详情</string>
- <string name="call_stats">通话统计</string>
- <string name="call_stats_refresh">刷新</string>
- <string name="activity_title_call_stats">通话统计</string>
<string name="call_stats_nav_all">全部</string>
<string name="call_stats_nav_incoming">来电</string>
<string name="call_stats_nav_outgoing">呼出</string>
@@ -53,4 +50,23 @@
<string name="start_call_playback">播放录音</string>
<string name="stop_call_playback">停止</string>
<string name="call_playback_error_message">播放录音失败</string>
+ <string name="calllog_search_hint">搜索通话记录</string>
+ <string name="video_call">视频呼叫</string>
+ <string name="video_call_settings">视频呼叫设置</string>
+ <string name="description_videocall">视频呼叫 <xliff:g id="name">%1$s</xliff:g></string>
+ <string name="speed_dial_settings">快速拨号设置</string>
+ <string name="speed_dial_not_set">(未设置)</string>
+ <string name="speed_dial_replace">替换</string>
+ <string name="speed_dial_delete">删除</string>
+ <string name="speed_dial_unassigned_dialog_title">按键未分配</string>
+ <string name="speed_dial_unassigned_dialog_message">此快速拨号按键 “<xliff:g id="number">%s</xliff:g>” 尚未被使用,您现在想要指定一个动作吗?</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"若要使用快速拨号,请先关闭飞行模式。"</string>
+ <string name="msim_ime_dialog_title">设备标识符</string>
+ <string name="multi_sim_slot_name">SIM <xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">所有 SIM 卡</string>
+ <string name="yes">是</string>
+ <string name="no">否</string>
+ <string name="call_duration_active">活动持续时间:</string>
+ <string name="call_duration_call_out">呼叫持续时间:</string>
+ <string name="call_log_all_calls_header">所有呼叫</string>
</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index a66620de4..8844089fb 100644..100755
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -48,6 +48,8 @@
<string name="call_log_incoming_header" msgid="2787722299753674684">"只显示来电"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"只显示外拨电话"</string>
<string name="call_log_missed_header" msgid="8017148056610855956">"只显示未接来电"</string>
+ <string name="call_duration_active">"通话时长:"</string>
+ <string name="call_duration_call_out">"呼叫时长:"</string>
<string name="voicemail_status_voicemail_not_available" msgid="3021980206152528883">"无法连接到语音信箱服务器。"</string>
<string name="voicemail_status_messages_waiting" msgid="7113421459602803605">"无法连接到语音信箱服务器。新的语音邮件正在等待接收。"</string>
<string name="voicemail_status_configure_voicemail" msgid="3738537770636895689">"设置您的语音信箱。"</string>
diff --git a/res/values-zh-rHK/cm_caf.xml b/res/values-zh-rHK/cm_caf.xml
deleted file mode 100644
index 3a9484054..000000000
--- a/res/values-zh-rHK/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">搜尋通話記錄</string>
-</resources>
diff --git a/res/values-zh-rHK/cm_strings.xml b/res/values-zh-rHK/cm_strings.xml
index 8f827aa2e..d4b07fb8c 100644
--- a/res/values-zh-rHK/cm_strings.xml
+++ b/res/values-zh-rHK/cm_strings.xml
@@ -18,9 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">統計資料</string>
<string name="callStatsDetailTitle">通話統計詳細資料</string>
- <string name="call_stats">通話統計</string>
- <string name="call_stats_refresh">重新整理</string>
- <string name="activity_title_call_stats">通話統計</string>
<string name="call_stats_nav_all">全部</string>
<string name="call_stats_nav_incoming">來電</string>
<string name="call_stats_nav_outgoing">撥出</string>
@@ -33,7 +30,7 @@
<string name="call_stats_header_total_callsonly">總計:<xliff:g id="call_count">%s</xliff:g></string>
<string name="call_stats_filter_from">開始日期</string>
<string name="call_stats_filter_to">結束日期</string>
- <string name="call_stats_filter_picker_title">篩選範圍</string>
+ <string name="call_stats_filter_picker_title">過濾範圍</string>
<string name="date_quick_selection">快速選取</string>
<string name="date_qs_currentmonth">本月</string>
<string name="date_qs_currentquarter">本季</string>
diff --git a/res/values-zh-rTW/cm_caf.xml b/res/values-zh-rTW/cm_caf.xml
deleted file mode 100644
index c53bbc9ae..000000000
--- a/res/values-zh-rTW/cm_caf.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Generated by crowdin.com-->
-<!--
- Copyright (C) 2014 The CyanogenMod Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="calllog_search_hint">搜尋通話紀錄</string>
-</resources>
diff --git a/res/values-zh-rTW/cm_strings.xml b/res/values-zh-rTW/cm_strings.xml
index bdfeb1555..3939ae0e0 100644
--- a/res/values-zh-rTW/cm_strings.xml
+++ b/res/values-zh-rTW/cm_strings.xml
@@ -18,8 +18,6 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="call_log_stats_title">統計資料</string>
<string name="callStatsDetailTitle">通話統計詳細資料</string>
- <string name="call_stats_refresh">重新整理</string>
- <string name="activity_title_call_stats">通話統計</string>
<string name="call_stats_nav_all">全部</string>
<string name="call_stats_nav_incoming">來電</string>
<string name="call_stats_missed_percent">未接來電:<xliff:g id="percent">%d</xliff:g>%%</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index c3ee7189b..bb84dd9b9 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -48,6 +48,8 @@
<string name="call_log_incoming_header" msgid="2787722299753674684">"僅顯示來電"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"僅顯示已撥電話"</string>
<string name="call_log_missed_header" msgid="8017148056610855956">"僅顯示未接來電"</string>
+ <string name="call_duration_active">"通話時長:"</string>
+ <string name="call_duration_call_out">"呼叫時長:"</string>
<string name="voicemail_status_voicemail_not_available" msgid="3021980206152528883">"無法連線至語音信箱伺服器。"</string>
<string name="voicemail_status_messages_waiting" msgid="7113421459602803605">"無法連線至語音信箱伺服器,新的語音留言仍待聽取。"</string>
<string name="voicemail_status_configure_voicemail" msgid="3738537770636895689">"設定您的語音信箱。"</string>
diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml
index 00bd29efc..4df61589b 100644
--- a/res/values/cm_strings.xml
+++ b/res/values/cm_strings.xml
@@ -18,10 +18,6 @@
<string name="call_log_stats_title">Statistics</string>
<string name="callStatsDetailTitle">Call stat details</string>
- <string name="call_stats">Call statistics</string>
- <string name="call_stats_refresh">Refresh</string>
- <string name="activity_title_call_stats">Call statistics</string>
-
<string name="call_stats_nav_all">All</string>
<string name="call_stats_nav_incoming">Incoming</string>
<string name="call_stats_nav_outgoing">Outgoing</string>
@@ -61,4 +57,33 @@
<string name="stop_call_playback">Stop</string>
<string name="call_playback_error_message">Failed to play recording</string>
+ <string name="calllog_search_hint">Search call log</string>
+
+ <!--add for csvt, Menu item label for call settings [CHAR LIMIT=30] -->
+ <string name="video_call">Video call</string>
+ <string name="video_call_settings">Video call settings</string>
+
+ <!-- add for csvt, String describing the text for a Video call number in quick contact.
+ Note: AccessibilityServices use this attribute to announce what the view represents.
+ This is especially valuable for views without textual representation like ImageView. -->
+ <string name="description_videocall">Video call <xliff:g id="name">%1$s</xliff:g></string>
+
+ <!-- for speed dial -->
+ <string name="speed_dial_settings">Speed dial settings</string>
+ <string name="speed_dial_not_set">(not set)</string>
+ <string name="speed_dial_replace">Replace</string>
+ <string name="speed_dial_delete">Delete</string>
+ <string name="speed_dial_unassigned_dialog_title">Key unassigned</string>
+ <string name="speed_dial_unassigned_dialog_message">No speed dial contact is assigned to number key \'<xliff:g id="number">%s</xliff:g>\'. Do you want to assign a contact now?</string>
+ <string name="dialog_speed_dial_airplane_mode_message">"To use speed dial, first turn off Airplane mode."</string>
+ <string name="msim_ime_dialog_title">Device identifier</string>
+ <string name="multi_sim_slot_name">SIM <xliff:g id="index">%d</xliff:g></string>
+ <string name="call_log_show_all_slots">All SIMs</string>
+ <string name="yes">Yes</string>
+ <string name="no">No</string>
+
+ <string name="call_duration_active">Active duration:</string>
+ <string name="call_duration_call_out">Call duration:</string>
+
+ <string name="call_log_all_calls_header">All calls</string>
</resources>
diff --git a/res/values/config.xml b/res/values/config.xml
index e8b6eca2b..318916dfa 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -17,4 +17,5 @@
<resources>
<bool name="call_recording_enabled">false</bool>
<integer name="call_recording_audio_source">1</integer>
+ <bool name="call_durationtype_enabled">false</bool>
</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 028e82d56..d209df50e 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -29,8 +29,8 @@
<dimen name="call_log_call_action_size">32dip</dimen>
<dimen name="call_log_call_action_width">54dp</dimen>
<dimen name="call_log_icon_margin">4dip</dimen>
- <dimen name="call_log_inner_margin">8dip</dimen>
- <dimen name="call_log_outer_margin">8dip</dimen>
+ <dimen name="call_log_inner_margin">5dip</dimen>
+ <dimen name="call_log_outer_margin">10dip</dimen>
<dimen name="call_log_indent_margin">24dip</dimen>
<dimen name="call_log_list_item_height">56dip</dimen>
<dimen name="call_log_list_contact_photo_size">64dip</dimen>
@@ -133,4 +133,8 @@
<!-- Size of the pie chart in the call stats detail activity -->
<dimen name="call_stats_details_chart_size">140dip</dimen>
+
+ <dimen name="speed_dial_list_contact_photo_size">40dp</dimen>
+
+ <item name="call_detail_header_photo_ratio" type="dimen" format="float">0.5</item>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index a5f8e475d..6cd140c1a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -751,6 +751,4 @@
<!-- The font-family to use for tab text.
Do not translate. -->
<string name="tab_font_family">sans-serif</string>
-
- <string name="calllog_search_hint">Search call log</string>
</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 973c53470..74a636d59 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -115,6 +115,16 @@
<item name="android:textAppearanceListItemSmall">@android:style/TextAppearance.Holo.Medium.Inverse</item>
</style>
+ <!-- A theme for inflation of a search view dialtacts action bar -->
+ <style name="DialtactsSearchTheme" parent="DialtactsTheme">
+ <item name="android:textColorPrimary">@color/actionbar_text_color</item>
+ <item name="android:textColorHint">@color/searchbox_hint_text_color</item>
+ <item name="*android:searchViewSearchIcon">@drawable/ic_search_lt</item>
+ <item name="*android:searchViewCloseIcon">@drawable/ic_cancel_lt</item>
+ <item name="*android:searchViewTextField">@drawable/textfield_search_lt</item>
+ <item name="android:textCursorDrawable">@*android:drawable/text_cursor_holo_dark</item>
+ </style>
+
<style name="DialtactsActionBarSpinner"
parent="@*android:style/Widget.Holo.Light.Spinner.DropDown.ActionBar">
@@ -228,8 +238,14 @@
<item name="android:overScrollMode">always</item>
</style>
- <style name="FragmentActionBarPadding">
- <item name="android:paddingBottom">?android:attr/actionBarSize</item>
+ <style name="CallLogSpinnerStyle">
+ <item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
+ <item name="android:textStyle">bold</item>
+ <item name="android:textColor">@android:color/black</item>
+ <item name="android:gravity">center_vertical</item>
+ <item name="android:ellipsize">end</item>
+ <item name="android:singleLine">true</item>
+ <item name="android:textAllCaps">true</item>
</style>
<style name="DialtactsSearchboxStyle" parent="@android:style/Widget.EditText">
@@ -241,4 +257,8 @@
<item name="android:paddingLeft">@dimen/dismiss_button_padding_start</item>
<item name="android:paddingRight">@dimen/dismiss_button_padding_end</item>
</style>
+
+ <style name="CallLogFragment">
+ <item name="android:paddingTop">?android:attr/actionBarSize</item>
+ </style>
</resources>
diff --git a/src/com/android/dialer/CallDetailActivity.java b/src/com/android/dialer/CallDetailActivity.java
index 749b07b10..97fafc1f5 100644..100755
--- a/src/com/android/dialer/CallDetailActivity.java
+++ b/src/com/android/dialer/CallDetailActivity.java
@@ -69,6 +69,7 @@ import com.android.dialer.voicemail.VoicemailStatusHelper;
import com.android.dialer.voicemail.VoicemailStatusHelper.StatusMessage;
import com.android.dialer.voicemail.VoicemailStatusHelperImpl;
import com.android.services.callrecorder.CallRecordingDataStore;
+import com.android.internal.telephony.MSimConstants;
import java.util.List;
@@ -113,6 +114,7 @@ public class CallDetailActivity extends Activity implements ProximitySensorAware
private String mNumber = null;
private String mDefaultCountryIso;
+ private int mSubscription;
/* package */ LayoutInflater mInflater;
/* package */ Resources mResources;
@@ -199,6 +201,8 @@ public class CallDetailActivity extends Activity implements ProximitySensorAware
CallLog.Calls.COUNTRY_ISO,
CallLog.Calls.GEOCODED_LOCATION,
CallLog.Calls.NUMBER_PRESENTATION,
+ CallLog.Calls.SUBSCRIPTION,
+ CallLog.Calls.DURATION_TYPE
};
static final int DATE_COLUMN_INDEX = 0;
@@ -208,6 +212,8 @@ public class CallDetailActivity extends Activity implements ProximitySensorAware
static final int COUNTRY_ISO_COLUMN_INDEX = 4;
static final int GEOCODED_LOCATION_COLUMN_INDEX = 5;
static final int NUMBER_PRESENTATION_COLUMN_INDEX = 6;
+ static final int SUBSCRIPTION = 7;
+ static final int DURATION_TYPE_COLUMN_INDEX = 8;
@Override
protected void onCreate(Bundle icicle) {
@@ -222,7 +228,7 @@ public class CallDetailActivity extends Activity implements ProximitySensorAware
mCallTypeHelper = new CallTypeHelper(getResources());
mPhoneNumberHelper = new PhoneNumberDisplayHelper(mResources);
mCallDetailHeader = new CallDetailHeader(this, mPhoneNumberHelper);
- mPhoneCallDetailsHelper = new PhoneCallDetailsHelper(mResources, mCallTypeHelper,
+ mPhoneCallDetailsHelper = new PhoneCallDetailsHelper(this, mCallTypeHelper,
new PhoneNumberUtilsWrapper());
mVoicemailStatusHelper = new VoicemailStatusHelperImpl();
mAsyncQueryHandler = new CallDetailActivityQueryHandler(this);
@@ -377,10 +383,11 @@ public class CallDetailActivity extends Activity implements ProximitySensorAware
PhoneCallDetails firstDetails = details[0];
mNumber = firstDetails.number.toString();
final int numberPresentation = firstDetails.numberPresentation;
+ mSubscription = firstDetails.subscription;
// Set the details header, based on the first phone call.
mPhoneCallDetailsHelper.setCallDetailsHeader(mHeaderTextView, firstDetails);
- mCallDetailHeader.updateViews(mNumber, numberPresentation, firstDetails);
+ mCallDetailHeader.updateViews(mNumber, numberPresentation, firstDetails, mSubscription);
mHasEditNumberBeforeCallOption = mCallDetailHeader.canEditNumberBeforeCall();
mHasTrashOption = hasVoicemail();
@@ -474,6 +481,8 @@ public class CallDetailActivity extends Activity implements ProximitySensorAware
final int callType = callCursor.getInt(CALL_TYPE_COLUMN_INDEX);
String countryIso = callCursor.getString(COUNTRY_ISO_COLUMN_INDEX);
final String geocode = callCursor.getString(GEOCODED_LOCATION_COLUMN_INDEX);
+ final int subscription = callCursor.getInt(SUBSCRIPTION);
+ int durationType = callCursor.getInt(DURATION_TYPE_COLUMN_INDEX);
if (TextUtils.isEmpty(countryIso)) {
countryIso = mDefaultCountryIso;
@@ -515,7 +524,8 @@ public class CallDetailActivity extends Activity implements ProximitySensorAware
return new PhoneCallDetails(number, numberPresentation,
formattedNumber, countryIso, geocode,
new int[]{ callType }, date, duration,
- nameText, numberType, numberLabel, lookupUri, photoUri, sourceType);
+ nameText, numberType, numberLabel, lookupUri, photoUri, sourceType,
+ subscription, durationType);
} finally {
if (callCursor != null) {
callCursor.close();
@@ -576,12 +586,16 @@ public class CallDetailActivity extends Activity implements ProximitySensorAware
public boolean onPrepareOptionsMenu(Menu menu) {
// This action deletes all elements in the group from the call log.
// We don't have this action for voicemails, because you can just use the trash button.
+ menu.findItem(R.id.menu_calllog_detail_video_call).setVisible(mCallDetailHeader.hasVideoCallOption());
menu.findItem(R.id.menu_remove_from_call_log).setVisible(mHasRemoveFromCallLogOption);
menu.findItem(R.id.menu_edit_number_before_call).setVisible(mHasEditNumberBeforeCallOption);
menu.findItem(R.id.menu_add_to_blacklist).setVisible(mHasAddToBlacklistOption);
menu.findItem(R.id.menu_trash).setVisible(mHasTrashOption);
return super.onPrepareOptionsMenu(menu);
}
+ public void onMenuVTCall(MenuItem menuItem) {
+ startActivity(CallDetailHeader.getVTCallIntent(mNumber));
+ }
public void onMenuRemoveFromCallLog(MenuItem menuItem) {
final StringBuilder callIds = new StringBuilder();
diff --git a/src/com/android/dialer/CallDetailHeader.java b/src/com/android/dialer/CallDetailHeader.java
index 8604bc6fd..9381b1d59 100644
--- a/src/com/android/dialer/CallDetailHeader.java
+++ b/src/com/android/dialer/CallDetailHeader.java
@@ -23,6 +23,7 @@ import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
+import android.os.SystemProperties;
import android.provider.ContactsContract.Intents.Insert;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.Contacts;
@@ -56,6 +57,7 @@ import com.android.dialer.calllog.PhoneNumberUtilsWrapper;
import android.provider.ContactsContract.DisplayNameSources;
import com.android.dialer.cmstats.DialerStats;
+import com.android.internal.telephony.MSimConstants;
public class CallDetailHeader {
private static final String TAG = "CallDetail";
@@ -66,12 +68,15 @@ public class CallDetailHeader {
private static final char LEFT_TO_RIGHT_EMBEDDING = '\u202A';
private static final char POP_DIRECTIONAL_FORMATTING = '\u202C';
+ private static final boolean MOVE_VTCALL_BTN_TO_OPTIONSMENU = true;
+
private Activity mActivity;
private Resources mResources;
private PhoneNumberDisplayHelper mPhoneNumberDisplayHelper;
private ContactPhotoManager mContactPhotoManager;
private String mNumber;
+ private int mSubscription;
private TextView mHeaderTextView;
private View mHeaderOverlayView;
@@ -86,6 +91,8 @@ public class CallDetailHeader {
private CharSequence mPhoneNumberLabelToCopy;
private CharSequence mPhoneNumberToCopy;
+ private boolean mHasVideoCallOption = false;
+
public interface Data {
CharSequence getName();
CharSequence getNumber();
@@ -120,6 +127,13 @@ public class CallDetailHeader {
}
};
+ private final View.OnClickListener mThirdActionListener = new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ mActivity.startActivity(((ViewEntry) view.getTag()).thirdIntent);
+ }
+ };
+
private final View.OnLongClickListener mPrimaryLongClickListener =
new View.OnLongClickListener() {
@Override
@@ -235,7 +249,7 @@ public class CallDetailHeader {
}
}
- public void updateViews(String number, int numberPresentation, Data data) {
+ public void updateViews(String number, int numberPresentation, Data data, int subscription) {
// Cache the details about the phone number.
final PhoneNumberUtilsWrapper phoneUtils = new PhoneNumberUtilsWrapper();
final boolean isVoicemailNumber = phoneUtils.isVoicemailNumber(number);
@@ -248,6 +262,7 @@ public class CallDetailHeader {
boolean skipBind = false;
mNumber = number;
+ mSubscription = subscription;
mCanPlaceCallsTo = PhoneNumberUtilsWrapper.canPlaceCallsTo(number, numberPresentation);
// Let user view contact details if they exist, otherwise add option to create new
@@ -322,10 +337,16 @@ public class CallDetailHeader {
mPhoneNumberDisplayHelper.getDisplayNumber(
dataNumber, data.getNumberPresentation(), data.getFormattedNumber());
+ Intent intent = CallUtil.getCallIntent(mNumber);
+ if (mSubscription != -1) {
+ intent.putExtra(MSimConstants.SUBSCRIPTION_KEY, mSubscription);
+ Log.d(TAG, "Start the activity and the call log sub is: " + mSubscription);
+ }
+
ViewEntry entry = new ViewEntry(
mResources.getString(R.string.menu_callNumber,
forceLeftToRight(displayNumber)),
- CallUtil.getCallIntent(number),
+ intent,
mResources.getString(R.string.description_call, nameOrNumber));
// Only show a label if the number is shown and it is not a SIP address.
@@ -346,6 +367,23 @@ public class CallDetailHeader {
mResources.getString(R.string.description_send_text_message, nameOrNumber));
}
+ boolean isVTSupported =
+ SystemProperties.getBoolean("persist.radio.csvt.enabled", false);
+
+ // The third action allows to invoke videocall to the number that placed the
+ // call.
+ final boolean canVTCall = isVTSupported && !isSipNumber;
+ if (!MOVE_VTCALL_BTN_TO_OPTIONSMENU && canVTCall) {
+ entry.setThirdAction(
+ R.drawable.ic_contact_quick_contact_call_video_holo_dark,
+ getVTCallIntent(mNumber),
+ mResources.getString(R.string.description_videocall,
+ nameOrNumber));
+ mHasVideoCallOption = false;
+ } else {
+ mHasVideoCallOption = canVTCall;
+ }
+
configureCallButton(entry);
mPhoneNumberToCopy = displayNumber;
mPhoneNumberLabelToCopy = entry.label;
@@ -412,6 +450,12 @@ public class CallDetailHeader {
public Intent secondaryIntent = null;
/** The description for accessibility of the secondary action. */
public String secondaryDescription = null;
+ /** add for csvt Icon for the third action. */
+ public int thirdIcon = 0;
+ /** Intent for the third action. If not null, an icon must be defined. */
+ public Intent thirdIntent = null;
+ /** The description for accessibility of the third action. */
+ public String thirdDescription = null;
public ViewEntry(String text, Intent intent, String description) {
this.text = text;
@@ -424,6 +468,12 @@ public class CallDetailHeader {
secondaryIntent = intent;
secondaryDescription = description;
}
+
+ public void setThirdAction(int icon, Intent intent, String description) {
+ thirdIcon = icon;
+ thirdIntent = intent;
+ thirdDescription = description;
+ }
}
/** Disables the call button area, e.g., for private numbers. */
@@ -439,6 +489,8 @@ public class CallDetailHeader {
ImageView icon = (ImageView) convertView.findViewById(R.id.call_and_sms_icon);
View divider = convertView.findViewById(R.id.call_and_sms_divider);
TextView text = (TextView) convertView.findViewById(R.id.call_and_sms_text);
+ ImageView secondaryIcon = (ImageView) convertView.findViewById(R.id.videocall);
+ View secondaryIconDivider = convertView.findViewById(R.id.videocall_and_sms_divider);
View mainAction = convertView.findViewById(R.id.call_and_sms_main_action);
mainAction.setOnClickListener(mPrimaryActionListener);
@@ -459,6 +511,19 @@ public class CallDetailHeader {
}
text.setText(entry.text);
+ if (entry.thirdIntent != null) {
+ secondaryIcon.setOnClickListener(mThirdActionListener);
+ secondaryIcon.setImageResource(
+ R.drawable.ic_contact_quick_contact_call_video_holo_dark);
+ secondaryIcon.setTag(entry);
+ secondaryIcon.setContentDescription(entry.thirdDescription);
+ secondaryIcon.setVisibility(View.VISIBLE);
+ secondaryIconDivider.setVisibility(View.VISIBLE);
+ } else {
+ secondaryIcon.setVisibility(View.GONE);
+ secondaryIconDivider.setVisibility(View.GONE);
+ }
+
TextView label = (TextView) convertView.findViewById(R.id.call_and_sms_label);
if (TextUtils.isEmpty(entry.label)) {
label.setVisibility(View.GONE);
@@ -475,8 +540,13 @@ public class CallDetailHeader {
TelephonyManager tm = (TelephonyManager)
mActivity.getSystemService(Context.TELEPHONY_SERVICE);
if (tm.getCallState() == TelephonyManager.CALL_STATE_IDLE) {
- mActivity.startActivity(CallUtil.getCallIntent(
- Uri.fromParts(CallUtil.SCHEME_TEL, mNumber, null)));
+ Intent intent = CallUtil.getCallIntent(
+ Uri.fromParts(CallUtil.SCHEME_TEL, mNumber, null));
+ if (mSubscription != -1) {
+ intent.putExtra(MSimConstants.SUBSCRIPTION_KEY, mSubscription);
+ Log.d(TAG, "Start the activity and the call log sub is: " + mSubscription);
+ }
+ mActivity.startActivity(intent);
return true;
}
}
@@ -493,4 +563,28 @@ public class CallDetailHeader {
sb.append(POP_DIRECTIONAL_FORMATTING);
return sb.toString();
}
+
+ //add for csvt
+ public static Intent getVTCallIntent(String number) {
+ Intent intent = new Intent("com.borqs.videocall.action.LaunchVideoCallScreen");
+ intent.addCategory(Intent.CATEGORY_DEFAULT);
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
+ | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
+
+ intent.putExtra("IsCallOrAnswer", true); // true as a
+ // call,
+ // while
+ // false as
+ // answer
+
+ intent.putExtra("LaunchMode", 1); // nLaunchMode: 1 as
+ // telephony, while
+ // 0 as socket
+ intent.putExtra("call_number_key", number);
+ return intent;
+ }
+
+ public boolean hasVideoCallOption() {
+ return mHasVideoCallOption;
+ }
}
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index a7745bc04..67ccaf15c 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -32,6 +32,8 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
+import android.content.res.TypedArray;
+import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.RemoteException;
@@ -41,6 +43,7 @@ import android.provider.CallLog.Calls;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Intents;
import android.provider.ContactsContract.Intents.UI;
+import android.provider.Settings;
import android.speech.RecognizerIntent;
import android.telephony.MSimTelephonyManager;
import android.telephony.TelephonyManager;
@@ -91,6 +94,14 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
+//add for CSVT
+import android.content.ServiceConnection;
+import org.codeaurora.ims.csvt.ICsvtService;
+import android.content.ComponentName;
+import android.os.IBinder;
+import android.os.SystemProperties;
+
+
/**
* The dialer tab's title is 'phone', a more common name (see strings.xml).
*/
@@ -108,6 +119,12 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
public static final String SHARED_PREFS_NAME = "com.android.dialer_preferences";
private static final String PREF_LAST_T9_LOCALE = "smart_dial_prefix_last_t9_locale";
+ public static final String PREFERRED_SIM_ICON_INDEX = "preferred_sim_icon_index";
+ public static final String[] MULTI_SIM_NAME = {
+ "perferred_name_sub1", "perferred_name_sub2"
+ };
+
+
/** Used to open Call Setting */
private static final String PHONE_PACKAGE = "com.android.phone";
private static final String CALL_SETTINGS_CLASS_NAME =
@@ -173,10 +190,60 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
private View mFragmentsSpacer;
private View mFragmentsFrame;
+ private String mRegularNumber;
+
private boolean mInDialpadSearch;
private boolean mInRegularSearch;
private boolean mClearSearchOnPause;
+ //add for CSVT
+
+ public static ICsvtService mCsvtService;
+
+ public static boolean isCsvtActive() {
+ boolean result = false;
+ if (mCsvtService != null) {
+ try{
+ result = mCsvtService.isActive();
+ if (DEBUG) Log.d(TAG, "mCsvtService.isActive = " + result);
+ } catch (RemoteException e) {
+ Log.e(TAG, Log.getStackTraceString(new Throwable()));
+ }
+ }
+ return result;
+ }
+
+ private boolean isVTSupported() {
+ return SystemProperties.getBoolean("persist.radio.csvt.enabled", false);
+ //return this.getResources().getBoolean(R.bool.csvt_enabled);
+ }
+
+
+ private void createCsvtService() {
+ if (isVTSupported()) {
+ try {
+ Intent intent = new Intent("org.codeaurora.ims.csvt.ICsvtService");
+ boolean bound = bindService(intent,
+ mCsvtServiceConnection, Context.BIND_AUTO_CREATE);
+ if (DEBUG) Log.d(TAG, "ICsvtService bound request : " + bound);
+ } catch (NoClassDefFoundError e) {
+ Log.e(TAG, "Ignoring ICsvtService class not found exception " + e);
+ }
+ }
+ }
+
+ private static ServiceConnection mCsvtServiceConnection = new ServiceConnection() {
+ public void onServiceConnected(ComponentName name, IBinder service) {
+ mCsvtService = ICsvtService.Stub.asInterface(service);
+ if (DEBUG) Log.d(TAG,"Csvt Service Connected: " + mCsvtService);
+ }
+
+ public void onServiceDisconnected(ComponentName arg0) {
+ if (DEBUG) Log.d(TAG,"Csvt Service onServiceDisconnected");
+ }
+ };
+ //add for CSVT
+
/**
* True if the dialpad is only temporarily showing due to being in call
*/
@@ -298,6 +365,7 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
if (dialpadSearch && mSmartDialSearchFragment != null) {
mSmartDialSearchFragment.setQueryString(newText, false);
mSmartDialSearchFragment.setDialpadQueryString(s.toString());
+ mSmartDialSearchFragment.setRegularQueryString(mRegularNumber);
} else if (mRegularSearchFragment != null) {
mRegularSearchFragment.setQueryString(newText, false);
}
@@ -379,6 +447,9 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
@Override
protected void onResume() {
super.onResume();
+ //when already in vt call screen, click dialer should go to video call screen also.
+ Intent mIntent = new Intent("restore_video_call");
+ sendBroadcast(mIntent);
if (mFirstLaunch) {
displayFragment(getIntent());
} else if (!phoneIsInUse() && mInCallDialpadUp) {
@@ -502,6 +573,7 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
case R.id.overflow_menu: {
if (isDialpadShowing()) {
mDialpadOverflowMenu.show();
+ mDialpadFragment.setupMenuItems(mDialpadOverflowMenu.getMenu());
} else {
mOverflowMenu.show();
}
@@ -1032,6 +1104,7 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
@Override
public void onDialpadQueryChanged(String query) {
final String normalizedQuery = query;
+ mRegularNumber = query;
if (!TextUtils.equals(mSearchView.getText(), normalizedQuery)) {
if (DEBUG) {
Log.d(TAG, "onDialpadQueryChanged - new query: " + query);
@@ -1068,6 +1141,51 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
mFakeActionBar.setVisibility(visible ? View.VISIBLE : View.GONE);
}
+ /**
+ * @return the SIM name for the special subscription.
+ */
+ public static String getMultiSimName(Context context, int subscription) {
+ if (context == null) {
+ // If the context is null, return null.
+ return null;
+ }
+
+ String name = Settings.System.getString(context.getContentResolver(),
+ MULTI_SIM_NAME[subscription]);
+ if (TextUtils.isEmpty(name)) {
+ return context.getString(R.string.multi_sim_slot_name, subscription + 1);
+ }
+ return name;
+ }
+
+ /**
+ * @return the SIM icon for the special subscription.
+ */
+ public static Drawable getMultiSimIcon(Context context, int subscription) {
+ if (context == null) {
+ // If the context is null, return 0 as no resource found.
+ return null;
+ }
+
+ TypedArray icons = context.getResources().obtainTypedArray(
+ R.array.sim_icons);
+ String simIconIndex = Settings.System.getString(context.getContentResolver(),
+ PREFERRED_SIM_ICON_INDEX);
+ if (TextUtils.isEmpty(simIconIndex)) {
+ return icons.getDrawable(subscription);
+ }
+ return getPreferredIcon(icons, simIconIndex, subscription);
+ }
+
+ public static Drawable getPreferredIcon(TypedArray icons, String iconIndex, int subscription) {
+ String[] indexs = iconIndex.split(",");
+
+ if (subscription >= indexs.length) {
+ return null;
+ }
+ return icons.getDrawable(Integer.parseInt(indexs[subscription]));
+ }
+
private boolean phoneIsInUse() {
final TelephonyManager tm = (TelephonyManager) getSystemService(
Context.TELEPHONY_SERVICE);
diff --git a/src/com/android/dialer/PhoneCallDetails.java b/src/com/android/dialer/PhoneCallDetails.java
index 737a74eb1..f1393954c 100644..100755
--- a/src/com/android/dialer/PhoneCallDetails.java
+++ b/src/com/android/dialer/PhoneCallDetails.java
@@ -64,12 +64,16 @@ public class PhoneCallDetails implements CallDetailHeader.Data {
*/
public final int sourceType;
+ /** The subscription of the call. */
+ public final int subscription;
+ public final int durationType;
+
/** Create the details for a call with a number not associated with a contact. */
public PhoneCallDetails(CharSequence number, int numberPresentation,
CharSequence formattedNumber, String countryIso, String geocode,
- int[] callTypes, long date, long duration) {
+ int[] callTypes, long date, long duration, int subscription, int durationType) {
this(number, numberPresentation, formattedNumber, countryIso, geocode,
- callTypes, date, duration, "", 0, "", null, null, 0);
+ callTypes, date, duration, "", 0, "", null, null, 0, subscription, durationType);
}
/** Create the details for a call with a number associated with a contact. */
@@ -77,7 +81,7 @@ public class PhoneCallDetails implements CallDetailHeader.Data {
CharSequence formattedNumber, String countryIso, String geocode,
int[] callTypes, long date, long duration, CharSequence name,
int numberType, CharSequence numberLabel, Uri contactUri,
- Uri photoUri, int sourceType) {
+ Uri photoUri, int sourceType, int subscription, int durationType) {
this.number = number;
this.numberPresentation = numberPresentation;
this.formattedNumber = formattedNumber;
@@ -92,6 +96,8 @@ public class PhoneCallDetails implements CallDetailHeader.Data {
this.contactUri = contactUri;
this.photoUri = photoUri;
this.sourceType = sourceType;
+ this.subscription = subscription;
+ this.durationType = durationType;
}
@Override
diff --git a/src/com/android/dialer/PhoneCallDetailsHelper.java b/src/com/android/dialer/PhoneCallDetailsHelper.java
index aee5052eb..394b4d6e0 100644..100755
--- a/src/com/android/dialer/PhoneCallDetailsHelper.java
+++ b/src/com/android/dialer/PhoneCallDetailsHelper.java
@@ -16,10 +16,12 @@
package com.android.dialer;
+import android.content.Context;
import android.content.res.Resources;
import android.graphics.Typeface;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.telephony.MSimTelephonyManager;
import android.telephony.PhoneNumberUtils;
import android.text.SpannableString;
import android.text.Spanned;
@@ -30,6 +32,7 @@ import android.text.style.StyleSpan;
import android.view.View;
import android.widget.TextView;
+import com.android.contacts.common.format.TextHighlighter;
import com.android.contacts.common.test.NeededForTesting;
import com.android.dialer.calllog.CallTypeHelper;
import com.android.dialer.calllog.ContactInfo;
@@ -43,6 +46,7 @@ public class PhoneCallDetailsHelper {
/** The maximum number of icons will be shown to represent the call types in a group. */
private static final int MAX_CALL_TYPE_ICONS = 3;
+ private final Context mContext;
private final Resources mResources;
/** The injected current time in milliseconds since the epoch. Used only by tests. */
private Long mCurrentTimeMillisForTest;
@@ -50,6 +54,7 @@ public class PhoneCallDetailsHelper {
private final CallTypeHelper mCallTypeHelper;
private final PhoneNumberDisplayHelper mPhoneNumberHelper;
private final PhoneNumberUtilsWrapper mPhoneNumberUtilsWrapper;
+ private final TextHighlighter mHighlighter;
/**
* Creates a new instance of the helper.
@@ -58,17 +63,34 @@ public class PhoneCallDetailsHelper {
*
* @param resources used to look up strings
*/
- public PhoneCallDetailsHelper(Resources resources, CallTypeHelper callTypeHelper,
+ public PhoneCallDetailsHelper(Context context, CallTypeHelper callTypeHelper,
PhoneNumberUtilsWrapper phoneUtils) {
- mResources = resources;
+ mContext = context;
+ mResources = mContext.getResources();
mCallTypeHelper = callTypeHelper;
mPhoneNumberUtilsWrapper = phoneUtils;
- mPhoneNumberHelper = new PhoneNumberDisplayHelper(mPhoneNumberUtilsWrapper, resources);
+ mPhoneNumberHelper = new PhoneNumberDisplayHelper(mPhoneNumberUtilsWrapper, mResources);
+ mHighlighter = new TextHighlighter(Typeface.BOLD,
+ mResources.getColor(R.color.text_highlight_color));
}
/** Fills the call details views with content. */
+ public void setPhoneCallDetails(PhoneCallDetailsViews views,
+ PhoneCallDetails details, boolean isHighlighted) {
+ setPhoneCallDetails(views, details, isHighlighted, null);
+ }
+
public void setPhoneCallDetails(PhoneCallDetailsViews views, PhoneCallDetails details,
- boolean isHighlighted) {
+ boolean isHighlighted, String filter) {
+ // Display the icon for the last call sub.
+ if (MSimTelephonyManager.getDefault().isMultiSimEnabled()) {
+ views.subIconView.setVisibility(View.VISIBLE);
+ views.subIconView.setImageDrawable(
+ DialtactsActivity.getMultiSimIcon(mContext, details.subscription));
+ } else {
+ views.subIconView.setVisibility(View.GONE);
+ }
+
// Display up to a given number of icons.
views.callTypeIcons.clear();
int count = details.callTypes.length;
@@ -98,12 +120,13 @@ public class PhoneCallDetailsHelper {
// Get type of call (ie mobile, home, etc) if known, or the caller's
CharSequence numberFormattedLabel = getCallTypeOrLocation(details);
- final CharSequence nameText;
+ CharSequence nameText;
final CharSequence numberText;
final CharSequence labelText;
- final CharSequence displayNumber =
+ CharSequence displayNumber =
mPhoneNumberHelper.getDisplayNumber(details.number,
details.numberPresentation, details.formattedNumber);
+
if (TextUtils.isEmpty(details.name)) {
nameText = displayNumber;
if (TextUtils.isEmpty(details.geocode)
@@ -122,8 +145,12 @@ public class PhoneCallDetailsHelper {
numberFormattedLabel;
}
- views.nameView.setText(nameText);
- views.labelView.setText(labelText);
+ if (filter != null) {
+ // TextHighlighter expects upper case prefix
+ filter = filter.toUpperCase();
+ }
+ mHighlighter.setPrefixText(views.nameView, nameText.toString(), filter);
+ mHighlighter.setPrefixText(views.labelView, labelText.toString(), filter);
views.labelView.setVisibility(TextUtils.isEmpty(labelText) ? View.GONE : View.VISIBLE);
}
diff --git a/src/com/android/dialer/PhoneCallDetailsViews.java b/src/com/android/dialer/PhoneCallDetailsViews.java
index 4e482109b..1c1c99621 100644
--- a/src/com/android/dialer/PhoneCallDetailsViews.java
+++ b/src/com/android/dialer/PhoneCallDetailsViews.java
@@ -18,6 +18,7 @@ package com.android.dialer;
import android.content.Context;
import android.view.View;
+import android.widget.ImageView;
import android.widget.TextView;
import com.android.dialer.calllog.CallTypeIconsView;
@@ -31,14 +32,17 @@ public final class PhoneCallDetailsViews {
public final CallTypeIconsView callTypeIcons;
public final TextView callTypeAndDate;
public final TextView labelView;
+ public final ImageView subIconView;
private PhoneCallDetailsViews(TextView nameView, View callTypeView,
- CallTypeIconsView callTypeIcons, TextView callTypeAndDate, TextView labelView) {
+ CallTypeIconsView callTypeIcons, TextView callTypeAndDate, TextView labelView,
+ ImageView subIconView) {
this.nameView = nameView;
this.callTypeView = callTypeView;
this.callTypeIcons = callTypeIcons;
this.callTypeAndDate = callTypeAndDate;
this.labelView = labelView;
+ this.subIconView = subIconView;
}
/**
@@ -53,7 +57,8 @@ public final class PhoneCallDetailsViews {
view.findViewById(R.id.call_type),
(CallTypeIconsView) view.findViewById(R.id.call_type_icons),
(TextView) view.findViewById(R.id.call_count_and_date),
- (TextView) view.findViewById(R.id.label));
+ (TextView) view.findViewById(R.id.label),
+ (ImageView) view.findViewById(R.id.sub_icon));
}
public static PhoneCallDetailsViews createForTest(Context context) {
@@ -62,6 +67,7 @@ public final class PhoneCallDetailsViews {
new View(context),
new CallTypeIconsView(context),
new TextView(context),
- new TextView(context));
+ new TextView(context),
+ new ImageView(context));
}
}
diff --git a/src/com/android/dialer/SpecialCharSequenceMgr.java b/src/com/android/dialer/SpecialCharSequenceMgr.java
index 02deb66c6..01948fa6e 100644..100755
--- a/src/com/android/dialer/SpecialCharSequenceMgr.java
+++ b/src/com/android/dialer/SpecialCharSequenceMgr.java
@@ -44,6 +44,7 @@ import android.widget.Toast;
import com.android.contacts.common.database.NoNullCursorAsyncQueryHandler;
import com.android.internal.telephony.ITelephony;
+import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.msim.ITelephonyMSim;
import com.android.internal.telephony.TelephonyCapabilities;
import com.android.internal.telephony.TelephonyIntents;
@@ -65,6 +66,7 @@ public class SpecialCharSequenceMgr {
private static final String MMI_IMEI_DISPLAY = "*#06#";
private static final String MMI_REGULATORY_INFO_DISPLAY = "*#07#";
+ private static final String PRL_VERSION_DISPLAY = "*#0000#";
/**
* Remembers the previous {@link QueryHandler} and cancel the operation when needed, to
@@ -101,7 +103,8 @@ public class SpecialCharSequenceMgr {
//get rid of the separators so that the string gets parsed correctly
String dialString = PhoneNumberUtils.stripSeparators(input);
- if (handleIMEIDisplay(context, dialString, useSystemWindow)
+ if (handlePRLVersion(context, dialString)
+ || handleIMEIDisplay(context, dialString, useSystemWindow)
|| handleRegulatoryInfoDisplay(context, dialString)
|| handlePinEntry(context, dialString)
|| handleAdnEntry(context, dialString, textField)
@@ -112,6 +115,20 @@ public class SpecialCharSequenceMgr {
return false;
}
+ static private boolean handlePRLVersion(Context context, String input) {
+ if (input.equals(PRL_VERSION_DISPLAY)) {
+ try {
+ Intent intent = new Intent("android.intent.action.ENGINEER_MODE_DEVICEINFO");
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ context.startActivity(intent);
+ return true;
+ } catch (ActivityNotFoundException e) {
+ Log.d(TAG, "no activity to handle showing device info");
+ }
+ }
+ return false;
+ }
+
/**
* Cleanup everything around this class. Must be run inside the main thread.
*
@@ -270,6 +287,9 @@ public class SpecialCharSequenceMgr {
static boolean handleIMEIDisplay(Context context, String input, boolean useSystemWindow) {
if (input.equals(MMI_IMEI_DISPLAY)) {
+ if (MSimTelephonyManager.getDefault().isMultiSimEnabled()) {
+ return handleMSimIMEIDisplay(context);
+ }
int phoneType;
if (MSimTelephonyManager.getDefault().isMultiSimEnabled()) {
int subscription = MSimTelephonyManager.getDefault().
@@ -294,6 +314,32 @@ public class SpecialCharSequenceMgr {
return false;
}
+ static boolean handleMSimIMEIDisplay(Context context) {
+ StringBuffer deviceIds = new StringBuffer();
+ for (int i = 0; i < MSimTelephonyManager.getDefault().getPhoneCount(); i++) {
+ if (i != 0) {
+ deviceIds.append("\n");
+ }
+ int phoneType = MSimTelephonyManager.getDefault().getCurrentPhoneType(i);
+ if (phoneType != TelephonyManager.PHONE_TYPE_GSM
+ && phoneType != TelephonyManager.PHONE_TYPE_CDMA) {
+ return false;
+ }
+ deviceIds.append(context
+ .getString(PhoneConstants.PHONE_TYPE_CDMA == phoneType ? R.string.meid
+ : R.string.imei)
+ + " ");
+ deviceIds.append(MSimTelephonyManager.getDefault().getDeviceId(i));
+ }
+ AlertDialog alert = new AlertDialog.Builder(context)
+ .setTitle(R.string.msim_ime_dialog_title)
+ .setMessage(deviceIds.toString())
+ .setPositiveButton(android.R.string.ok, null)
+ .setCancelable(false)
+ .show();
+ return true;
+ }
+
private static boolean handleRegulatoryInfoDisplay(Context context, String input) {
if (input.equals(MMI_REGULATORY_INFO_DISPLAY)) {
Log.d(TAG, "handleRegulatoryInfoDisplay() sending intent to settings app");
diff --git a/src/com/android/dialer/SpeedDialListActivity.java b/src/com/android/dialer/SpeedDialListActivity.java
new file mode 100755
index 000000000..76869f7e2
--- /dev/null
+++ b/src/com/android/dialer/SpeedDialListActivity.java
@@ -0,0 +1,335 @@
+/*
+ * Copyright (C) 2013, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation, Inc. nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package com.android.dialer;
+
+import android.app.ActionBar;
+import android.app.ListActivity;
+import android.content.ActivityNotFoundException;
+import android.content.ContentUris;
+import android.content.Intent;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.ContactsContract;
+import android.provider.Settings;
+import android.telephony.MSimTelephonyManager;
+import android.util.Log;
+import android.util.SparseArray;
+import android.view.LayoutInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.BaseAdapter;
+import android.widget.ListView;
+import android.widget.PopupMenu;
+import android.widget.QuickContactBadge;
+import android.widget.TextView;
+
+import com.android.contacts.common.ContactPhotoManager;
+import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
+import com.android.internal.telephony.MSimConstants;
+
+public class SpeedDialListActivity extends ListActivity implements
+ AdapterView.OnItemClickListener, PopupMenu.OnMenuItemClickListener {
+ private static final String TAG = "SpeedDial";
+ private static final String ACTION_ADD_VOICEMAIL =
+ "com.android.phone.CallFeaturesSetting.ADD_VOICEMAIL";
+ public static final String EXTRA_INITIAL_PICK_NUMBER = "initialPickNumber";
+
+ private static final String[] LOOKUP_PROJECTION = new String[] {
+ ContactsContract.Contacts._ID,
+ ContactsContract.Contacts.DISPLAY_NAME,
+ ContactsContract.Contacts.PHOTO_ID,
+ ContactsContract.PhoneLookup.NUMBER,
+ ContactsContract.PhoneLookup.NORMALIZED_NUMBER
+ };
+
+ private static final String[] PICK_PROJECTION = new String[] {
+ ContactsContract.Data.CONTACT_ID,
+ ContactsContract.Data.DISPLAY_NAME,
+ ContactsContract.Data.PHOTO_ID,
+ ContactsContract.CommonDataKinds.Phone.NUMBER,
+ ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER
+ };
+ private static final int COLUMN_ID = 0;
+ private static final int COLUMN_NAME = 1;
+ private static final int COLUMN_PHOTO = 2;
+ private static final int COLUMN_NUMBER = 3;
+ private static final int COLUMN_NORMALIZED = 4;
+
+ private static class Record {
+ long contactId;
+ String name;
+ String number;
+ String normalizedNumber;
+ long photoId;
+ public Record(String number) {
+ this.number = number;
+ this.contactId = -1;
+ }
+ }
+
+ private SparseArray<Record> mRecords;
+
+ private int mPickNumber;
+ private int mInitialPickNumber;
+ private SpeedDialAdapter mAdapter;
+
+ private static final int MENU_REPLACE = 0;
+ private static final int MENU_DELETE = 1;
+
+ private static final int PICK_CONTACT_RESULT = 0;
+
+ /** Called when the activity is first created. */
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ mInitialPickNumber = getIntent().getIntExtra(EXTRA_INITIAL_PICK_NUMBER, -1);
+ mRecords = new SparseArray<Record>();
+
+ //the first item is the "1.voice mail", it never changes
+ mRecords.put(1, new Record(getString(R.string.voicemail)));
+
+ ListView listview = getListView();
+ listview.setOnItemClickListener(this);
+
+ final ActionBar actionBar = getActionBar();
+ actionBar.setDisplayShowHomeEnabled(true);
+ actionBar.setDisplayHomeAsUpEnabled(true);
+
+ mAdapter = new SpeedDialAdapter();
+ setListAdapter(mAdapter);
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+
+ // get number from shared preferences
+ for (int i = 2; i <= 9; i++) {
+ String phoneNumber = SpeedDialUtils.getNumber(this, i);
+ Record record = null;
+ if (phoneNumber != null) {
+ Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI,
+ Uri.encode(phoneNumber));
+ record = getRecordFromQuery(uri, LOOKUP_PROJECTION);
+ if (record == null) {
+ record = new Record(phoneNumber);
+ }
+ }
+ mRecords.put(i, record);
+ }
+
+ mAdapter.notifyDataSetChanged();
+
+ if (mInitialPickNumber >= 2 && mInitialPickNumber <= 9) {
+ pickContact(mInitialPickNumber);
+ // we only want to trigger the picker once
+ mInitialPickNumber = -1;
+ }
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ finish();
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ private Record getRecordFromQuery(Uri uri, String[] projection) {
+ Record record = null;
+ Cursor cursor = null;
+ try {
+ cursor = getContentResolver().query(uri, projection, null, null, null);
+ if (cursor != null && cursor.moveToFirst()) {
+ record = new Record(cursor.getString(COLUMN_NUMBER));
+ record.contactId = cursor.getLong(COLUMN_ID);
+ record.photoId = cursor.getLong(COLUMN_PHOTO);
+ record.name = cursor.getString(COLUMN_NAME);
+ record.normalizedNumber = cursor.getString(COLUMN_NORMALIZED);
+ if (record.normalizedNumber == null) {
+ record.normalizedNumber = record.number;
+ }
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ }
+ return record;
+ }
+
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ if (position == 0) {
+ Intent intent = new Intent(ACTION_ADD_VOICEMAIL);
+ if (MSimTelephonyManager.getDefault().isMultiSimEnabled()) {
+ //if multi sim enable, should let user select which sim to be set.
+ int sub = Settings.Global.getInt(getContentResolver(),
+ Settings.Global.MULTI_SIM_VOICE_CALL_SUBSCRIPTION, 0);
+ intent.setClassName("com.android.phone",
+ "com.android.phone.MSimCallFeaturesSubSetting");
+ intent.putExtra(MSimConstants.SUBSCRIPTION_KEY, sub);
+ } else {
+ intent.setClassName("com.android.phone", "com.android.phone.CallFeaturesSetting");
+ }
+ try {
+ startActivity(intent);
+ } catch(ActivityNotFoundException e) {
+ Log.w(TAG, "Could not find voice mail setup activity");
+ }
+ } else {
+ int number = position + 1;
+ final Record record = mRecords.get(number);
+ if (record == null) {
+ pickContact(number);
+ } else {
+ PopupMenu pm = new PopupMenu(this, view);
+ pm.getMenu().add(number, MENU_REPLACE, 0, R.string.speed_dial_replace);
+ pm.getMenu().add(number, MENU_DELETE, 0, R.string.speed_dial_delete);
+ pm.setOnMenuItemClickListener(this);
+ pm.show();
+ }
+ }
+ }
+
+ /*
+ * goto contacts, used to set or replace speed number
+ */
+ private void pickContact(int number) {
+ mPickNumber = number;
+ Intent intent = new Intent(Intent.ACTION_PICK);
+ intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
+ startActivityForResult(intent, PICK_CONTACT_RESULT);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode != PICK_CONTACT_RESULT) {
+ super.onActivityResult(requestCode, resultCode, data);
+ return;
+ }
+
+ if (resultCode == RESULT_OK) {
+ Record record = getRecordFromQuery(data.getData(), PICK_PROJECTION);
+ if (record != null) {
+ SpeedDialUtils.saveNumber(this, mPickNumber, record.normalizedNumber);
+ mRecords.put(mPickNumber, record);
+ mAdapter.notifyDataSetChanged();
+ }
+ }
+ }
+
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ int number = item.getGroupId();
+
+ switch (item.getItemId()) {
+ case MENU_REPLACE:
+ pickContact(number);
+ return true;
+ case MENU_DELETE:
+ mRecords.put(number, null);
+ SpeedDialUtils.saveNumber(this, number, null);
+ mAdapter.notifyDataSetChanged();
+ return true;
+ }
+ return false;
+ }
+
+ private class SpeedDialAdapter extends BaseAdapter {
+ private LayoutInflater mInflater;
+ private ContactPhotoManager mPhotoManager;
+
+ public SpeedDialAdapter() {
+ mInflater = LayoutInflater.from(SpeedDialListActivity.this);
+ mPhotoManager = (ContactPhotoManager) getApplicationContext().getSystemService(
+ ContactPhotoManager.CONTACT_PHOTO_SERVICE);
+ }
+
+ @Override
+ public int getCount() {
+ return mRecords.size();
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position + 1;
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mRecords.get(position + 1);
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ if (convertView == null) {
+ convertView = mInflater.inflate(R.layout.speed_dial_item, parent, false);
+ }
+
+ TextView index = (TextView) convertView.findViewById(R.id.index);
+ TextView name = (TextView) convertView.findViewById(R.id.name);
+ TextView number = (TextView) convertView.findViewById(R.id.number);
+ QuickContactBadge photo = (QuickContactBadge) convertView.findViewById(R.id.photo);
+ Record record = mRecords.get(position + 1);
+
+ index.setText(String.valueOf(position + 1));
+ if (record != null && record.name != null) {
+ name.setText(record.name);
+ number.setText(record.number);
+ number.setVisibility(View.VISIBLE);
+ } else {
+ name.setText(record != null ?
+ record.number : getString(R.string.speed_dial_not_set));
+ number.setVisibility(View.GONE);
+ }
+
+ if (record != null && record.contactId != -1) {
+ DefaultImageRequest request = new DefaultImageRequest(record.name,
+ record.normalizedNumber);
+ mPhotoManager.removePhoto(photo);
+ mPhotoManager.loadThumbnail(photo, record.photoId, false, request);
+ photo.assignContactUri(ContentUris.withAppendedId(
+ ContactsContract.Contacts.CONTENT_URI, record.contactId));
+ photo.setVisibility(View.VISIBLE);
+ } else {
+ photo.setVisibility(View.GONE);
+ }
+
+ return convertView;
+ }
+ };
+}
diff --git a/src/com/android/dialer/SpeedDialUtils.java b/src/com/android/dialer/SpeedDialUtils.java
new file mode 100755
index 000000000..c20ca7b05
--- /dev/null
+++ b/src/com/android/dialer/SpeedDialUtils.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2013, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package com.android.dialer;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+
+public class SpeedDialUtils {
+ private static final String NUMBER_KEY_PREFIX = "number_";
+
+ public static void saveNumber(Context context, int position, String phoneNumber) {
+ if (position < 2 || position > 9) {
+ return;
+ }
+ SharedPreferences.Editor editor = getPrefs(context).edit();
+ String key = NUMBER_KEY_PREFIX + position;
+ if (phoneNumber == null) {
+ editor.remove(key);
+ } else {
+ editor.putString(key, phoneNumber);
+ }
+ editor.commit();
+ }
+
+ public static String getNumber(Context context, int position) {
+ if (position < 2 || position > 9) {
+ return null;
+ }
+ String key = NUMBER_KEY_PREFIX + position;
+ return getPrefs(context).getString(key, null);
+ }
+
+ private static SharedPreferences getPrefs(Context context) {
+ return context.getSharedPreferences("speeddial", context.MODE_PRIVATE);
+ }
+}
diff --git a/src/com/android/dialer/calllog/CallDetailHistoryAdapter.java b/src/com/android/dialer/calllog/CallDetailHistoryAdapter.java
index 4191f9ba9..889327e74 100644..100755
--- a/src/com/android/dialer/calllog/CallDetailHistoryAdapter.java
+++ b/src/com/android/dialer/calllog/CallDetailHistoryAdapter.java
@@ -18,14 +18,17 @@ package com.android.dialer.calllog;
import android.content.Context;
import android.provider.CallLog.Calls;
+import android.telephony.MSimTelephonyManager;
import android.text.format.DateUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
+import android.widget.ImageView;
import android.widget.TextView;
+import com.android.dialer.DialtactsActivity;
import com.android.dialer.PhoneCallDetails;
import com.android.dialer.R;
import com.android.dialer.util.CallRecordingPlayer;
@@ -151,6 +154,7 @@ public class CallDetailHistoryAdapter extends BaseAdapter {
CallTypeIconsView callTypeIconView =
(CallTypeIconsView) result.findViewById(R.id.call_type_icon);
TextView callTypeTextView = (TextView) result.findViewById(R.id.call_type_text);
+ ImageView subIconView = (ImageView) result.findViewById(R.id.sub_icon);
TextView dateView = (TextView) result.findViewById(R.id.date);
TextView durationView = (TextView) result.findViewById(R.id.duration);
@@ -158,6 +162,15 @@ public class CallDetailHistoryAdapter extends BaseAdapter {
callTypeIconView.clear();
callTypeIconView.add(callType);
callTypeTextView.setText(mCallTypeHelper.getCallTypeText(callType));
+ // Set the sub icon.
+ if (MSimTelephonyManager.getDefault().isMultiSimEnabled()) {
+ subIconView.setVisibility(View.VISIBLE);
+ subIconView.setImageDrawable(
+ DialtactsActivity.getMultiSimIcon(mContext, details.subscription));
+ } else {
+ // Not enable, set the view as gone.
+ subIconView.setVisibility(View.GONE);
+ }
// Set the date.
CharSequence dateValue = DateUtils.formatDateRange(mContext, details.date, details.date,
DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE |
@@ -168,7 +181,7 @@ public class CallDetailHistoryAdapter extends BaseAdapter {
durationView.setVisibility(View.GONE);
} else {
durationView.setVisibility(View.VISIBLE);
- durationView.setText(formatDuration(details.duration));
+ durationView.setText(formatDuration(details.duration, details.durationType));
}
// do this synchronously to prevent recordings from "popping in"
@@ -190,7 +203,7 @@ public class CallDetailHistoryAdapter extends BaseAdapter {
return result;
}
- private String formatDuration(long elapsedSeconds) {
+ private String formatDuration(long elapsedSeconds, int durationType) {
long minutes = 0;
long seconds = 0;
@@ -200,6 +213,24 @@ public class CallDetailHistoryAdapter extends BaseAdapter {
}
seconds = elapsedSeconds;
- return mContext.getString(R.string.callDetailsDurationFormat, minutes, seconds);
+ String timeStr = mContext.getString(R.string.callDetailsDurationFormat,
+ minutes, seconds);
+
+ boolean duration = mContext.getResources().getBoolean(R.bool.call_durationtype_enabled);
+
+ if (duration) {
+ switch (durationType) {
+ case Calls.DURATION_TYPE_ACTIVE:
+ return mContext.getString(R.string.call_duration_active)
+ + timeStr;
+ case Calls.DURATION_TYPE_CALLOUT:
+ return mContext.getString(R.string.call_duration_call_out)
+ + timeStr;
+ default:
+ return timeStr;
+ }
+ } else {
+ return timeStr;
+ }
}
}
diff --git a/src/com/android/dialer/calllog/CallLogActivity.java b/src/com/android/dialer/calllog/CallLogActivity.java
index d3cd4ef6b..1023c44d8 100644..100755
--- a/src/com/android/dialer/calllog/CallLogActivity.java
+++ b/src/com/android/dialer/calllog/CallLogActivity.java
@@ -1,4 +1,6 @@
/*
+ * Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ * Not a Contribution
* Copyright (C) 2013 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,12 +18,14 @@
package com.android.dialer.calllog;
import android.app.ActionBar;
+import android.app.ActionBar.LayoutParams;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.FragmentTransaction;
+import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.provider.CallLog.Calls;
@@ -29,27 +33,49 @@ import android.support.v13.app.FragmentPagerAdapter;
import android.support.v4.view.PagerTabStrip;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
+import android.telephony.MSimTelephonyManager;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.TypefaceSpan;
+import android.text.TextUtils;
+import android.view.ContextThemeWrapper;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.View.OnFocusChangeListener;
+import android.view.ViewGroup;
+import android.view.inputmethod.InputMethodManager;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
+import android.widget.SearchView;
+import android.widget.SearchView.OnCloseListener;
+import android.widget.SearchView.OnQueryTextListener;
+import android.util.Log;
import com.android.dialer.DialtactsActivity;
import com.android.dialer.R;
import com.android.dialer.calllog.CallLogFragment;
import com.android.dialer.callstats.CallStatsFragment;
import com.android.dialer.widget.DoubleDatePickerDialog;
+import com.android.dialer.calllog.MSimCallLogFragment;
public class CallLogActivity extends Activity implements
DoubleDatePickerDialog.OnDateSetListener {
+ private static final String TAG = "CallLogActivity";
private ViewPager mViewPager;
- private ViewPagerAdapter mViewPagerAdapter;
+ private FragmentPagerAdapter mViewPagerAdapter;
private CallLogFragment mAllCallsFragment;
private CallLogFragment mMissedCallsFragment;
private CallStatsFragment mStatsFragment;
+ private MSimCallLogFragment mMSimCallsFragment;
+ private CallLogSearchFragment mSearchFragment;
+
+ private SearchView mSearchView;
+ private boolean mInSearchUi;
+
+ private static final int TAB_INDEX_MSIM = 0;
+ private static final int TAB_INDEX__MSIM_COUNT = 1;
private static final int TAB_INDEX_ALL = 0;
private static final int TAB_INDEX_MISSED = 1;
@@ -57,6 +83,9 @@ public class CallLogActivity extends Activity implements
private static final int TAB_INDEX_COUNT = 3;
+ private static final String STATE_KEY_SEARCH = "calllog:search";
+ private static final String STATE_KEY_QUERY = "calllog:query";
+
public class ViewPagerAdapter extends FragmentPagerAdapter {
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
@@ -66,11 +95,9 @@ public class CallLogActivity extends Activity implements
public Fragment getItem(int position) {
switch (position) {
case TAB_INDEX_ALL:
- mAllCallsFragment = new CallLogFragment(CallLogQueryHandler.CALL_TYPE_ALL);
- return mAllCallsFragment;
+ return CallLogFragment.newInstance(CallLogQueryHandler.CALL_TYPE_ALL);
case TAB_INDEX_MISSED:
- mMissedCallsFragment = new CallLogFragment(Calls.MISSED_TYPE);
- return mMissedCallsFragment;
+ return CallLogFragment.newInstance(Calls.MISSED_TYPE);
case TAB_INDEX_STATS:
mStatsFragment = new CallStatsFragment();
return mStatsFragment;
@@ -79,11 +106,48 @@ public class CallLogActivity extends Activity implements
}
@Override
+ public Object instantiateItem(ViewGroup container, int position) {
+ // We can't distinguish the two fragments in onAttach, which is
+ // why we differentiate between them here
+ Object result = super.instantiateItem(container, position);
+ switch (position) {
+ case TAB_INDEX_ALL:
+ mAllCallsFragment = (CallLogFragment) result;
+ break;
+ case TAB_INDEX_MISSED:
+ mMissedCallsFragment = (CallLogFragment) result;
+ break;
+ }
+ return result;
+ }
+
+ @Override
public int getCount() {
return TAB_INDEX_COUNT;
}
}
+ public class MSimViewPagerAdapter extends FragmentPagerAdapter {
+ public MSimViewPagerAdapter(FragmentManager fm) {
+ super(fm);
+ }
+
+ @Override
+ public Fragment getItem(int position) {
+ switch (position) {
+ case TAB_INDEX_MSIM:
+ mMSimCallsFragment = new MSimCallLogFragment();
+ return mMSimCallsFragment;
+ }
+ throw new IllegalStateException("No fragment at position " + position);
+ }
+
+ @Override
+ public int getCount() {
+ return TAB_INDEX__MSIM_COUNT;
+ }
+ }
+
private final TabListener mTabListener = new TabListener() {
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
@@ -121,6 +185,11 @@ public class CallLogActivity extends Activity implements
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ if (MSimTelephonyManager.getDefault().isMultiSimEnabled()) {
+ initMSimCallLog();
+ initSearchFragment();
+ return;
+ }
setContentView(R.layout.call_log_activity);
@@ -156,6 +225,48 @@ public class CallLogActivity extends Activity implements
mViewPager.setAdapter(mViewPagerAdapter);
mViewPager.setOnPageChangeListener(mOnPageChangeListener);
mViewPager.setOffscreenPageLimit(2);
+
+ initSearchFragment();
+ if (savedInstanceState != null && savedInstanceState.getBoolean(STATE_KEY_SEARCH, false)) {
+ enterSearchUi();
+ mSearchView.setQuery(savedInstanceState.getString(STATE_KEY_QUERY), false);
+ }
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle state) {
+ super.onSaveInstanceState(state);
+ state.putBoolean(STATE_KEY_SEARCH, mInSearchUi);
+ if (mInSearchUi) {
+ state.putString(STATE_KEY_QUERY, mSearchFragment.getQueryString());
+ }
+ }
+
+ @Override
+ public void onAttachFragment(Fragment fragment) {
+ if (fragment instanceof CallLogSearchFragment) {
+ mSearchFragment = (CallLogSearchFragment) fragment;
+ } else if (fragment instanceof MSimCallLogFragment) {
+ mMSimCallsFragment = (MSimCallLogFragment) fragment;
+ } else if (fragment instanceof CallStatsFragment) {
+ mStatsFragment = (CallStatsFragment) fragment;
+ }
+ }
+
+ private void initMSimCallLog() {
+ setContentView(R.layout.msim_call_log_activity);
+
+ final ActionBar actionBar = getActionBar();
+ actionBar.setDisplayShowHomeEnabled(true);
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ actionBar.setDisplayShowTitleEnabled(true);
+
+ mViewPager = (ViewPager) findViewById(R.id.call_log_pager);
+ mViewPagerAdapter = new MSimViewPagerAdapter(getFragmentManager());
+
+ mViewPager.setAdapter(mViewPagerAdapter);
+ mViewPager.setOnPageChangeListener(mOnPageChangeListener);
+ mViewPager.setOffscreenPageLimit(1);
}
@Override
@@ -168,11 +279,30 @@ public class CallLogActivity extends Activity implements
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
final MenuItem itemDeleteAll = menu.findItem(R.id.delete_all);
-
- // If onPrepareOptionsMenu is called before fragments loaded. Don't do anything.
- if (mAllCallsFragment != null && itemDeleteAll != null) {
- final CallLogAdapter adapter = mAllCallsFragment.getAdapter();
- itemDeleteAll.setVisible(adapter != null && !adapter.isEmpty());
+ final MenuItem itemSearchCallLog = menu.findItem(R.id.search_calllog);
+ if (mInSearchUi) {
+ if (itemDeleteAll != null) {
+ itemDeleteAll.setVisible(false);
+ }
+ if (itemSearchCallLog != null) {
+ itemSearchCallLog.setVisible(false);
+ }
+ } else {
+ if (mSearchFragment != null && itemSearchCallLog != null) {
+ final CallLogAdapter adapter = mSearchFragment.getAdapter();
+ itemSearchCallLog.setVisible(adapter != null
+ && !adapter.isEmpty());
+ }
+ // If onPrepareOptionsMenu is called before fragments loaded. Don't
+ // do anything.
+ if (mAllCallsFragment != null && itemDeleteAll != null) {
+ final CallLogAdapter adapter = mAllCallsFragment.getAdapter();
+ itemDeleteAll.setVisible(adapter != null && !adapter.isEmpty());
+ }
+ if (mMSimCallsFragment != null && itemDeleteAll != null) {
+ final CallLogAdapter adapter = mMSimCallsFragment.getAdapter();
+ itemDeleteAll.setVisible(adapter != null && !adapter.isEmpty());
+ }
}
return true;
}
@@ -180,14 +310,18 @@ public class CallLogActivity extends Activity implements
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
- case android.R.id.home:
- final Intent intent = new Intent(this, DialtactsActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- startActivity(intent);
- return true;
- case R.id.delete_all:
- ClearCallLogDialog.show(getFragmentManager());
- return true;
+ case android.R.id.home:
+ final Intent intent = new Intent(this, DialtactsActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ startActivity(intent);
+ return true;
+ case R.id.delete_all:
+ onDelCallLog();
+ return true;
+ case R.id.search_calllog:
+ enterSearchUi();
+ return true;
+
}
return super.onOptionsItemSelected(item);
}
@@ -196,4 +330,219 @@ public class CallLogActivity extends Activity implements
public void onDateSet(long from, long to) {
mStatsFragment.onDateSet(from, to);
}
+
+ private void onDelCallLog() {
+ Intent intent = new Intent(
+ "com.android.contacts.action.MULTI_PICK_CALL");
+ startActivity(intent);
+ }
+
+ private void enterSearchUi() {
+ if (mSearchFragment == null) {
+ return;
+ }
+ if (mSearchView == null) {
+ prepareSearchView();
+ }
+ final ActionBar actionBar = getActionBar();
+
+ mSearchView.setQuery(null, true);
+ mSearchView.requestFocus();
+
+ actionBar.setDisplayShowCustomEnabled(true);
+ actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
+
+ for (int i = 0; i < mViewPagerAdapter.getCount(); i++) {
+ updateFragmentVisibility(i, false /* not visible */);
+ }
+
+ mSearchFragment.setUserVisibleHint(true);
+ final FragmentTransaction transaction = getFragmentManager()
+ .beginTransaction();
+ transaction.show(mSearchFragment);
+ transaction.commitAllowingStateLoss();
+ mViewPager.setVisibility(View.GONE);
+
+ // We need to call this and onActionViewCollapsed() manually, since we
+ // are using a custom
+ // layout instead of asking the search menu item to take care of
+ // SearchView.
+ mSearchView.onActionViewExpanded();
+ mInSearchUi = true;
+ }
+
+ private void updateFragmentVisibility(int position, boolean visibility) {
+ if (position >= TAB_INDEX_ALL) {
+ final Fragment fragment = getFragmentAt(position);
+ if (fragment != null) {
+ fragment.setMenuVisibility(visibility);
+ fragment.setUserVisibleHint(visibility);
+ }
+ }
+ }
+
+ private Fragment getFragmentAt(int position) {
+ switch (position) {
+ case TAB_INDEX_ALL:
+ if (MSimTelephonyManager.getDefault().isMultiSimEnabled()) {
+ return mMSimCallsFragment;
+ } else {
+ return mAllCallsFragment;
+ }
+ case TAB_INDEX_MISSED:
+ return mMissedCallsFragment;
+ case TAB_INDEX_STATS:
+ return mStatsFragment;
+ default:
+ throw new IllegalStateException("Unknown fragment index: "
+ + position);
+ }
+ }
+
+ private void initSearchFragment() {
+ final FragmentManager fm = getFragmentManager();
+ if (mSearchFragment == null) {
+ mSearchFragment = (CallLogSearchFragment) fm.findFragmentByTag("search");
+ }
+ if (mSearchFragment != null) {
+ fm.beginTransaction().hide(mSearchFragment).commit();
+ return;
+ }
+ final FragmentTransaction ft = fm.beginTransaction();
+ final Fragment searchFragment = new CallLogSearchFragment();
+ searchFragment.setUserVisibleHint(false);
+ ft.add(R.id.calllog_frame, searchFragment, "search");
+ ft.hide(searchFragment);
+ ft.commitAllowingStateLoss();
+ }
+
+ private void prepareSearchView() {
+ final LayoutInflater inflater = LayoutInflater.from(
+ new ContextThemeWrapper(this, R.style.DialtactsSearchTheme));
+ final View searchViewLayout = inflater.inflate(R.layout.custom_action_bar, null);
+ mSearchView = (SearchView) searchViewLayout.findViewById(R.id.search_view);
+ mSearchView.setOnQueryTextListener(mPhoneSearchQueryTextListener);
+ mSearchView.setOnCloseListener(mPhoneSearchCloseListener);
+ mSearchView.setQueryHint(getString(R.string.calllog_search_hint));
+ mSearchView.setIconifiedByDefault(true);
+ mSearchView.setIconified(false);
+
+ mSearchView.setOnQueryTextFocusChangeListener(new OnFocusChangeListener() {
+ @Override
+ public void onFocusChange(View view, boolean hasFocus) {
+ if (hasFocus) {
+ showInputMethod(view.findFocus());
+ }
+ }
+ });
+
+ getActionBar().setCustomView(searchViewLayout,
+ new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
+ }
+
+ private void showInputMethod(View view) {
+ InputMethodManager imm = (InputMethodManager)
+ getSystemService(Context.INPUT_METHOD_SERVICE);
+ if (imm != null) {
+ if (!imm.showSoftInput(view, 0)) {
+ Log.w(TAG, "Failed to show soft input method.");
+ }
+ }
+ }
+
+ private void hideInputMethod(View view) {
+ InputMethodManager imm = (InputMethodManager)
+ getSystemService(Context.INPUT_METHOD_SERVICE);
+ if (imm != null && view != null) {
+ imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
+ }
+ }
+
+ /**
+ * Listener used to send search queries to the phone search fragment.
+ */
+ private final OnQueryTextListener mPhoneSearchQueryTextListener = new OnQueryTextListener() {
+ @Override
+ public boolean onQueryTextSubmit(String query) {
+ View view = getCurrentFocus();
+ if (view != null) {
+ hideInputMethod(view);
+ view.clearFocus();
+ }
+ return true;
+ }
+
+ @Override
+ public boolean onQueryTextChange(String newText) {
+ // Show search result with non-empty text. Show a bare list
+ // otherwise.
+ if (mSearchFragment != null) {
+ mSearchFragment.setQueryString(newText);
+ }
+ return true;
+ }
+ };
+
+ /**
+ * Listener used to handle the "close" button on the right side of {@link SearchView}.
+ * If some text is in the search view, this will clean it up. Otherwise this will exit
+ * the search UI and let users go back to usual Phone UI.
+ *
+ * This does _not_ handle back button.
+ */
+ private final OnCloseListener mPhoneSearchCloseListener = new OnCloseListener() {
+ @Override
+ public boolean onClose() {
+ if (!TextUtils.isEmpty(mSearchView.getQuery())) {
+ mSearchView.setQuery(null, true);
+ }
+ return true;
+ }
+ };
+
+ @Override
+ public void onBackPressed() {
+ if (mInSearchUi) {
+ // We should let the user go back to usual screens with tabs.
+ exitSearchUi();
+ } else {
+ super.onBackPressed();
+ }
+ }
+
+ private void exitSearchUi() {
+ final ActionBar actionBar = getActionBar();
+ if (mSearchFragment != null) {
+ mSearchFragment.setUserVisibleHint(false);
+
+ final FragmentTransaction transaction = getFragmentManager()
+ .beginTransaction();
+ transaction.hide(mSearchFragment);
+ transaction.commitAllowingStateLoss();
+
+ }
+
+ // We want to hide SearchView and show Tabs. Also focus on previously
+ // selected one.
+ actionBar.setDisplayShowCustomEnabled(false);
+ if (!MSimTelephonyManager.getDefault().isMultiSimEnabled()) {
+ actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
+ }
+
+ for (int i = 0; i < mViewPagerAdapter.getCount(); i++) {
+ updateFragmentVisibility(i, i == mViewPager.getCurrentItem());
+ }
+
+ mViewPager.setVisibility(View.VISIBLE);
+
+ hideInputMethod(getCurrentFocus());
+
+ // Request to update option menu.
+ invalidateOptionsMenu();
+
+ // See comments in onActionViewExpanded()
+ mSearchView.onActionViewCollapsed();
+ mSearchView.clearFocus();
+ mInSearchUi = false;
+ }
}
diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java
index b195a13cb..26664fddd 100644..100755
--- a/src/com/android/dialer/calllog/CallLogAdapter.java
+++ b/src/com/android/dialer/calllog/CallLogAdapter.java
@@ -21,8 +21,11 @@ import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.database.Cursor;
+import android.database.sqlite.SQLiteFullException;
import android.net.Uri;
import android.provider.CallLog.Calls;
+import android.provider.ContactsContract.PhoneLookup;
+import android.telephony.MSimTelephonyManager;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
@@ -36,6 +39,7 @@ import com.android.common.widget.GroupingListAdapter;
import com.android.contacts.common.ContactPhotoManager;
import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
import com.android.contacts.common.util.UriUtils;
+import com.android.dialer.DialtactsActivity;
import com.android.dialer.PhoneCallDetails;
import com.android.dialer.PhoneCallDetailsHelper;
import com.android.dialer.R;
@@ -91,6 +95,8 @@ public class CallLogAdapter extends GroupingListAdapter
private String mStatsLabel = null;
+ private String mFilterString;
+
/** Listener for the primary or secondary actions in the list.
* Primary opens the call details.
* Secondary calls or plays.
@@ -101,6 +107,15 @@ public class CallLogAdapter extends GroupingListAdapter
startActivityForAction(view);
}
};
+
+ private final View.OnLongClickListener mPrimaryActionLongClickListener
+ = new View.OnLongClickListener() {
+ @Override
+ public boolean onLongClick(View v) {
+ // Override this method to show context menu
+ return false;
+ }
+ };
private void startActivityForAction(View view) {
final IntentProvider intentProvider = (IntentProvider) view.getTag();
@@ -136,7 +151,7 @@ public class CallLogAdapter extends GroupingListAdapter
mAdapterHelper = new CallLogAdapterHelper(context, this,
contactInfoHelper, mPhoneNumberDisplayHelper);
PhoneCallDetailsHelper phoneCallDetailsHelper = new PhoneCallDetailsHelper(
- resources, callTypeHelper, mPhoneNumberUtilsWrapper);
+ mContext, callTypeHelper, mPhoneNumberUtilsWrapper);
mCallLogViewsHelper =
new CallLogListItemHelper(
phoneCallDetailsHelper, mPhoneNumberDisplayHelper, resources);
@@ -208,6 +223,7 @@ public class CallLogAdapter extends GroupingListAdapter
// Get the views to bind to.
CallLogListItemViews views = CallLogListItemViews.fromView(view);
views.primaryActionView.setOnClickListener(mActionListener);
+ views.primaryActionView.setOnLongClickListener(mPrimaryActionLongClickListener);
views.secondaryActionButtonView.setOnClickListener(mActionListener);
view.setTag(views);
}
@@ -232,6 +248,8 @@ public class CallLogAdapter extends GroupingListAdapter
final long duration = c.getLong(CallLogQuery.DURATION);
final int callType = c.getInt(CallLogQuery.CALL_TYPE);
final String countryIso = c.getString(CallLogQuery.COUNTRY_ISO);
+ final int subscription = c.getInt(CallLogQuery.SUBSCRIPTION);
+ final int durationType = c.getInt(CallLogQuery.DURATION_TYPE);
final ContactInfo cachedContactInfo = getContactInfoFromCallLog(c);
@@ -241,7 +259,8 @@ public class CallLogAdapter extends GroupingListAdapter
// Primary action is always to call, if possible.
if (PhoneNumberUtilsWrapper.canPlaceCallsTo(number, numberPresentation)) {
// Sets the primary action to call the number.
- views.primaryActionView.setTag(IntentProvider.getReturnCallIntentProvider(number));
+ views.primaryActionView.setTag(IntentProvider.getReturnCallIntentProvider(number,
+ subscription));
} else {
views.primaryActionView.setTag(null);
}
@@ -252,12 +271,22 @@ public class CallLogAdapter extends GroupingListAdapter
String voicemailUri = c.getString(CallLogQuery.VOICEMAIL_URI);
final long rowId = c.getLong(CallLogQuery.ID);
views.secondaryActionButtonView.setTag(
- IntentProvider.getPlayVoicemailIntentProvider(rowId, voicemailUri));
+ IntentProvider.getPlayVoicemailIntentProvider(rowId, voicemailUri, subscription));
+ views.subIconView.setVisibility(View.GONE);
} else {
// Store the call details information.
views.secondaryActionButtonView.setTag(
IntentProvider.getCallDetailIntentProvider(
- getCursor(), c.getPosition(), c.getLong(CallLogQuery.ID), count));
+ getCursor(), c.getPosition(), c.getLong(CallLogQuery.ID), count,
+ subscription));
+
+ if (MSimTelephonyManager.getDefault().isMultiSimEnabled()) {
+ views.subIconView.setVisibility(View.VISIBLE);
+ views.subIconView.setImageDrawable(
+ DialtactsActivity.getMultiSimIcon(mContext, subscription));
+ } else {
+ views.subIconView.setVisibility(View.GONE);
+ }
}
} else {
// No action enabled.
@@ -282,18 +311,19 @@ public class CallLogAdapter extends GroupingListAdapter
if (TextUtils.isEmpty(name)) {
details = new PhoneCallDetails(number, numberPresentation,
formattedNumber, countryIso, geocode, callTypes, date,
- duration);
+ duration, subscription, durationType);
} else {
details = new PhoneCallDetails(number, numberPresentation,
formattedNumber, countryIso, geocode, callTypes, date,
- duration, name, ntype, label, lookupUri, photoUri, sourceType);
+ duration, name, ntype, label, lookupUri, photoUri, sourceType,
+ subscription, durationType);
}
final boolean isNew = c.getInt(CallLogQuery.IS_READ) == 0;
// New items also use the highlighted version of the text.
final boolean isHighlighted = isNew;
mCallLogViewsHelper.setPhoneCallDetails(views, details, isHighlighted,
- mShowSecondaryActionButton);
+ mShowSecondaryActionButton, mFilterString);
int contactType = ContactPhotoManager.TYPE_DEFAULT;
@@ -489,14 +519,18 @@ public class CallLogAdapter extends GroupingListAdapter
if (!needsUpdate) return;
- if (countryIso == null) {
- mContext.getContentResolver().update(Calls.CONTENT_URI_WITH_VOICEMAIL, values,
- Calls.NUMBER + " = ? AND " + Calls.COUNTRY_ISO + " IS NULL",
- new String[]{ number });
- } else {
- mContext.getContentResolver().update(Calls.CONTENT_URI_WITH_VOICEMAIL, values,
- Calls.NUMBER + " = ? AND " + Calls.COUNTRY_ISO + " = ?",
- new String[]{ number, countryIso });
+ try {
+ if (countryIso == null) {
+ mContext.getContentResolver().update(Calls.CONTENT_URI_WITH_VOICEMAIL, values,
+ Calls.NUMBER + " = ? AND " + Calls.COUNTRY_ISO + " IS NULL",
+ new String[]{ number });
+ } else {
+ mContext.getContentResolver().update(Calls.CONTENT_URI_WITH_VOICEMAIL, values,
+ Calls.NUMBER + " = ? AND " + Calls.COUNTRY_ISO + " = ?",
+ new String[]{ number, countryIso });
+ }
+ } catch (SQLiteFullException e) {
+ e.printStackTrace();
}
}
@@ -599,4 +633,8 @@ public class CallLogAdapter extends GroupingListAdapter
public String getStatsLabel() {
return mStatsLabel;
}
+
+ public void setQueryString(String filter) {
+ mFilterString = filter;
+ }
}
diff --git a/src/com/android/dialer/calllog/CallLogFragment.java b/src/com/android/dialer/calllog/CallLogFragment.java
index 264db3a94..dc3dfd434 100644
--- a/src/com/android/dialer/calllog/CallLogFragment.java
+++ b/src/com/android/dialer/calllog/CallLogFragment.java
@@ -21,6 +21,7 @@ import android.app.KeyguardManager;
import android.app.ListFragment;
import android.content.Context;
import android.content.Intent;
+import android.content.res.Resources;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
@@ -29,17 +30,26 @@ import android.os.Handler;
import android.provider.CallLog;
import android.provider.CallLog.Calls;
import android.provider.ContactsContract;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Intents.Insert;
import android.telephony.PhoneNumberUtils;
import android.telephony.TelephonyManager;
+import android.view.ContextMenu;
+import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
+import android.view.MenuInflater;
+import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ListView;
import android.widget.TextView;
import com.android.common.io.MoreCloseables;
import com.android.contacts.common.CallUtil;
import com.android.contacts.common.GeoUtil;
+import com.android.contacts.common.MoreContactUtils;
import com.android.dialer.R;
import com.android.dialer.util.EmptyLoader;
import com.android.dialer.voicemail.VoicemailStatusHelper;
@@ -47,6 +57,8 @@ import com.android.dialer.voicemail.VoicemailStatusHelper.StatusMessage;
import com.android.dialer.voicemail.VoicemailStatusHelperImpl;
import com.android.dialerbind.ObjectFactory;
import com.android.internal.telephony.ITelephony;
+import com.android.internal.telephony.MSimConstants;
+import com.android.internal.telephony.PhoneConstants;
import java.util.List;
@@ -63,26 +75,32 @@ public class CallLogFragment extends ListFragment
*/
private static final int EMPTY_LOADER_ID = 0;
- private CallLogAdapter mAdapter;
- private CallLogQueryHandler mCallLogQueryHandler;
+ protected CallLogAdapter mAdapter;
+ protected CallLogQueryHandler mCallLogQueryHandler;
private boolean mScrollToTop;
/** Whether there is at least one voicemail source installed. */
- private boolean mVoicemailSourcesAvailable = false;
-
- private VoicemailStatusHelper mVoicemailStatusHelper;
- private View mStatusMessageView;
- private TextView mStatusMessageText;
- private TextView mStatusMessageAction;
+ protected boolean mVoicemailSourcesAvailable = false;
+
+ protected VoicemailStatusHelper mVoicemailStatusHelper;
+ protected View mStatusMessageView;
+ protected TextView mStatusMessageText;
+ protected TextView mStatusMessageAction;
+
+ private static final String SMS = "sms";
+ private Context mContext;
+ private PhoneNumberUtilsWrapper mPhoneNumberUtilsWrapper;
+ private Resources mResources;
+ private String mNumber = null;
private KeyguardManager mKeyguardManager;
private boolean mEmptyLoaderRunning;
private boolean mCallLogFetched;
private boolean mVoicemailStatusFetched;
- private final Handler mHandler = new Handler();
+ protected final Handler mHandler = new Handler();
- private TelephonyManager mTelephonyManager;
+ protected TelephonyManager mTelephonyManager;
private class CustomContentObserver extends ContentObserver {
public CustomContentObserver() {
@@ -93,40 +111,54 @@ public class CallLogFragment extends ListFragment
mRefreshDataRequired = true;
}
}
+ private class DataContentObserver extends ContentObserver {
+ public DataContentObserver() {
+ super(mHandler);
+ }
+ @Override
+ public void onChange(boolean selfChange) {
+ if (mAdapter != null) {
+ mAdapter.invalidateCache();
+ }
+ }
+ }
+
// See issue 6363009
private final ContentObserver mCallLogObserver = new CustomContentObserver();
private final ContentObserver mContactsObserver = new CustomContentObserver();
+ private final ContentObserver mDataObserver = new DataContentObserver();
private boolean mRefreshDataRequired = true;
// Exactly same variable is in Fragment as a package private.
private boolean mMenuVisible = true;
// Default to all calls.
- private int mCallTypeFilter = CallLogQueryHandler.CALL_TYPE_ALL;
+ protected int mCallTypeFilter = CallLogQueryHandler.CALL_TYPE_ALL;
// Log limit - if no limit is specified, then the default in {@link CallLogQueryHandler}
// will be used.
private int mLogLimit = -1;
- public CallLogFragment() {
- this(CallLogQueryHandler.CALL_TYPE_ALL, -1);
- }
-
- public CallLogFragment(int filterType) {
- this(filterType, -1);
+ public static CallLogFragment newInstance(int filterType) {
+ CallLogFragment f = new CallLogFragment();
+ Bundle args = new Bundle();
+ args.putInt("filter", filterType);
+ f.setArguments(args);
+ return f;
}
- public CallLogFragment(int filterType, int logLimit) {
- super();
- mCallTypeFilter = filterType;
- mLogLimit = logLimit;
+ public CallLogFragment() {
}
@Override
public void onCreate(Bundle state) {
super.onCreate(state);
+ Bundle args = getArguments();
+ mCallTypeFilter = args != null ? args.getInt("filter", -1) : -1;
+ mLogLimit = args != null ? args.getInt("limit", -1) : -1;
+
mCallLogQueryHandler = new CallLogQueryHandler(getActivity().getContentResolver(),
this, mLogLimit);
mKeyguardManager =
@@ -135,6 +167,8 @@ public class CallLogFragment extends ListFragment
mCallLogObserver);
getActivity().getContentResolver().registerContentObserver(
ContactsContract.Contacts.CONTENT_URI, true, mContactsObserver);
+ getActivity().getContentResolver().registerContentObserver(
+ ContactsContract.Data.CONTENT_URI, true, mDataObserver);
setHasOptionsMenu(true);
updateCallList(mCallTypeFilter);
}
@@ -203,7 +237,7 @@ public class CallLogFragment extends ListFragment
}
/** Sets whether there are any voicemail sources available in the platform. */
- private void setVoicemailSourcesAvailable(boolean voicemailSourcesAvailable) {
+ protected void setVoicemailSourcesAvailable(boolean voicemailSourcesAvailable) {
if (mVoicemailSourcesAvailable == voicemailSourcesAvailable) return;
mVoicemailSourcesAvailable = voicemailSourcesAvailable;
@@ -238,6 +272,138 @@ public class CallLogFragment extends ListFragment
}
setListAdapter(mAdapter);
getListView().setItemsCanFocus(true);
+ registerForContextMenu(getListView());
+ }
+
+ @Override
+ public void onCreateContextMenu(ContextMenu menu, View v,
+ ContextMenuInfo menuInfo) {
+ super.onCreateContextMenu(menu, v, menuInfo);
+
+ MenuInflater inflater = getActivity().getMenuInflater();
+ inflater.inflate(R.menu.call_log_context_menu_options, menu);
+ final MenuItem ipCallBySlot1MenuItem = menu.findItem(R.id.menu_ip_call_by_slot1);
+ final MenuItem ipCallBySlot2MenuItem = menu.findItem(R.id.menu_ip_call_by_slot2);
+ final MenuItem editBeforeCallMenuItem = menu.findItem(R.id.menu_edit_before_call);
+ final MenuItem sendTextMessageMenuItem = menu.findItem(R.id.menu_send_text_message);
+ final MenuItem addToContactMenuItem = menu.findItem(R.id.menu_add_to_contacts);
+
+ AdapterView.AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
+ mNumber = getValidCallLogNumber(info.position);
+
+ menu.setHeaderTitle(mNumber);
+
+ if (MoreContactUtils.isMultiSimEnable(mContext, MSimConstants.SUB1)) {
+ String sub1Name = MoreContactUtils.getSimSpnName(MSimConstants.SUB1);
+ ipCallBySlot1MenuItem.setTitle(getActivity().getString(
+ com.android.contacts.common.R.string.ip_call_by_slot, sub1Name));
+ ipCallBySlot1MenuItem.setVisible(true);
+ } else {
+ ipCallBySlot1MenuItem.setVisible(false);
+ }
+ if (MoreContactUtils.isMultiSimEnable(mContext, MSimConstants.SUB2)) {
+ String sub2Name = MoreContactUtils.getSimSpnName(MSimConstants.SUB2);
+ ipCallBySlot2MenuItem.setTitle(getActivity().getString(
+ com.android.contacts.common.R.string.ip_call_by_slot, sub2Name));
+ ipCallBySlot2MenuItem.setVisible(true);
+ } else {
+ ipCallBySlot2MenuItem.setVisible(false);
+ }
+
+ mResources = getResources();
+ mPhoneNumberUtilsWrapper = new PhoneNumberUtilsWrapper();
+ final boolean canPlaceCallsTo = mPhoneNumberUtilsWrapper.canPlaceCallsTo(mNumber,
+ CallLog.Calls.PRESENTATION_ALLOWED);
+ final boolean isVoicemailNumber = mPhoneNumberUtilsWrapper.isVoicemailNumber(mNumber);
+ final boolean isSipNumber = mPhoneNumberUtilsWrapper.isSipNumber(mNumber);
+ if (canPlaceCallsTo && !isSipNumber && !isVoicemailNumber) {
+ editBeforeCallMenuItem.setVisible(true);
+ } else {
+ editBeforeCallMenuItem.setVisible(false);
+ }
+
+ if (mPhoneNumberUtilsWrapper.canSendSmsTo(mNumber, CallLog.Calls.PRESENTATION_ALLOWED)) {
+ sendTextMessageMenuItem.setVisible(true);
+ } else {
+ sendTextMessageMenuItem.setVisible(false);
+ }
+ String mName = getValidCallLogName(info.position);
+ if (mName == null) {
+ addToContactMenuItem.setVisible(true);
+ } else {
+ addToContactMenuItem.setVisible(false);
+ }
+ }
+
+ @Override
+ public boolean onContextItemSelected(MenuItem item) {
+ AdapterView.AdapterContextMenuInfo menuInfo;
+ try {
+ menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
+ } catch (Exception e) {
+ return false;
+ }
+ mNumber = getValidCallLogNumber(menuInfo.position);
+
+ switch (item.getItemId()) {
+ case R.id.menu_ip_call_by_slot1:
+ ipCallBySlot(MSimConstants.SUB1, menuInfo.position, mNumber);
+ return true;
+ case R.id.menu_ip_call_by_slot2:
+ ipCallBySlot(MSimConstants.SUB2, menuInfo.position, mNumber);
+ return true;
+ case R.id.menu_edit_before_call:
+ Intent editIntent = new Intent(Intent.ACTION_DIAL, CallUtil.getCallUri(mNumber));
+ startActivity(editIntent);
+ return true;
+ case R.id.menu_send_text_message:
+ Intent smsIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
+ SMS, mNumber, null));
+ startActivity(smsIntent);
+ return true;
+ case R.id.menu_add_to_contacts:
+ final CharSequence digits = (CharSequence) mNumber;
+ startActivity(getAddToContactIntent(digits));
+ return true;
+ default:
+ throw new IllegalArgumentException("Unknown menu option " + item.getItemId());
+ }
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ mContext = activity;
+ }
+
+ private void ipCallBySlot(int subscription, int position, String number) {
+ if (MoreContactUtils.isIPNumberExist(getActivity(), subscription)) {
+ Intent callIntent = new Intent(CallUtil.getCallIntent(number));
+ callIntent.putExtra(PhoneConstants.IP_CALL, true);
+ callIntent.putExtra(MSimConstants.SUBSCRIPTION_KEY, subscription);
+ startActivity(callIntent);
+ } else {
+ MoreContactUtils.showNoIPNumberDialog(mContext, subscription);
+ }
+ }
+
+ private static Intent getAddToContactIntent(CharSequence digits) {
+ final Intent addIntent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
+ addIntent.setType(Contacts.CONTENT_ITEM_TYPE);
+ addIntent.putExtra(Insert.PHONE, digits);
+ return addIntent;
+ }
+
+ private String getValidCallLogNumber(int position) {
+ Cursor cursor = null;
+ cursor = (Cursor) mAdapter.getItem(position);
+ return cursor != null ? cursor.getString(CallLogQuery.NUMBER) : "";
+ }
+
+ private String getValidCallLogName(int position) {
+ Cursor cursor = null;
+ cursor = (Cursor) mAdapter.getItem(position);
+ return cursor != null ? cursor.getString(CallLogQuery.CACHED_NAME) : "";
}
/**
@@ -319,6 +485,7 @@ public class CallLogFragment extends ListFragment
mAdapter.changeCursor(null);
getActivity().getContentResolver().unregisterContentObserver(mCallLogObserver);
getActivity().getContentResolver().unregisterContentObserver(mContactsObserver);
+ getActivity().getContentResolver().unregisterContentObserver(mDataObserver);
}
@Override
@@ -454,6 +621,7 @@ public class CallLogFragment extends ListFragment
}
CallLogNotificationsHelper.removeMissedCallNotifications();
CallLogNotificationsHelper.updateVoicemailNotifications(getActivity());
+ CallLogNotificationsHelper.removeMissedVTCallNotifications(getActivity());
}
}
}
diff --git a/src/com/android/dialer/calllog/CallLogListItemHelper.java b/src/com/android/dialer/calllog/CallLogListItemHelper.java
index a85cd019e..25ea3d9fe 100644..100755
--- a/src/com/android/dialer/calllog/CallLogListItemHelper.java
+++ b/src/com/android/dialer/calllog/CallLogListItemHelper.java
@@ -50,6 +50,12 @@ import com.android.dialer.R;
mResources = resources;
}
+ public void setPhoneCallDetails(CallLogListItemViews views, PhoneCallDetails details,
+ boolean isHighlighted, boolean showSecondaryActionButton) {
+ setPhoneCallDetails(views, details, isHighlighted,
+ showSecondaryActionButton, null);
+ }
+
/**
* Sets the name, label, and number for a contact.
*
@@ -59,9 +65,9 @@ import com.android.dialer.R;
* @param showSecondaryActionButton whether to show the secondary action button or not
*/
public void setPhoneCallDetails(CallLogListItemViews views, PhoneCallDetails details,
- boolean isHighlighted, boolean showSecondaryActionButton) {
+ boolean isHighlighted, boolean showSecondaryActionButton, String filter) {
mPhoneCallDetailsHelper.setPhoneCallDetails(views.phoneCallDetailsViews, details,
- isHighlighted);
+ isHighlighted, filter);
boolean canPlay = details.callTypes[0] == Calls.VOICEMAIL_TYPE;
// Set the accessibility text for the contact badge
diff --git a/src/com/android/dialer/calllog/CallLogListItemViews.java b/src/com/android/dialer/calllog/CallLogListItemViews.java
index a3789569e..322a14885 100644
--- a/src/com/android/dialer/calllog/CallLogListItemViews.java
+++ b/src/com/android/dialer/calllog/CallLogListItemViews.java
@@ -40,6 +40,8 @@ public final class CallLogListItemViews {
public final View secondaryActionView;
/** The secondary action button on the entry. */
public final ImageView secondaryActionButtonView;
+ /** The sub icon to mark the call action. */
+ public final ImageView subIconView;
/** The details of the phone call. */
public final PhoneCallDetailsViews phoneCallDetailsViews;
/** The text of the header of a section. */
@@ -47,12 +49,13 @@ public final class CallLogListItemViews {
private CallLogListItemViews(QuickContactBadge quickContactView, View primaryActionView,
View secondaryActionView, ImageView secondaryActionButtonView,
- PhoneCallDetailsViews phoneCallDetailsViews,
+ ImageView subIconView, PhoneCallDetailsViews phoneCallDetailsViews,
TextView listHeaderTextView) {
this.quickContactView = quickContactView;
this.primaryActionView = primaryActionView;
this.secondaryActionView = secondaryActionView;
this.secondaryActionButtonView = secondaryActionButtonView;
+ this.subIconView = subIconView;
this.phoneCallDetailsViews = phoneCallDetailsViews;
this.listHeaderTextView = listHeaderTextView;
}
@@ -63,6 +66,7 @@ public final class CallLogListItemViews {
view.findViewById(R.id.primary_action_view),
view.findViewById(R.id.secondary_action_view),
(ImageView) view.findViewById(R.id.secondary_action_icon),
+ (ImageView) view.findViewById(R.id.call_action_sub_icon),
PhoneCallDetailsViews.fromView(view),
(TextView) view.findViewById(R.id.call_log_header));
}
@@ -74,6 +78,7 @@ public final class CallLogListItemViews {
new View(context),
new View(context),
new ImageView(context),
+ new ImageView(context),
PhoneCallDetailsViews.createForTest(context),
new TextView(context));
}
diff --git a/src/com/android/dialer/calllog/CallLogNotificationsHelper.java b/src/com/android/dialer/calllog/CallLogNotificationsHelper.java
index 6ce66f08f..3165744b6 100644
--- a/src/com/android/dialer/calllog/CallLogNotificationsHelper.java
+++ b/src/com/android/dialer/calllog/CallLogNotificationsHelper.java
@@ -20,6 +20,7 @@ import android.content.Context;
import android.content.Intent;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.os.SystemProperties;
import android.util.Log;
import com.android.internal.telephony.ITelephony;
@@ -52,4 +53,18 @@ public class CallLogNotificationsHelper {
serviceIntent.setAction(CallLogNotificationsService.ACTION_UPDATE_NOTIFICATIONS);
context.startService(serviceIntent);
}
+
+ public static boolean isVTSupported() {
+ return SystemProperties.getBoolean("persist.radio.csvt.enabled"
+ /* TelephonyProperties.PROPERTY_CSVT_ENABLED*/, false);
+ }
+
+ /** Send broadcast to let VideoCall app cancel the missed vtcall notifications. */
+ public static void removeMissedVTCallNotifications(Context context) {
+ if (isVTSupported()) {
+ Intent intent = new Intent("com.borqs.videocall.action.clearMissedVTCall");
+ intent.putExtra("update_calllog", false);
+ context.sendBroadcast(intent);
+ }
+ }
}
diff --git a/src/com/android/dialer/calllog/CallLogQuery.java b/src/com/android/dialer/calllog/CallLogQuery.java
index 4ae6afd36..c90db69cf 100644..100755
--- a/src/com/android/dialer/calllog/CallLogQuery.java
+++ b/src/com/android/dialer/calllog/CallLogQuery.java
@@ -44,6 +44,8 @@ public final class CallLogQuery {
Calls.CACHED_FORMATTED_NUMBER, // 15
Calls.IS_READ, // 16
Calls.NUMBER_PRESENTATION, // 17
+ Calls.SUBSCRIPTION, // 18
+ Calls.DURATION_TYPE // 19
};
public static final int ID = 0;
@@ -64,4 +66,6 @@ public final class CallLogQuery {
public static final int CACHED_FORMATTED_NUMBER = 15;
public static final int IS_READ = 16;
public static final int NUMBER_PRESENTATION = 17;
+ public static final int SUBSCRIPTION = 18;
+ public static final int DURATION_TYPE = 19;
}
diff --git a/src/com/android/dialer/calllog/CallLogQueryHandler.java b/src/com/android/dialer/calllog/CallLogQueryHandler.java
index 39926767a..4f297d16b 100644..100755
--- a/src/com/android/dialer/calllog/CallLogQueryHandler.java
+++ b/src/com/android/dialer/calllog/CallLogQueryHandler.java
@@ -33,6 +33,7 @@ import android.os.Message;
import android.provider.CallLog.Calls;
import android.provider.VoicemailContract.Status;
import android.util.Log;
+import android.os.SystemProperties;
import com.android.common.io.MoreCloseables;
import com.android.contacts.common.database.NoNullCursorAsyncQueryHandler;
@@ -70,6 +71,11 @@ public class CallLogQueryHandler extends NoNullCursorAsyncQueryHandler {
*/
public static final int CALL_TYPE_ALL = -1;
+ /**
+ * To specify all slots.
+ */
+ public static final int CALL_SUB_ALL = -1;
+
private final WeakReference<Listener> mListener;
/** The cursor containing the old calls, or null if they have not yet been fetched. */
@@ -138,14 +144,33 @@ public class CallLogQueryHandler extends NoNullCursorAsyncQueryHandler {
* <p>
* It will asynchronously update the content of the list view when the fetch completes.
*/
- public void fetchCalls(int callType, long newerThan) {
+ public void fetchCalls(int callType, long newerThan, int sub) {
cancelFetch();
int requestId = newCallsRequest();
- fetchCalls(QUERY_CALLLOG_TOKEN, requestId, callType, false /* newOnly */, newerThan);
+ fetchCalls(QUERY_CALLLOG_TOKEN, requestId, callType, false /* newOnly */, newerThan, sub);
+ }
+
+ public void fetchCalls(int callType, long newerThan) {
+ fetchCalls(callType, newerThan, CallLogQueryHandler.CALL_SUB_ALL);
}
public void fetchCalls(int callType) {
- fetchCalls(callType, 0);
+ fetchCalls(callType, 0, CallLogQueryHandler.CALL_SUB_ALL);
+ }
+
+ public void fetchCalls(String filter) {
+ cancelFetch();
+ int requestId = newCallsRequest();
+ fetchCalls(QUERY_CALLLOG_TOKEN ,requestId,filter);
+ }
+
+ public void fetchCalls(int token,int requestId,String filter) {
+ String selection = "(" + Calls.NUMBER + " like '%" + filter
+ + "%' or " + Calls.CACHED_NAME + " like '%" + filter + "%' )";
+
+ startQuery(token, requestId, Calls.CONTENT_URI_WITH_VOICEMAIL,
+ CallLogQuery._PROJECTION, selection, null,
+ Calls.DEFAULT_SORT_ORDER);
}
public void fetchVoicemailStatus() {
@@ -155,7 +180,7 @@ public class CallLogQueryHandler extends NoNullCursorAsyncQueryHandler {
/** Fetches the list of calls in the call log. */
private void fetchCalls(int token, int requestId, int callType, boolean newOnly,
- long newerThan) {
+ long newerThan, int sub) {
// We need to check for NULL explicitly otherwise entries with where READ is NULL
// may not match either the query or its negation.
// We consider the calls that are not yet consumed (i.e. IS_READ = 0) as "new".
@@ -172,9 +197,40 @@ public class CallLogQueryHandler extends NoNullCursorAsyncQueryHandler {
where.append(" AND ");
}
// Add a clause to fetch only items of type voicemail.
- where.append(String.format("(%s = ?)", Calls.TYPE));
+ if ((callType == Calls.INCOMING_TYPE) || (callType == Calls.OUTGOING_TYPE)
+ || (callType == Calls.MISSED_TYPE)) {
+ where.append(String.format("(%s = ? OR %s = ?)", Calls.TYPE, Calls.TYPE));
+ } else {
+ where.append(String.format("(%s = ?)", Calls.TYPE));
+ }
// Add a clause to fetch only items newer than the requested date
selectionArgs.add(Integer.toString(callType));
+ if (isVTSupported()) {
+ if (callType == Calls.INCOMING_TYPE) {
+ selectionArgs.add(Integer.toString(CallTypeHelper.INCOMING_CSVT_TYPE));
+ } else if (callType == Calls.OUTGOING_TYPE) {
+ selectionArgs.add(Integer.toString(CallTypeHelper.OUTGOING_CSVT_TYPE));
+ } else if (callType == Calls.MISSED_TYPE) {
+ selectionArgs.add(Integer.toString(CallTypeHelper.MISSED_CSVT_TYPE));
+ }
+ }
+ else {
+ if (callType == Calls.INCOMING_TYPE) {
+ selectionArgs.add(Integer.toString(CallTypeHelper.INCOMING_IMS_TYPE));
+ } else if (callType == Calls.OUTGOING_TYPE) {
+ selectionArgs.add(Integer.toString(CallTypeHelper.OUTGOING_IMS_TYPE));
+ } else if (callType == Calls.MISSED_TYPE) {
+ selectionArgs.add(Integer.toString(CallTypeHelper.MISSED_IMS_TYPE));
+ }
+ }
+ }
+
+ if (sub > CALL_SUB_ALL) {
+ if (where.length() > 0) {
+ where.append(" AND ");
+ }
+ where.append(String.format("(%s = ?)", Calls.SUBSCRIPTION));
+ selectionArgs.add(Integer.toString(sub));
}
if (newerThan > 0) {
@@ -310,4 +366,10 @@ public class CallLogQueryHandler extends NoNullCursorAsyncQueryHandler {
*/
void onCallsFetched(Cursor combinedCursor);
}
+
+ public boolean isVTSupported(){
+ return SystemProperties.getBoolean(
+ "persist.radio.csvt.enabled"
+ /* TelephonyProperties.PROPERTY_CSVT_ENABLED*/, false);
+ }
}
diff --git a/src/com/android/dialer/calllog/CallLogSearchFragment.java b/src/com/android/dialer/calllog/CallLogSearchFragment.java
new file mode 100755
index 000000000..674a99ec1
--- /dev/null
+++ b/src/com/android/dialer/calllog/CallLogSearchFragment.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2014, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation, Inc. nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package com.android.dialer.calllog;
+
+import android.app.ListFragment;
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.database.Cursor;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.net.Uri;
+import android.net.Uri.Builder;
+import android.provider.CallLog.Calls;
+
+import com.android.contacts.common.GeoUtil;
+import com.android.dialer.R;
+import com.android.dialerbind.ObjectFactory;
+
+
+public class CallLogSearchFragment extends CallLogFragment {
+ private String mQueryString;
+
+ @Override
+ public void fetchCalls() {
+ if (TextUtils.isEmpty(mQueryString)) {
+ mCallLogQueryHandler.fetchCalls(CallLogQueryHandler.CALL_TYPE_ALL);
+ } else {
+ mCallLogQueryHandler.fetchCalls(mQueryString);
+ }
+ }
+
+ @Override
+ public void startCallsQuery() {
+ mAdapter.setLoading(true);
+ fetchCalls();
+ }
+
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ mAdapter.setQueryString(mQueryString);
+ startCallsQuery();
+ }
+
+ public void setQueryString(String queryString) {
+ if (!TextUtils.equals(mQueryString, queryString)) {
+ mQueryString = queryString;
+ if (mAdapter != null) {
+ mAdapter.setQueryString(mQueryString);
+ startCallsQuery();
+ }
+ }
+ }
+
+ public String getQueryString() {
+ return mQueryString;
+ }
+}
diff --git a/src/com/android/dialer/calllog/CallTypeHelper.java b/src/com/android/dialer/calllog/CallTypeHelper.java
index 1c4f44f23..c0cc0c826 100644
--- a/src/com/android/dialer/calllog/CallTypeHelper.java
+++ b/src/com/android/dialer/calllog/CallTypeHelper.java
@@ -38,6 +38,16 @@ public class CallTypeHelper {
/** Color used to identify new voicemail calls. */
private final int mNewVoicemailColor;
+ //add for csvt call log type
+ public static final int INCOMING_CSVT_TYPE = 5;
+ public static final int OUTGOING_CSVT_TYPE = 6;
+ public static final int MISSED_CSVT_TYPE = 7;
+
+ // Call log type for ims call
+ public static final int INCOMING_IMS_TYPE = 21;
+ public static final int OUTGOING_IMS_TYPE = 22;
+ public static final int MISSED_IMS_TYPE = 23;
+
public CallTypeHelper(Resources resources) {
// Cache these values so that we do not need to look them up each time.
mIncomingName = resources.getString(R.string.type_incoming);
@@ -63,6 +73,25 @@ public class CallTypeHelper {
case Calls.VOICEMAIL_TYPE:
return mVoicemailName;
+ //add for csvt call log type
+ case INCOMING_CSVT_TYPE:
+ return mIncomingName;
+
+ case OUTGOING_CSVT_TYPE:
+ return mOutgoingName;
+
+ case MISSED_CSVT_TYPE:
+ return mMissedName;
+
+ //add for csvt call log type
+ case INCOMING_IMS_TYPE:
+ return mIncomingName;
+
+ case OUTGOING_IMS_TYPE:
+ return mOutgoingName;
+
+ case MISSED_IMS_TYPE:
+ return mMissedName;
default:
return mMissedName;
}
@@ -72,14 +101,20 @@ public class CallTypeHelper {
public Integer getHighlightedColor(int callType) {
switch (callType) {
case Calls.INCOMING_TYPE:
+ case INCOMING_CSVT_TYPE:
+ case INCOMING_IMS_TYPE:
// New incoming calls are not highlighted.
return null;
case Calls.OUTGOING_TYPE:
+ case OUTGOING_CSVT_TYPE:
+ case OUTGOING_IMS_TYPE:
// New outgoing calls are not highlighted.
return null;
case Calls.MISSED_TYPE:
+ case MISSED_CSVT_TYPE:
+ case MISSED_IMS_TYPE:
return mNewMissedColor;
case Calls.VOICEMAIL_TYPE:
@@ -95,6 +130,7 @@ public class CallTypeHelper {
public static boolean isMissedCallType(int callType) {
return (callType != Calls.INCOMING_TYPE && callType != Calls.OUTGOING_TYPE &&
- callType != Calls.VOICEMAIL_TYPE);
+ callType != Calls.VOICEMAIL_TYPE && callType != INCOMING_CSVT_TYPE &&
+ callType != OUTGOING_CSVT_TYPE);
}
}
diff --git a/src/com/android/dialer/calllog/CallTypeIconsView.java b/src/com/android/dialer/calllog/CallTypeIconsView.java
index a65f2c279..abefb47f8 100644
--- a/src/com/android/dialer/calllog/CallTypeIconsView.java
+++ b/src/com/android/dialer/calllog/CallTypeIconsView.java
@@ -19,6 +19,7 @@ package com.android.dialer.calllog;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
+import android.os.SystemProperties;
import android.provider.CallLog.Calls;
import android.util.AttributeSet;
import android.view.View;
@@ -85,6 +86,33 @@ public class CallTypeIconsView extends View {
return mResources.missed;
case Calls.VOICEMAIL_TYPE:
return mResources.voicemail;
+ //add for csvt call log type
+ case CallTypeHelper.INCOMING_CSVT_TYPE:
+ if (isVTSupported()) {
+ return mResources.csvt_incoming;
+ } else {
+ return mResources.incoming;
+ }
+ case CallTypeHelper.OUTGOING_CSVT_TYPE:
+ if (isVTSupported()) {
+ return mResources.csvt_outgoing;
+ } else {
+ return mResources.outgoing;
+ }
+ case CallTypeHelper.MISSED_CSVT_TYPE:
+ if (isVTSupported()) {
+ return mResources.csvt_missed;
+ } else {
+ return mResources.missed;
+ }
+ //add for ims call log type
+ case CallTypeHelper.INCOMING_IMS_TYPE:
+ return mResources.ims_incoming;
+ case CallTypeHelper.OUTGOING_IMS_TYPE:
+ return mResources.ims_outgoing;
+ case CallTypeHelper.MISSED_IMS_TYPE:
+ return mResources.ims_missed;
+
default:
// It is possible for users to end up with calls with unknown call types in their
// call history, possibly due to 3rd party call log implementations (e.g. to
@@ -115,6 +143,14 @@ public class CallTypeIconsView extends View {
public final Drawable incoming;
public final Drawable outgoing;
public final Drawable missed;
+ //add for csvt call log type
+ public final Drawable csvt_incoming;
+ public final Drawable csvt_outgoing;
+ public final Drawable csvt_missed;
+ //add for ims call log type
+ public final Drawable ims_incoming;
+ public final Drawable ims_outgoing;
+ public final Drawable ims_missed;
public final Drawable voicemail;
public final int iconMargin;
@@ -123,8 +159,24 @@ public class CallTypeIconsView extends View {
incoming = r.getDrawable(R.drawable.ic_call_incoming_holo_dark);
outgoing = r.getDrawable(R.drawable.ic_call_outgoing_holo_dark);
missed = r.getDrawable(R.drawable.ic_call_missed_holo_dark);
+ //add for csvt call log type
+ csvt_incoming = r.getDrawable(R.drawable.ic_video_incoming_holo_dark);
+ csvt_outgoing = r.getDrawable(R.drawable.ic_video_outgoing_holo_dark);
+ csvt_missed = r.getDrawable(R.drawable.ic_video_missed_holo_dark);
+ //add for ims call log type
+ ims_incoming = r.getDrawable(R.drawable.ic_ims_incoming_holo_dark);
+ ims_outgoing = r.getDrawable(R.drawable.ic_ims_outgoing_holo_dark);
+ ims_missed = r.getDrawable(R.drawable.ic_ims_missed_holo_dark);
+
voicemail = r.getDrawable(R.drawable.ic_call_voicemail_holo_dark);
iconMargin = r.getDimensionPixelSize(R.dimen.call_log_icon_margin);
}
}
+
+ //add for csvt call log type
+ private boolean isVTSupported() {
+ return SystemProperties.getBoolean(
+ "persist.radio.csvt.enabled"
+ /* TelephonyProperties.PROPERTY_CSVT_ENABLED*/, false);
+ }
}
diff --git a/src/com/android/dialer/calllog/IntentProvider.java b/src/com/android/dialer/calllog/IntentProvider.java
index da0c69de5..c7d5594fa 100644
--- a/src/com/android/dialer/calllog/IntentProvider.java
+++ b/src/com/android/dialer/calllog/IntentProvider.java
@@ -1,5 +1,8 @@
/*
* Copyright (C) 2011 The Android Open Source Project
+ * Copyright (C) 2013, The Linux Foundation. All rights reserved.
+ *
+ * Not a Contribution.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -22,10 +25,13 @@ import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.provider.CallLog.Calls;
+import android.telephony.PhoneNumberUtils;
import android.util.Log;
import com.android.contacts.common.CallUtil;
+import com.android.contacts.common.MoreContactUtils;
import com.android.dialer.CallDetailActivity;
+import com.android.internal.telephony.MSimConstants;
/**
* Used to create an intent to attach to an action in the call log.
@@ -38,17 +44,31 @@ public abstract class IntentProvider {
public abstract Intent getIntent(Context context);
- public static IntentProvider getReturnCallIntentProvider(final String number) {
+ public static IntentProvider getReturnCallIntentProvider(final String number,
+ final int subscription) {
return new IntentProvider() {
@Override
public Intent getIntent(Context context) {
- return CallUtil.getCallIntent(number);
+ if (MoreContactUtils.getEnabledSimCount() > 1) {
+ Intent intent;
+ if (PhoneNumberUtils.isUriNumber(number)) {
+ intent = new Intent(Intent.ACTION_DIAL,
+ Uri.fromParts(CallUtil.SCHEME_SIP, number, null));
+ } else {
+ intent = new Intent(Intent.ACTION_DIAL,
+ Uri.fromParts(CallUtil.SCHEME_TEL, number, null));
+ }
+ return intent;
+ } else {
+ Intent intent = CallUtil.getCallIntent(number);
+ return intent;
+ }
}
};
}
public static IntentProvider getPlayVoicemailIntentProvider(final long rowId,
- final String voicemailUri) {
+ final String voicemailUri, final int subscription) {
return new IntentProvider() {
@Override
public Intent getIntent(Context context) {
@@ -60,13 +80,15 @@ public abstract class IntentProvider {
Uri.parse(voicemailUri));
}
intent.putExtra(CallDetailActivity.EXTRA_VOICEMAIL_START_PLAYBACK, true);
+ intent.putExtra(MSimConstants.SUBSCRIPTION_KEY, subscription);
return intent;
}
};
}
public static IntentProvider getCallDetailIntentProvider(
- final Cursor cursor, final int position, final long id, final int groupSize) {
+ final Cursor cursor, final int position, final long id, final int groupSize,
+ final int subscription) {
return new IntentProvider() {
@Override
public Intent getIntent(Context context) {
@@ -103,6 +125,7 @@ public abstract class IntentProvider {
intent.setData(ContentUris.withAppendedId(
Calls.CONTENT_URI_WITH_VOICEMAIL, id));
}
+ intent.putExtra(MSimConstants.SUBSCRIPTION_KEY, subscription);
return intent;
}
};
diff --git a/src/com/android/dialer/calllog/MSimCallLogFragment.java b/src/com/android/dialer/calllog/MSimCallLogFragment.java
new file mode 100755
index 000000000..8002b8964
--- /dev/null
+++ b/src/com/android/dialer/calllog/MSimCallLogFragment.java
@@ -0,0 +1,305 @@
+/*
+ * Copyright (C) 2013, The Linux Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation, Inc. nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package com.android.dialer.calllog;
+
+import android.app.Activity;
+import android.content.Context;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.provider.CallLog.Calls;
+import android.telephony.MSimTelephonyManager;
+import android.telephony.PhoneStateListener;
+import android.telephony.TelephonyManager;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemSelectedListener;
+import android.widget.ArrayAdapter;
+import android.widget.Spinner;
+import android.widget.TextView;
+
+import com.android.dialer.DialtactsActivity;
+import com.android.dialer.R;
+import com.android.dialer.voicemail.VoicemailStatusHelperImpl;
+import com.google.common.annotations.VisibleForTesting;
+
+import java.util.List;
+
+/**
+ * Displays a list of call log entries.
+ */
+public class MSimCallLogFragment extends CallLogFragment {
+ private static final String TAG = "MSimCallLogFragment";
+
+ /**
+ * Key for the call log sub saved in the default preference.
+ */
+ private static final String PREFERENCE_KEY_CALLLOG_SUB = "call_log_sub";
+
+ // Add and change for filter call log.
+ private Spinner mFilterSubSpinnerView;
+ private Spinner mFilterStatusSpinnerView;
+
+ // Default to all slots.
+ private int mCallSubFilter = CallLogQueryHandler.CALL_SUB_ALL;
+
+ // The index for call type spinner.
+ private static final int INDEX_CALL_TYPE_ALL = 0;
+ private static final int INDEX_CALL_TYPE_INCOMING = 1;
+ private static final int INDEX_CALL_TYPE_OUTGOING = 2;
+ private static final int INDEX_CALL_TYPE_MISSED = 3;
+ private static final int INDEX_CALL_TYPE_VOICEMAIL = 4;
+
+ private OnItemSelectedListener mSubSelectedListener = new OnItemSelectedListener() {
+
+ @Override
+ public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+ Log.i(TAG, "Sub selected, position: " + position);
+ int sub = position - 1;
+ mCallSubFilter = sub;
+ setSelectedSub(sub);
+ mCallLogQueryHandler.fetchCalls(mCallTypeFilter, 0, mCallSubFilter);
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView<?> parent) {
+ // Do nothing.
+ }
+
+ };
+
+ private OnItemSelectedListener mStatusSelectedListener = new OnItemSelectedListener() {
+
+ @Override
+ public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+ Log.i(TAG, "Status selected, position: " + position);
+ switch (position) {
+ case INDEX_CALL_TYPE_ALL:
+ mCallTypeFilter = CallLogQueryHandler.CALL_TYPE_ALL;
+ break;
+ case INDEX_CALL_TYPE_INCOMING:
+ mCallTypeFilter = Calls.INCOMING_TYPE;
+ break;
+ case INDEX_CALL_TYPE_OUTGOING:
+ mCallTypeFilter = Calls.OUTGOING_TYPE;
+ break;
+ case INDEX_CALL_TYPE_MISSED:
+ mCallTypeFilter = Calls.MISSED_TYPE;
+ break;
+ case INDEX_CALL_TYPE_VOICEMAIL:
+ mCallTypeFilter = Calls.VOICEMAIL_TYPE;
+ break;
+ }
+ mCallLogQueryHandler.fetchCalls(mCallTypeFilter, 0, mCallSubFilter);
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView<?> parent) {
+ // Do nothing.
+ }
+
+ };
+
+ @Override
+ protected void setVoicemailSourcesAvailable(boolean voicemailSourcesAvailable) {
+ if (mVoicemailSourcesAvailable == voicemailSourcesAvailable) return;
+ mVoicemailSourcesAvailable = voicemailSourcesAvailable;
+
+ Activity activity = getActivity();
+ if (activity != null) {
+ // This is so that the options menu content is updated.
+ activity.invalidateOptionsMenu();
+ updateFilterSpinnierViews();
+ }
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
+ View view = inflater.inflate(R.layout.msim_call_log_fragment, container, false);
+ mVoicemailStatusHelper = new VoicemailStatusHelperImpl();
+ mStatusMessageView = view.findViewById(R.id.voicemail_status);
+ mStatusMessageText = (TextView) view.findViewById(R.id.voicemail_status_message);
+ mStatusMessageAction = (TextView) view.findViewById(R.id.voicemail_status_action);
+
+ mFilterSubSpinnerView = (Spinner) view.findViewById(R.id.filter_sub_spinner);
+ mFilterStatusSpinnerView = (Spinner) view.findViewById(R.id.filter_status_spinner);
+
+ // Update the filter views.
+ updateFilterSpinnierViews();
+
+ return view;
+ }
+
+ @Override
+ public void fetchCalls() {
+ mCallLogQueryHandler.fetchCalls(mCallTypeFilter, 0, mCallSubFilter);
+ }
+
+ @Override
+ public void startCallsQuery() {
+ mAdapter.setLoading(true);
+ mCallLogQueryHandler.fetchCalls(mCallTypeFilter, 0, mCallSubFilter);
+ }
+
+ /**
+ * Initialize the filter views content.
+ */
+ private void updateFilterSpinnierViews() {
+ if (mFilterSubSpinnerView == null
+ || mFilterStatusSpinnerView == null) {
+ Log.w(TAG, "The filter view is null, please pay attention!");
+ return;
+ }
+
+ // As the default, the view for filter sub will be visible. But if there is only one
+ // SIM, the view for filter sub needn't display, set it as gone.
+ if (MSimTelephonyManager.getDefault().isMultiSimEnabled()) {
+ mCallSubFilter = getSelectedSub();
+ mFilterSubSpinnerView.setVisibility(View.VISIBLE);
+
+ ArrayAdapter<SpinnerContent> filterSubAdapter = new ArrayAdapter<SpinnerContent>(
+ this.getActivity(), R.layout.call_log_spinner_item, setupSubFilterContent());
+ mFilterSubSpinnerView.setAdapter(filterSubAdapter);
+ mFilterSubSpinnerView.setOnItemSelectedListener(mSubSelectedListener);
+ SpinnerContent.setSpinnerContentValue(mFilterSubSpinnerView, mCallSubFilter);
+ } else {
+ // There is only one SIM, needn't to show this filter.
+ mCallSubFilter = CallLogQueryHandler.CALL_SUB_ALL;
+ mFilterSubSpinnerView.setVisibility(View.GONE);
+ }
+
+ // Update the filter status content.
+ ArrayAdapter<SpinnerContent> filterStatusAdapter = new ArrayAdapter<SpinnerContent>(
+ this.getActivity(), R.layout.call_log_spinner_item, setupStatusFilterContent());
+ mFilterStatusSpinnerView.setAdapter(filterStatusAdapter);
+ mFilterStatusSpinnerView.setOnItemSelectedListener(mStatusSelectedListener);
+ SpinnerContent.setSpinnerContentValue(mFilterStatusSpinnerView, mCallTypeFilter);
+ }
+
+ private SpinnerContent[] setupSubFilterContent() {
+ int count = MSimTelephonyManager.getDefault().getPhoneCount();
+ // Update the filter sub content.
+ SpinnerContent filterSub[] = new SpinnerContent[count + 1];
+ filterSub[0] = new SpinnerContent(CallLogQueryHandler.CALL_SUB_ALL,
+ getString(R.string.call_log_show_all_slots));
+ for (int i = 0; i < count; i++) {
+ filterSub[i + 1] = new SpinnerContent(i,
+ DialtactsActivity.getMultiSimName(getActivity(), i));
+ }
+ return filterSub;
+ }
+
+ private SpinnerContent[] setupStatusFilterContent() {
+ // Didn't show the voice mail item if not available.
+ int statusCount = mVoicemailSourcesAvailable ? 5 : 4;
+ SpinnerContent filterStatus[] = new SpinnerContent[statusCount];
+ for (int i = 0; i < statusCount; i++) {
+ int value = CallLogQueryHandler.CALL_TYPE_ALL;
+ String lable = null;
+ switch (i) {
+ case INDEX_CALL_TYPE_ALL:
+ value = CallLogQueryHandler.CALL_TYPE_ALL;
+ lable = getString(R.string.call_log_all_calls_header);
+ break;
+ case INDEX_CALL_TYPE_INCOMING:
+ value = Calls.INCOMING_TYPE;
+ lable = getString(R.string.call_log_incoming_header);
+ break;
+ case INDEX_CALL_TYPE_OUTGOING:
+ value = Calls.OUTGOING_TYPE;
+ lable = getString(R.string.call_log_outgoing_header);
+ break;
+ case INDEX_CALL_TYPE_MISSED:
+ value = Calls.MISSED_TYPE;
+ lable = getString(R.string.call_log_missed_header);
+ break;
+ case INDEX_CALL_TYPE_VOICEMAIL:
+ value = Calls.VOICEMAIL_TYPE;
+ lable = getString(R.string.call_log_voicemail_header);
+ break;
+ }
+ filterStatus[i] = new SpinnerContent(value, lable);
+ }
+ return filterStatus;
+ }
+
+ /**
+ * @return the saved selected subscription.
+ */
+ private int getSelectedSub() {
+ // Get the saved selected sub, and the default value is display all.
+ int sub = PreferenceManager.getDefaultSharedPreferences(this.getActivity()).getInt(
+ PREFERENCE_KEY_CALLLOG_SUB, CallLogQueryHandler.CALL_SUB_ALL);
+ return sub;
+ }
+
+ /**
+ * Save the selected subscription to preference.
+ */
+ private void setSelectedSub(int sub) {
+ // Save the selected sub to the default preference.
+ PreferenceManager.getDefaultSharedPreferences(this.getActivity()).edit()
+ .putInt(PREFERENCE_KEY_CALLLOG_SUB, sub).commit();
+ }
+
+ /**
+ * To save the spinner content.
+ */
+ private static class SpinnerContent {
+ public final int value;
+ public final String label;
+
+ public static void setSpinnerContentValue(Spinner spinner, int value) {
+ for (int i = 0, count = spinner.getCount(); i < count; i++) {
+ SpinnerContent sc = (SpinnerContent)spinner.getItemAtPosition(i);
+ if (sc.value == value) {
+ spinner.setSelection(i, true);
+ Log.i(TAG, "Set selection for spinner(" + sc + ") with the value: " + value);
+ return;
+ }
+ }
+ }
+
+ public SpinnerContent(int value, String label) {
+ this.value = value;
+ this.label = label;
+ }
+
+ @Override
+ public String toString() {
+ return label;
+ }
+ }
+}
diff --git a/src/com/android/dialer/callstats/CallStatsDetailActivity.java b/src/com/android/dialer/callstats/CallStatsDetailActivity.java
index bab3ba05d..d35610c0e 100644
--- a/src/com/android/dialer/callstats/CallStatsDetailActivity.java
+++ b/src/com/android/dialer/callstats/CallStatsDetailActivity.java
@@ -116,7 +116,9 @@ public class CallStatsDetailActivity extends Activity {
mMissedCount = (TextView) findViewById(R.id.missed_count);
mPieChart = (PieChartView) findViewById(R.id.pie_chart);
- configureActionBar();
+ findViewById(R.id.voicemail_container).setVisibility(View.GONE);
+
+ getActionBar().setDisplayHomeAsUpEnabled(true);
Intent launchIntent = getIntent();
mData = (CallStatsDetails) launchIntent.getParcelableExtra(EXTRA_DETAILS);
@@ -151,7 +153,8 @@ public class CallStatsDetailActivity extends Activity {
// Set the details header, based on the first phone call.
mCallStatsDetailHelper.setCallStatsDetailHeader(mHeaderTextView, mData);
- mCallDetailHeader.updateViews(mNumber, mData.numberPresentation, mData);
+ // TODO: can we pass subscription from here?
+ mCallDetailHeader.updateViews(mNumber, mData.numberPresentation, mData, -1);
final CharSequence displayNumber =
mPhoneNumberDisplayHelper.getDisplayNumber(
@@ -282,14 +285,6 @@ public class CallStatsDetailActivity extends Activity {
mContactInfoHelper.addNumberToBlacklist(mNumber);
}
- private void configureActionBar() {
- ActionBar actionBar = getActionBar();
- if (actionBar != null) {
- actionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP
- | ActionBar.DISPLAY_SHOW_HOME);
- }
- }
-
private void onHomeSelected() {
Intent intent = new Intent(Intent.ACTION_VIEW, Calls.CONTENT_URI);
// This will open the call log even if the detail view has been opened directly.
diff --git a/src/com/android/dialer/callstats/CallStatsFragment.java b/src/com/android/dialer/callstats/CallStatsFragment.java
index fb1e075a9..0b0ad4664 100644
--- a/src/com/android/dialer/callstats/CallStatsFragment.java
+++ b/src/com/android/dialer/callstats/CallStatsFragment.java
@@ -62,6 +62,11 @@ public class CallStatsFragment extends ListFragment implements
AdapterView.OnItemSelectedListener, DoubleDatePickerDialog.OnDateSetListener {
private static final String TAG = "CallStatsFragment";
+ private static final String STATE_KEY_FILTER = "callstats:filter";
+ private static final String STATE_KEY_FROM = "callstats:from";
+ private static final String STATE_KEY_TO = "callstats:to";
+ private static final String STATE_KEY_SORT_DURATION = "callstats:sort_by_duration";
+
private static final int[] CALL_DIRECTION_RESOURCES = new int[] {
R.drawable.ic_call_inout_holo_dark,
R.drawable.ic_call_incoming_holo_dark,
@@ -157,6 +162,17 @@ public class CallStatsFragment extends ListFragment implements
}
@Override
+ public void onViewStateRestored(Bundle savedInstanceState) {
+ super.onViewStateRestored(savedInstanceState);
+ if (savedInstanceState != null) {
+ mCallTypeFilter = savedInstanceState.getInt(STATE_KEY_FILTER);
+ mFilterFrom = savedInstanceState.getLong(STATE_KEY_FROM);
+ mFilterTo = savedInstanceState.getLong(STATE_KEY_TO);
+ mSortByDuration = savedInstanceState.getBoolean(STATE_KEY_SORT_DURATION);
+ }
+ }
+
+ @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.call_stats_options, menu);
@@ -174,12 +190,22 @@ public class CallStatsFragment extends ListFragment implements
android.R.layout.simple_list_item_1,
getResources().getStringArray(R.array.call_stats_nav_items));
mFilterSpinner.setAdapter(filterAdapter);
+ mFilterSpinner.setSelection(mCallTypeFilter);
mFilterSpinner.setOnItemSelectedListener(this);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
+ public void onSaveInstanceState(Bundle state) {
+ super.onSaveInstanceState(state);
+ state.putInt(STATE_KEY_FILTER, mCallTypeFilter);
+ state.putLong(STATE_KEY_FROM, mFilterFrom);
+ state.putLong(STATE_KEY_TO, mFilterTo);
+ state.putBoolean(STATE_KEY_SORT_DURATION, mSortByDuration);
+ }
+
+ @Override
public boolean onOptionsItemSelected(MenuItem item) {
final int itemId = item.getItemId();
switch (itemId) {
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index 1d6d41041..30113f737 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
* Not a Contribution.
* Copyright (C) 2011 The Android Open Source Project
*
@@ -76,6 +76,7 @@ import android.widget.TextView;
import com.android.contacts.common.CallUtil;
import com.android.contacts.common.GeoUtil;
+import com.android.contacts.common.MoreContactUtils;
import com.android.contacts.common.util.PhoneNumberFormatter;
import com.android.contacts.common.util.StopWatch;
import com.android.dialer.NeededForReflection;
@@ -83,7 +84,15 @@ import com.android.dialer.DialtactsActivity;
import com.android.dialer.R;
import com.android.dialer.SpecialCharSequenceMgr;
import com.android.dialer.cmstats.DialerStats;
+import com.android.dialer.SpeedDialUtils;
+import com.android.dialer.SpeedDialListActivity;
+import com.android.dialer.database.DialerDatabaseHelper;
+import com.android.dialer.interactions.PhoneNumberInteraction;
+import com.android.dialer.util.OrientationUtil;
import com.android.internal.telephony.ITelephony;
+import com.android.internal.telephony.MSimConstants;
+import com.android.internal.telephony.PhoneConstants;
+import com.android.internal.telephony.TelephonyProperties;
import com.android.phone.common.CallLogAsync;
import com.android.phone.common.HapticFeedback;
import com.google.common.annotations.VisibleForTesting;
@@ -101,6 +110,7 @@ public class DialpadFragment extends Fragment
PopupMenu.OnMenuItemClickListener,
DialpadKeyButton.OnPressedListener {
private static final String TAG = DialpadFragment.class.getSimpleName();
+ private Context mContext;
/**
* This interface allows the DialpadFragment to tell its hosting Activity when and when not
@@ -476,14 +486,21 @@ public class DialpadFragment extends Fragment
if (Intent.ACTION_DIAL.equals(action) || Intent.ACTION_VIEW.equals(action)) {
Uri uri = intent.getData();
if (uri != null) {
- if (CallUtil.SCHEME_TEL.equals(uri.getScheme())) {
+ if (CallUtil.SCHEME_TEL.equals(uri.getScheme())
+ || CallUtil.SCHEME_SIP.equals(uri.getScheme())) {
// Put the requested number into the input area
String data = uri.getSchemeSpecificPart();
// Remember it is filled via Intent.
mDigitsFilledByIntent = true;
- final String converted = PhoneNumberUtils.convertKeypadLettersToDigits(
- PhoneNumberUtils.replaceUnicodeDigits(data));
- setFormattedDigits(converted, null);
+ String newData;
+ if (CallUtil.SCHEME_TEL.equals(uri.getScheme())) {
+ newData = PhoneNumberUtils.convertKeypadLettersToDigits(
+ PhoneNumberUtils.replaceUnicodeDigits(data));
+ } else {
+ // Do not convert, when it is a SIP number.
+ newData = data;
+ }
+ setFormattedDigits(newData, null);
return true;
} else {
String type = intent.getType();
@@ -590,16 +607,26 @@ public class DialpadFragment extends Fragment
* Sets formatted digits to digits field.
*/
private void setFormattedDigits(String data, String normalizedNumber) {
- // strip the non-dialable numbers out of the data string.
- String dialString = PhoneNumberUtils.extractNetworkPortion(data);
- dialString =
- PhoneNumberUtils.formatNumber(dialString, normalizedNumber, mCurrentCountryIso);
+ String dialString;
+ boolean isSipNumber = PhoneNumberUtils.isUriNumber(data);
+ if (isSipNumber) {
+ dialString = data;
+ } else {
+ // strip the non-dialable numbers out of the data string.
+ dialString = PhoneNumberUtils.extractNetworkPortion(data);
+ dialString =
+ PhoneNumberUtils.formatNumber(dialString, normalizedNumber, mCurrentCountryIso);
+ }
if (!TextUtils.isEmpty(dialString)) {
- Editable digits = mDigits.getText();
- digits.replace(0, digits.length(), dialString);
- // for some reason this isn't getting called in the digits.replace call above..
- // but in any case, this will make sure the background drawable looks right
- afterTextChanged(digits);
+ if (isSipNumber) {
+ mDigits.setText(dialString);
+ } else {
+ Editable digits = mDigits.getText();
+ digits.replace(0, digits.length(), dialString);
+ // for some reason this isn't getting called in the digits.replace call above..
+ // but in any case, this will make sure the background drawable looks right
+ afterTextChanged(digits);
+ }
}
}
@@ -644,6 +671,10 @@ public class DialpadFragment extends Fragment
dialpadKey.setLayoutParams(new TableRow.LayoutParams(
TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.MATCH_PARENT));
dialpadKey.setOnPressedListener(this);
+ if ((buttonIds[i] != R.id.one) && (buttonIds[i] != R.id.zero)
+ && (buttonIds[i] != R.id.star) && (buttonIds[i] != R.id.pound)) {
+ dialpadKey.setOnLongClickListener(this);
+ }
numberView = (TextView) dialpadKey.findViewById(R.id.dialpad_key_number);
lettersView = (TextView) dialpadKey.findViewById(R.id.dialpad_key_letters);
letters2View = (TextView) dialpadKey.findViewById(R.id.dialpad_key2_letters);
@@ -668,6 +699,10 @@ public class DialpadFragment extends Fragment
// Long-pressing zero button will enter '+' instead.
fragmentView.findViewById(R.id.zero).setOnLongClickListener(this);
+ // Long-pressing star button will enter ','(pause) instead.
+ fragmentView.findViewById(R.id.star).setOnLongClickListener(this);
+ // Long-pressing pound button will enter ';'(wait) instead.
+ fragmentView.findViewById(R.id.pound).setOnLongClickListener(this);
}
public void refreshKeypad() {
@@ -805,19 +840,52 @@ public class DialpadFragment extends Fragment
outState.putBoolean(PREF_DIGITS_FILLED_BY_INTENT, mDigitsFilledByIntent);
}
- private void setupMenuItems(Menu menu) {
+ public void setupMenuItems(Menu menu) {
final MenuItem addToContactMenuItem = menu.findItem(R.id.menu_add_contacts);
+ final MenuItem videocallMenuItem = menu.findItem(R.id.menu_video_call);
+ final MenuItem videocallsettingsMenuItem = menu.findItem(R.id.menu_video_call_settings);
+ final MenuItem ipCallBySlot1MenuItem = menu.findItem(R.id.menu_ip_call_by_slot1);
+ final MenuItem ipCallBySlot2MenuItem = menu.findItem(R.id.menu_ip_call_by_slot2);
+
+ // We show "video call setting" menu only when the csvt is supported
+ //which means the prop "persist.radio.csvt.enabled" = true
+ videocallsettingsMenuItem.setVisible(isVTSupported());
// We show "add to contacts" menu only when the user is
// seeing usual dialpad and has typed at least one digit.
// We never show a menu if the "choose dialpad" UI is up.
if (dialpadChooserVisible() || isDigitsEmpty()) {
addToContactMenuItem.setVisible(false);
+ videocallMenuItem.setVisible(false);
+ ipCallBySlot1MenuItem.setVisible(false);
+ ipCallBySlot2MenuItem.setVisible(false);
} else {
+ if (MoreContactUtils.isMultiSimEnable(mContext, MSimConstants.SUB1)) {
+ String sub1Name = MoreContactUtils.getSimSpnName(MSimConstants.SUB1);
+ ipCallBySlot1MenuItem.setTitle(getActivity().getString(
+ com.android.contacts.common.R.string.ip_call_by_slot, sub1Name));
+ ipCallBySlot1MenuItem.setVisible(true);
+ } else {
+ ipCallBySlot1MenuItem.setVisible(false);
+ }
+ if (MoreContactUtils.isMultiSimEnable(mContext, MSimConstants.SUB2)) {
+ String sub2Name = MoreContactUtils.getSimSpnName(MSimConstants.SUB2);
+ ipCallBySlot2MenuItem.setTitle(getActivity().getString(
+ com.android.contacts.common.R.string.ip_call_by_slot, sub2Name));
+ ipCallBySlot2MenuItem.setVisible(true);
+ } else {
+ ipCallBySlot2MenuItem.setVisible(false);
+ }
final CharSequence digits = mDigits.getText();
// Put the current digits string into an intent
addToContactMenuItem.setIntent(DialtactsActivity.getAddNumberToContactIntent(digits));
addToContactMenuItem.setVisible(true);
+
+ //add for csvt
+ videocallMenuItem.setVisible(isVTSupported());
+ if(isVTSupported()){
+ videocallMenuItem.setIntent(getVTCallIntent(digits.toString()));
+ }
}
}
@@ -1061,6 +1129,30 @@ public class DialpadFragment extends Fragment
return true;
}
+ case R.id.two:
+ case R.id.three:
+ case R.id.four:
+ case R.id.five:
+ case R.id.six:
+ case R.id.seven:
+ case R.id.eight:
+ case R.id.nine:
+ if ((mDigits.length() == 1)) {
+ removePreviousDigitIfPossible();
+ final boolean isAirplaneModeOn =
+ Settings.System.getInt(getActivity().getContentResolver(),
+ Settings.System.AIRPLANE_MODE_ON, 0) != 0;
+ if (isAirplaneModeOn) {
+ DialogFragment dialogFragment = ErrorDialogFragment.newInstance(
+ R.string.dialog_speed_dial_airplane_mode_message);
+ dialogFragment.show(getFragmentManager(),
+ "speed_dial_request_during_airplane_mode");
+ } else {
+ callSpeedNumber(id);
+ }
+ return true;
+ }
+ return false;
case R.id.digits: {
// Right now EditText does not show the "paste" option when cursor is not visible.
// To show that, make the cursor visible, and return false, letting the EditText
@@ -1068,6 +1160,28 @@ public class DialpadFragment extends Fragment
mDigits.setCursorVisible(true);
return false;
}
+ case R.id.star: {
+ if (mDigits.length() > 1) {
+ // Remove tentative input ('*') done by onTouch().
+ removePreviousDigitIfPossible();
+ keyPressed(KeyEvent.KEYCODE_COMMA);
+ stopTone();
+ mPressedDialpadKeys.remove(view);
+ return true;
+ }
+ return false;
+ }
+ case R.id.pound: {
+ if (mDigits.length() > 1) {
+ // Remove tentative input ('#') done by onTouch().
+ removePreviousDigitIfPossible();
+ keyPressed(KeyEvent.KEYCODE_SEMICOLON);
+ stopTone();
+ mPressedDialpadKeys.remove(view);
+ return true;
+ }
+ return false;
+ }
}
return false;
}
@@ -1554,6 +1668,18 @@ public class DialpadFragment extends Fragment
case R.id.menu_add_wait:
updateDialString(WAIT);
return true;
+ case R.id.menu_video_call_settings:
+ startActivity(getVTCallSettingsIntent());
+ return true;
+ case R.id.menu_ip_call_by_slot1:
+ ipCallBySlot(MSimConstants.SUB1);
+ return true;
+ case R.id.menu_ip_call_by_slot2:
+ ipCallBySlot(MSimConstants.SUB2);
+ return true;
+ case R.id.speed_dial:
+ startActivity(new Intent(getActivity(), SpeedDialListActivity.class));
+ return true;
default:
return false;
}
@@ -1595,6 +1721,23 @@ public class DialpadFragment extends Fragment
}
}
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ mContext = activity;
+ }
+
+ private void ipCallBySlot(int subscription) {
+ if (MoreContactUtils.isIPNumberExist(getActivity(), subscription)) {
+ Intent callIntent = new Intent(CallUtil.getCallIntent(getValidDialNumber()));
+ callIntent.putExtra(PhoneConstants.IP_CALL, true);
+ callIntent.putExtra(MSimConstants.SUBSCRIPTION_KEY, subscription);
+ startActivity(callIntent);
+ } else {
+ MoreContactUtils.showNoIPNumberDialog(mContext, subscription);
+ }
+ }
+
/**
* Update the enabledness of the "Dial" and "Backspace" buttons if applicable.
*/
@@ -1746,6 +1889,49 @@ public class DialpadFragment extends Fragment
return intent;
}
+ // add for CSVT start
+ private static Intent getVTCallIntent(String number) {
+ Intent intent = new Intent("com.borqs.videocall.action.LaunchVideoCallScreen");
+ intent.addCategory(Intent.CATEGORY_DEFAULT);
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
+
+ intent.putExtra("IsCallOrAnswer", true); // true as a
+ // call,
+ // while
+ // false as
+ // answer
+
+ intent.putExtra("LaunchMode", 1); // nLaunchMode: 1 as
+ // telephony, while
+ // 0 as socket
+ intent.putExtra("call_number_key", number);
+ return intent;
+ }
+
+ private static Intent getVTCallSettingsIntent() {
+ Intent intent = new Intent("com.borqs.videocall.action.LaunchVideoCallSettingsScreen");
+ intent.addCategory(Intent.CATEGORY_DEFAULT);
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
+ return intent;
+ }
+
+ private String getValidDialNumber() {
+ if (mDigits != null)
+ return mDigits.getText().toString();
+ else
+ return null;
+ }
+
+ public static boolean isVTActive() {
+ return DialtactsActivity.isCsvtActive();
+ }
+ private boolean isVTSupported() {
+ return SystemProperties.getBoolean("persist.radio.csvt.enabled", false);
+ //return this.getResources().getBoolean(R.bool.csvt_enabled);
+ }
+
+ // add for csvt end
+
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
@@ -1774,4 +1960,48 @@ public class DialpadFragment extends Fragment
Context localeContext = getActivity().createConfigurationContext(overrideConfig);
return localeContext.getResources();
}
+
+ private void callSpeedNumber(int id) {
+ int number;
+
+ switch(id) {
+ case R.id.two: number = 2; break;
+ case R.id.three: number = 3; break;
+ case R.id.four: number = 4; break;
+ case R.id.five: number = 5; break;
+ case R.id.six: number = 6; break;
+ case R.id.seven: number = 7; break;
+ case R.id.eight: number = 8; break;
+ case R.id.nine: number = 9; break;
+ default: return;
+ }
+
+ String phoneNumber = SpeedDialUtils.getNumber(getActivity(), number);
+ if (phoneNumber == null) {
+ showNoSpeedNumberDialog(number);
+ } else {
+ Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED);
+ intent.setData(Uri.fromParts("tel", phoneNumber, null));
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ startActivity(intent);
+ getActivity().finish();
+ }
+ }
+
+ private void showNoSpeedNumberDialog(final int number) {
+ new AlertDialog.Builder(getActivity())
+ .setTitle(R.string.speed_dial_unassigned_dialog_title)
+ .setMessage(getString(R.string.speed_dial_unassigned_dialog_message, number))
+ .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ // go to speed dial setting screen to set speed dial number.
+ Intent intent = new Intent(getActivity(), SpeedDialListActivity.class);
+ intent.putExtra(SpeedDialListActivity.EXTRA_INITIAL_PICK_NUMBER, number);
+ startActivity(intent);
+ }
+ })
+ .setNegativeButton(R.string.no, null)
+ .show();
+ }
}
diff --git a/src/com/android/dialer/list/AllContactsActivity.java b/src/com/android/dialer/list/AllContactsActivity.java
index c4f0e3e5f..5773123f0 100644
--- a/src/com/android/dialer/list/AllContactsActivity.java
+++ b/src/com/android/dialer/list/AllContactsActivity.java
@@ -20,12 +20,14 @@ import android.app.Fragment;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
+import android.telephony.PhoneNumberUtils;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.TypefaceSpan;
import android.util.Log;
import com.android.contacts.common.CallUtil;
+import com.android.contacts.common.MoreContactUtils;
import com.android.contacts.common.activity.TransactionSafeActivity;
import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
import com.android.dialer.DialtactsActivity;
@@ -54,7 +56,18 @@ public class AllContactsActivity extends TransactionSafeActivity {
@Override
public void onCallNumberDirectly(String phoneNumber) {
- final Intent intent = CallUtil.getCallIntent(phoneNumber, null);
+ Intent intent;
+ if (MoreContactUtils.getEnabledSimCount() > 1) {
+ if (PhoneNumberUtils.isUriNumber(phoneNumber)) {
+ intent = new Intent(Intent.ACTION_DIAL,
+ Uri.fromParts(CallUtil.SCHEME_SIP, phoneNumber, null));
+ } else {
+ intent = new Intent(Intent.ACTION_DIAL,
+ Uri.fromParts(CallUtil.SCHEME_TEL, phoneNumber, null));
+ }
+ } else {
+ intent = CallUtil.getCallIntent(phoneNumber, null);
+ }
startActivity(intent);
}
diff --git a/src/com/android/dialer/list/SearchFragment.java b/src/com/android/dialer/list/SearchFragment.java
index 2b524df5d..d7b0ef3f1 100644
--- a/src/com/android/dialer/list/SearchFragment.java
+++ b/src/com/android/dialer/list/SearchFragment.java
@@ -38,6 +38,8 @@ public class SearchFragment extends PhoneNumberPickerFragment {
private OnListFragmentScrolledListener mActivityScrollListener;
+ private String mRegularQueryString;
+
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
@@ -114,7 +116,8 @@ public class SearchFragment extends PhoneNumberPickerFragment {
listener.onCallNumberDirectly(getQueryString());
}
} else if (shortcutType == DialerPhoneNumberListAdapter.SHORTCUT_ADD_NUMBER_TO_CONTACTS) {
- final String number = adapter.getFormattedQueryString();
+ final String number = mRegularQueryString != null ? mRegularQueryString
+ : adapter.getFormattedQueryString();
final Intent intent = DialtactsActivity.getAddNumberToContactIntent(number);
startActivityWithErrorToast(intent);
}
@@ -129,4 +132,8 @@ public class SearchFragment extends PhoneNumberPickerFragment {
toast.show();
}
}
+
+ public void setRegularQueryString(String query) {
+ mRegularQueryString = query;
+ }
}
diff --git a/src/com/android/dialer/lookup/dastelefonbuch/TelefonbuchApi.java b/src/com/android/dialer/lookup/dastelefonbuch/TelefonbuchApi.java
index 4a6a6c41f..70c2962a7 100644
--- a/src/com/android/dialer/lookup/dastelefonbuch/TelefonbuchApi.java
+++ b/src/com/android/dialer/lookup/dastelefonbuch/TelefonbuchApi.java
@@ -18,6 +18,7 @@ package com.android.dialer.lookup.dastelefonbuch;
import android.content.Context;
import android.net.Uri;
+import android.text.Html;
import com.android.dialer.lookup.LookupSettings;
@@ -53,6 +54,19 @@ public class TelefonbuchApi {
.appendQueryParameter("kw", number)
.build();
String output = httpGet(uri.toString());
+ if (output == null) {
+ return null;
+ }
+
+ // Cut out everything we're not interested in (scripts etc.) to
+ // speed up the subsequent matching.
+ Pattern regex = Pattern.compile(": Treffer(.*)Ende Treffer", Pattern.DOTALL);
+ Matcher matcher = regex.matcher(output);
+ if (!matcher.find()) {
+ return null;
+ }
+
+ output = matcher.group(1);
String name = parseName(output);
if (name == null) {
@@ -106,58 +120,41 @@ public class TelefonbuchApi {
Matcher m = regex.matcher(output);
if (m.find()) {
- return m.group(1).trim().replaceAll("&amp;", "&");
+ return fromHtml(m.group(1));
}
return null;
}
private static String parseNumber(String output) {
- Pattern regex = Pattern.compile("<span\\s+class=\"ico fon.*?>.*<span>(.*?)</span>",
- Pattern.DOTALL);
+ Pattern regex = Pattern.compile("<span\\s+class=\"ico fon.*>.*<span>(.*?)</span><br/>", 0);
Matcher m = regex.matcher(output);
if (m.find()) {
- return m.group(1).trim();
+ return fromHtml(m.group(1).replaceAll("</?span.*?>", ""));
}
return null;
}
private static String parseAddress(String output) {
- String regexBase = "<span\\s+itemprop=\"%s\"\\s?>(.*?)</span>";
-
- Pattern regexAddress = Pattern.compile(
- String.format(regexBase, "street-address"), Pattern.DOTALL);
- Matcher addressMatcher = regexAddress.matcher(output);
- if (!addressMatcher.find()) {
- return null;
+ Pattern regex = Pattern.compile("<address.*?>\n?(.*?)</address>", Pattern.DOTALL);
+ Matcher m = regex.matcher(output);
+ if (m.find()) {
+ return fromHtml(m.group(1).replaceAll("</?span.*?>", ""));
}
- Pattern regexPostal = Pattern.compile(
- String.format(regexBase, "postal-code"), Pattern.DOTALL);
- Matcher postalMatcher = regexPostal.matcher(output);
- if (!postalMatcher.find()) {
- return null;
- }
+ return null;
+ }
- Pattern regexLocation = Pattern.compile(
- String.format(regexBase, "locality"), Pattern.DOTALL);
- Matcher locationMatcher = regexLocation.matcher(output);
- if (!locationMatcher.find()) {
+ private static String fromHtml(String input) {
+ if (input == null) {
return null;
}
-
- StringBuilder sb = new StringBuilder();
- sb.append(addressMatcher.group(1).trim()).append(", ");
- sb.append(postalMatcher.group(1).trim()).append(" ");
- sb.append(locationMatcher.group(1).trim());
-
- return sb.toString();
+ return Html.fromHtml(input).toString().trim();
}
public static class ContactInfo {
String name;
- String city;
String address;
String formattedNumber;
String website;
diff --git a/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java b/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java
index 9b7d9de13..de204c411 100644..100755
--- a/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java
+++ b/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java
@@ -43,6 +43,8 @@ public class PhoneCallDetailsHelperTest extends AndroidTestCase {
new GregorianCalendar(2011, 5, 3, 13, 0, 0).getTimeInMillis();
/** A test duration value for phone calls. */
private static final long TEST_DURATION = 62300;
+ /** A test subscription value for phone calls. */
+ private static final int TEST_SUBSCRIPTION = 0;
/** The number of the caller/callee in the log entry. */
private static final String TEST_NUMBER = "14125555555";
/** The formatted version of {@link #TEST_NUMBER}. */
@@ -54,6 +56,8 @@ public class PhoneCallDetailsHelperTest extends AndroidTestCase {
/** Empty geocode label */
private static final String EMPTY_GEOCODE = "";
+ private static final int TEST_DURATIONTYPE = 0;
+
/** The object under test. */
private PhoneCallDetailsHelper mHelper;
/** The views to fill. */
@@ -69,7 +73,7 @@ public class PhoneCallDetailsHelperTest extends AndroidTestCase {
CallTypeHelper callTypeHelper = new CallTypeHelper(resources);
final TestPhoneNumberUtilsWrapper phoneUtils = new TestPhoneNumberUtilsWrapper(
TEST_VOICEMAIL_NUMBER);
- mHelper = new PhoneCallDetailsHelper(resources, callTypeHelper, phoneUtils);
+ mHelper = new PhoneCallDetailsHelper(context, callTypeHelper, phoneUtils);
mHelper.setCurrentTimeForTest(
new GregorianCalendar(2011, 5, 4, 13, 0, 0).getTimeInMillis());
mViews = PhoneCallDetailsViews.createForTest(context);
@@ -291,7 +295,8 @@ public class PhoneCallDetailsHelperTest extends AndroidTestCase {
mHelper.setPhoneCallDetails(mViews,
new PhoneCallDetails(number, presentation, formattedNumber,
TEST_COUNTRY_ISO, TEST_GEOCODE,
- new int[]{ Calls.VOICEMAIL_TYPE }, TEST_DATE, TEST_DURATION),
+ new int[]{ Calls.VOICEMAIL_TYPE }, TEST_DATE, TEST_DURATION,
+ TEST_SUBSCRIPTION, TEST_DURATIONTYPE),
true);
}
@@ -301,7 +306,8 @@ public class PhoneCallDetailsHelperTest extends AndroidTestCase {
mHelper.setPhoneCallDetails(mViews,
new PhoneCallDetails(number, Calls.PRESENTATION_ALLOWED,
formattedNumber, TEST_COUNTRY_ISO, geocodedLocation,
- new int[]{ Calls.VOICEMAIL_TYPE }, TEST_DATE, TEST_DURATION),
+ new int[]{ Calls.VOICEMAIL_TYPE }, TEST_DATE, TEST_DURATION,
+ TEST_SUBSCRIPTION, TEST_DURATIONTYPE),
true);
}
@@ -310,7 +316,8 @@ public class PhoneCallDetailsHelperTest extends AndroidTestCase {
mHelper.setPhoneCallDetails(mViews,
new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, TEST_GEOCODE,
- new int[]{ Calls.INCOMING_TYPE }, date, TEST_DURATION),
+ new int[]{ Calls.INCOMING_TYPE }, date, TEST_DURATION,
+ TEST_SUBSCRIPTION, TEST_DURATIONTYPE),
false);
}
@@ -319,7 +326,7 @@ public class PhoneCallDetailsHelperTest extends AndroidTestCase {
mHelper.setPhoneCallDetails(mViews,
new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, TEST_GEOCODE,
- callTypes, TEST_DATE, TEST_DURATION),
+ callTypes, TEST_DATE, TEST_DURATION, TEST_SUBSCRIPTION, TEST_DURATIONTYPE),
false);
}
@@ -327,7 +334,8 @@ public class PhoneCallDetailsHelperTest extends AndroidTestCase {
mHelper.setCallDetailsHeader(mNameView,
new PhoneCallDetails(number, presentation,
TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, TEST_GEOCODE,
- new int[]{ Calls.INCOMING_TYPE }, TEST_DATE, TEST_DURATION));
+ new int[]{ Calls.INCOMING_TYPE }, TEST_DATE, TEST_DURATION,
+ TEST_SUBSCRIPTION, TEST_DURATIONTYPE));
}
private void setCallDetailsHeader(String name) {
@@ -335,6 +343,6 @@ public class PhoneCallDetailsHelperTest extends AndroidTestCase {
new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, TEST_GEOCODE,
new int[]{ Calls.INCOMING_TYPE }, TEST_DATE, TEST_DURATION,
- name, 0, "", null, null, 0));
+ name, 0, "", null, null, 0, TEST_SUBSCRIPTION, TEST_DURATIONTYPE));
}
}
diff --git a/tests/src/com/android/dialer/calllog/CallLogListItemHelperTest.java b/tests/src/com/android/dialer/calllog/CallLogListItemHelperTest.java
index 7e4736e35..8e97ec13c 100644..100755
--- a/tests/src/com/android/dialer/calllog/CallLogListItemHelperTest.java
+++ b/tests/src/com/android/dialer/calllog/CallLogListItemHelperTest.java
@@ -38,12 +38,15 @@ public class CallLogListItemHelperTest extends AndroidTestCase {
private static final long TEST_DATE = 1300000000;
/** A test duration value for phone calls. */
private static final long TEST_DURATION = 62300;
+ /** A test subscription value for phone calls. */
+ private static final int TEST_SUBSCRIPTION = 0;
/** A test voicemail number. */
private static final String TEST_VOICEMAIL_NUMBER = "123";
/** The country ISO name used in the tests. */
private static final String TEST_COUNTRY_ISO = "US";
/** The geocoded location used in the tests. */
private static final String TEST_GEOCODE = "United States";
+ private static final int TEST_DURATIONTYPE = 0;
/** The object under test. */
private CallLogListItemHelper mHelper;
@@ -64,7 +67,7 @@ public class CallLogListItemHelperTest extends AndroidTestCase {
final TestPhoneNumberUtilsWrapper phoneUtils = new TestPhoneNumberUtilsWrapper(
TEST_VOICEMAIL_NUMBER);
PhoneCallDetailsHelper phoneCallDetailsHelper = new PhoneCallDetailsHelper(
- mResources, callTypeHelper, phoneUtils);
+ context, callTypeHelper, phoneUtils);
mPhoneNumberDisplayHelper = new PhoneNumberDisplayHelper(mResources);
mHelper = new CallLogListItemHelper(phoneCallDetailsHelper, mPhoneNumberDisplayHelper,
mResources);
@@ -171,7 +174,8 @@ public class CallLogListItemHelperTest extends AndroidTestCase {
public void testGetCallDescriptionID_UnknownAnswered() {
PhoneCallDetails details = new PhoneCallDetails("", Calls.PRESENTATION_UNKNOWN, "",
TEST_COUNTRY_ISO, TEST_GEOCODE,
- new int[]{Calls.INCOMING_TYPE}, TEST_DATE, TEST_DURATION);
+ new int[]{Calls.INCOMING_TYPE}, TEST_DATE, TEST_DURATION, TEST_SUBSCRIPTION,
+ TEST_DURATIONTYPE);
assertEquals(R.string.description_unknown_answered_call,
mHelper.getCallDescriptionStringID(details));
}
@@ -183,7 +187,8 @@ public class CallLogListItemHelperTest extends AndroidTestCase {
public void testGetCallDescriptionID_UnknownMissed() {
PhoneCallDetails details = new PhoneCallDetails("", Calls.PRESENTATION_UNKNOWN, "",
TEST_COUNTRY_ISO, TEST_GEOCODE,
- new int[]{Calls.MISSED_TYPE}, TEST_DATE, TEST_DURATION);
+ new int[]{Calls.MISSED_TYPE}, TEST_DATE, TEST_DURATION, TEST_SUBSCRIPTION,
+ TEST_DURATIONTYPE);
assertEquals(R.string.description_unknown_missed_call,
mHelper.getCallDescriptionStringID(details));
}
@@ -195,7 +200,8 @@ public class CallLogListItemHelperTest extends AndroidTestCase {
public void testGetCallDescriptionID_UnknownVoicemail() {
PhoneCallDetails details = new PhoneCallDetails("", Calls.PRESENTATION_UNKNOWN, "",
TEST_COUNTRY_ISO, TEST_GEOCODE,
- new int[]{Calls.VOICEMAIL_TYPE}, TEST_DATE, TEST_DURATION);
+ new int[]{Calls.VOICEMAIL_TYPE}, TEST_DATE, TEST_DURATION, TEST_SUBSCRIPTION,
+ TEST_DURATIONTYPE);
assertEquals(R.string.description_unknown_missed_call,
mHelper.getCallDescriptionStringID(details));
}
@@ -208,7 +214,8 @@ public class CallLogListItemHelperTest extends AndroidTestCase {
PhoneCallDetails details = new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
TEST_FORMATTED_NUMBER,
TEST_COUNTRY_ISO, TEST_GEOCODE,
- new int[]{Calls.INCOMING_TYPE}, TEST_DATE, TEST_DURATION);
+ new int[]{Calls.INCOMING_TYPE}, TEST_DATE, TEST_DURATION, TEST_SUBSCRIPTION,
+ TEST_DURATIONTYPE);
assertEquals(R.string.description_return_answered_call,
mHelper.getCallDescriptionStringID(details));
}
@@ -221,7 +228,8 @@ public class CallLogListItemHelperTest extends AndroidTestCase {
PhoneCallDetails details = new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
TEST_FORMATTED_NUMBER,
TEST_COUNTRY_ISO, TEST_GEOCODE,
- new int[]{Calls.MISSED_TYPE}, TEST_DATE, TEST_DURATION);
+ new int[]{Calls.MISSED_TYPE}, TEST_DATE, TEST_DURATION, TEST_SUBSCRIPTION,
+ TEST_DURATIONTYPE);
assertEquals(R.string.description_return_missed_call,
mHelper.getCallDescriptionStringID(details));
}
@@ -234,7 +242,8 @@ public class CallLogListItemHelperTest extends AndroidTestCase {
PhoneCallDetails details = new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
TEST_FORMATTED_NUMBER,
TEST_COUNTRY_ISO, TEST_GEOCODE,
- new int[]{Calls.VOICEMAIL_TYPE}, TEST_DATE, TEST_DURATION);
+ new int[]{Calls.VOICEMAIL_TYPE}, TEST_DATE, TEST_DURATION, TEST_SUBSCRIPTION,
+ TEST_DURATIONTYPE);
assertEquals(R.string.description_return_missed_call,
mHelper.getCallDescriptionStringID(details));
}
@@ -248,7 +257,8 @@ public class CallLogListItemHelperTest extends AndroidTestCase {
PhoneCallDetails details = new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
TEST_FORMATTED_NUMBER,
TEST_COUNTRY_ISO, TEST_GEOCODE,
- new int[]{Calls.OUTGOING_TYPE}, TEST_DATE, TEST_DURATION);
+ new int[]{Calls.OUTGOING_TYPE}, TEST_DATE, TEST_DURATION, TEST_SUBSCRIPTION,
+ TEST_DURATIONTYPE);
assertEquals(R.string.description_call_last,
mHelper.getCallDescriptionStringID(details));
}
@@ -262,7 +272,8 @@ public class CallLogListItemHelperTest extends AndroidTestCase {
PhoneCallDetails details = new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
TEST_FORMATTED_NUMBER,
TEST_COUNTRY_ISO, TEST_GEOCODE,
- new int[]{Calls.OUTGOING_TYPE, Calls.OUTGOING_TYPE}, TEST_DATE, TEST_DURATION);
+ new int[]{Calls.OUTGOING_TYPE, Calls.OUTGOING_TYPE}, TEST_DATE, TEST_DURATION,
+ TEST_SUBSCRIPTION, TEST_DURATIONTYPE);
assertEquals(R.string.description_call_last_multiple,
mHelper.getCallDescriptionStringID(details));
}
@@ -275,7 +286,8 @@ public class CallLogListItemHelperTest extends AndroidTestCase {
PhoneCallDetails details = new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
TEST_FORMATTED_NUMBER,
TEST_COUNTRY_ISO, TEST_GEOCODE,
- new int[]{Calls.OUTGOING_TYPE, Calls.OUTGOING_TYPE}, TEST_DATE, TEST_DURATION);
+ new int[]{Calls.OUTGOING_TYPE, Calls.OUTGOING_TYPE}, TEST_DATE, TEST_DURATION,
+ TEST_SUBSCRIPTION, TEST_DURATIONTYPE);
CharSequence description = mHelper.getCallDescription(details);
assertFalse(description.toString()
.contains(this.mResources.getString(R.string.description_new_voicemail)));
@@ -289,7 +301,8 @@ public class CallLogListItemHelperTest extends AndroidTestCase {
PhoneCallDetails details = new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
TEST_FORMATTED_NUMBER,
TEST_COUNTRY_ISO, TEST_GEOCODE,
- new int[]{Calls.INCOMING_TYPE, Calls.OUTGOING_TYPE}, TEST_DATE, TEST_DURATION);
+ new int[]{Calls.INCOMING_TYPE, Calls.OUTGOING_TYPE}, TEST_DATE, TEST_DURATION,
+ TEST_SUBSCRIPTION, TEST_DURATIONTYPE);
CharSequence description = mHelper.getCallDescription(details);
assertFalse(description.toString()
.contains(this.mResources.getString(R.string.description_new_voicemail)));
@@ -303,7 +316,8 @@ public class CallLogListItemHelperTest extends AndroidTestCase {
PhoneCallDetails details = new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
TEST_FORMATTED_NUMBER,
TEST_COUNTRY_ISO, TEST_GEOCODE,
- new int[]{Calls.MISSED_TYPE, Calls.OUTGOING_TYPE}, TEST_DATE, TEST_DURATION);
+ new int[]{Calls.MISSED_TYPE, Calls.OUTGOING_TYPE}, TEST_DATE, TEST_DURATION,
+ TEST_SUBSCRIPTION, TEST_DURATIONTYPE);
CharSequence description = mHelper.getCallDescription(details);
assertFalse(description.toString()
.contains(this.mResources.getString(R.string.description_new_voicemail)));
@@ -317,7 +331,8 @@ public class CallLogListItemHelperTest extends AndroidTestCase {
PhoneCallDetails details = new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
TEST_FORMATTED_NUMBER,
TEST_COUNTRY_ISO, TEST_GEOCODE,
- new int[]{Calls.VOICEMAIL_TYPE, Calls.OUTGOING_TYPE}, TEST_DATE, TEST_DURATION);
+ new int[]{Calls.VOICEMAIL_TYPE, Calls.OUTGOING_TYPE}, TEST_DATE, TEST_DURATION,
+ TEST_SUBSCRIPTION, TEST_DURATIONTYPE);
CharSequence description = mHelper.getCallDescription(details);
assertTrue(description.toString()
.contains(this.mResources.getString(R.string.description_new_voicemail)));
@@ -331,7 +346,8 @@ public class CallLogListItemHelperTest extends AndroidTestCase {
PhoneCallDetails details = new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
TEST_FORMATTED_NUMBER,
TEST_COUNTRY_ISO, TEST_GEOCODE,
- new int[]{Calls.VOICEMAIL_TYPE}, TEST_DATE, TEST_DURATION);
+ new int[]{Calls.VOICEMAIL_TYPE}, TEST_DATE, TEST_DURATION, TEST_SUBSCRIPTION,
+ TEST_DURATIONTYPE);
CharSequence description = mHelper.getCallDescription(details);
// Rather than hard coding the "X calls" string message, we'll generate it with an empty
@@ -350,7 +366,8 @@ public class CallLogListItemHelperTest extends AndroidTestCase {
PhoneCallDetails details = new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
TEST_FORMATTED_NUMBER,
TEST_COUNTRY_ISO, TEST_GEOCODE,
- new int[]{Calls.VOICEMAIL_TYPE, Calls.INCOMING_TYPE}, TEST_DATE, TEST_DURATION);
+ new int[]{Calls.VOICEMAIL_TYPE, Calls.INCOMING_TYPE}, TEST_DATE, TEST_DURATION,
+ TEST_SUBSCRIPTION, TEST_DURATIONTYPE);
CharSequence description = mHelper.getCallDescription(details);
assertTrue(description.toString()
.contains(this.mResources.getString(R.string.description_num_calls, 2)));
@@ -383,7 +400,8 @@ public class CallLogListItemHelperTest extends AndroidTestCase {
mHelper.setPhoneCallDetails(mViews,
new PhoneCallDetails(number, presentation, formattedNumber,
TEST_COUNTRY_ISO, TEST_GEOCODE,
- new int[]{ callType }, TEST_DATE, TEST_DURATION),
+ new int[]{ callType }, TEST_DATE, TEST_DURATION, TEST_SUBSCRIPTION,
+ TEST_DURATIONTYPE),
false, false);
}
@@ -393,7 +411,8 @@ public class CallLogListItemHelperTest extends AndroidTestCase {
mHelper.setPhoneCallDetails(mViews,
new PhoneCallDetails(number, presentation, formattedNumber,
TEST_COUNTRY_ISO, TEST_GEOCODE,
- new int[]{ callType }, TEST_DATE, TEST_DURATION),
+ new int[]{ callType }, TEST_DATE, TEST_DURATION, TEST_SUBSCRIPTION,
+ TEST_DURATIONTYPE),
false, true);
}
@@ -402,7 +421,7 @@ public class CallLogListItemHelperTest extends AndroidTestCase {
mHelper.setPhoneCallDetails(mViews,
new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, TEST_GEOCODE,
- types, TEST_DATE, TEST_DURATION),
+ types, TEST_DATE, TEST_DURATION, TEST_SUBSCRIPTION, TEST_DURATIONTYPE),
false, false);
}
@@ -411,7 +430,7 @@ public class CallLogListItemHelperTest extends AndroidTestCase {
mHelper.setPhoneCallDetails(mViews,
new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, TEST_GEOCODE,
- types, TEST_DATE, TEST_DURATION),
+ types, TEST_DATE, TEST_DURATION, TEST_SUBSCRIPTION, TEST_DURATIONTYPE),
false, true);
}
@@ -420,7 +439,7 @@ public class CallLogListItemHelperTest extends AndroidTestCase {
mHelper.setPhoneCallDetails(mViews,
new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, TEST_GEOCODE,
- types, TEST_DATE, TEST_DURATION),
+ types, TEST_DATE, TEST_DURATION, TEST_SUBSCRIPTION, TEST_DURATIONTYPE),
true, false);
}
@@ -431,7 +450,7 @@ public class CallLogListItemHelperTest extends AndroidTestCase {
mHelper.setPhoneCallDetails(mViews,
new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, TEST_GEOCODE,
- types, TEST_DATE, TEST_DURATION),
+ types, TEST_DATE, TEST_DURATION, TEST_SUBSCRIPTION, TEST_DURATIONTYPE),
true, true);
}
}
diff --git a/tests/src/com/android/dialer/calllog/CallLogQueryTestUtils.java b/tests/src/com/android/dialer/calllog/CallLogQueryTestUtils.java
index c13b936e5..66bef45f9 100644
--- a/tests/src/com/android/dialer/calllog/CallLogQueryTestUtils.java
+++ b/tests/src/com/android/dialer/calllog/CallLogQueryTestUtils.java
@@ -29,7 +29,7 @@ public class CallLogQueryTestUtils {
public static Object[] createTestValues() {
Object[] values = new Object[]{
0L, "", 0L, 0L, Calls.INCOMING_TYPE, "", "", "", null, 0, null, null, null, null,
- 0L, null, 0, Calls.PRESENTATION_ALLOWED,
+ 0L, null, 0, Calls.PRESENTATION_ALLOWED, 0,
};
assertEquals(CallLogQuery._PROJECTION.length, values.length);
return values;