diff options
author | Brint E. Kriebel <bekit@cyngn.com> | 2014-10-01 00:03:12 -0700 |
---|---|---|
committer | Brint E. Kriebel <bekit@cyngn.com> | 2014-10-01 00:03:12 -0700 |
commit | d5144a46d45015706a5a63fa17b407ac3d57229d (patch) | |
tree | a713d50dd3573b33d00cfd079f9da97d319a32a8 | |
parent | bf303f609f59f94ab578c51124a2a80bc9c31a25 (diff) | |
parent | 50662c405c2dd6878da02bc2c281d5bfe4241ff9 (diff) | |
download | android_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
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 Binary files differnew file mode 100644 index 000000000..8f4c446d3 --- /dev/null +++ b/res/drawable-hdpi/ic_cancel_lt.png diff --git a/res/drawable-hdpi/ic_ims_incoming_holo_dark.png b/res/drawable-hdpi/ic_ims_incoming_holo_dark.png Binary files differnew file mode 100644 index 000000000..4b4c1085a --- /dev/null +++ b/res/drawable-hdpi/ic_ims_incoming_holo_dark.png diff --git a/res/drawable-hdpi/ic_ims_missed_holo_dark.png b/res/drawable-hdpi/ic_ims_missed_holo_dark.png Binary files differnew file mode 100644 index 000000000..24ffc7900 --- /dev/null +++ b/res/drawable-hdpi/ic_ims_missed_holo_dark.png diff --git a/res/drawable-hdpi/ic_ims_outgoing_holo_dark.png b/res/drawable-hdpi/ic_ims_outgoing_holo_dark.png Binary files differnew file mode 100644 index 000000000..b93b0c576 --- /dev/null +++ b/res/drawable-hdpi/ic_ims_outgoing_holo_dark.png diff --git a/res/drawable-hdpi/ic_search_lt.png b/res/drawable-hdpi/ic_search_lt.png Binary files differnew file mode 100644 index 000000000..bcb5d85da --- /dev/null +++ b/res/drawable-hdpi/ic_search_lt.png diff --git a/res/drawable-hdpi/ic_video_incoming_holo_dark.png b/res/drawable-hdpi/ic_video_incoming_holo_dark.png Binary files differnew file mode 100644 index 000000000..b4fd7caa9 --- /dev/null +++ b/res/drawable-hdpi/ic_video_incoming_holo_dark.png diff --git a/res/drawable-hdpi/ic_video_missed_holo_dark.png b/res/drawable-hdpi/ic_video_missed_holo_dark.png Binary files differnew file mode 100644 index 000000000..7308effca --- /dev/null +++ b/res/drawable-hdpi/ic_video_missed_holo_dark.png diff --git a/res/drawable-hdpi/ic_video_outgoing_holo_dark.png b/res/drawable-hdpi/ic_video_outgoing_holo_dark.png Binary files differnew file mode 100644 index 000000000..b6a020825 --- /dev/null +++ b/res/drawable-hdpi/ic_video_outgoing_holo_dark.png diff --git a/res/drawable-hdpi/textfield_search_lt.9.png b/res/drawable-hdpi/textfield_search_lt.9.png Binary files differnew file mode 100644 index 000000000..550f5ff36 --- /dev/null +++ b/res/drawable-hdpi/textfield_search_lt.9.png 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 Binary files differnew file mode 100644 index 000000000..562cdc9e1 --- /dev/null +++ b/res/drawable-mdpi/ic_contact_quick_contact_call_video_holo_dark.png diff --git a/res/drawable-mdpi/ic_ims_incoming_holo_dark.png b/res/drawable-mdpi/ic_ims_incoming_holo_dark.png Binary files differnew file mode 100644 index 000000000..d58998e4f --- /dev/null +++ b/res/drawable-mdpi/ic_ims_incoming_holo_dark.png diff --git a/res/drawable-mdpi/ic_ims_missed_holo_dark.png b/res/drawable-mdpi/ic_ims_missed_holo_dark.png Binary files differnew file mode 100644 index 000000000..5b39c279e --- /dev/null +++ b/res/drawable-mdpi/ic_ims_missed_holo_dark.png diff --git a/res/drawable-mdpi/ic_ims_outgoing_holo_dark.png b/res/drawable-mdpi/ic_ims_outgoing_holo_dark.png Binary files differnew file mode 100644 index 000000000..ccf67e9ca --- /dev/null +++ b/res/drawable-mdpi/ic_ims_outgoing_holo_dark.png diff --git a/res/drawable-mdpi/ic_video_incoming_holo_dark.png b/res/drawable-mdpi/ic_video_incoming_holo_dark.png Binary files differnew file mode 100644 index 000000000..eb19c1855 --- /dev/null +++ b/res/drawable-mdpi/ic_video_incoming_holo_dark.png diff --git a/res/drawable-mdpi/ic_video_missed_holo_dark.png b/res/drawable-mdpi/ic_video_missed_holo_dark.png Binary files differnew file mode 100644 index 000000000..3865fce7d --- /dev/null +++ b/res/drawable-mdpi/ic_video_missed_holo_dark.png diff --git a/res/drawable-mdpi/ic_video_outgoing_holo_dark.png b/res/drawable-mdpi/ic_video_outgoing_holo_dark.png Binary files differnew file mode 100644 index 000000000..34d91b024 --- /dev/null +++ b/res/drawable-mdpi/ic_video_outgoing_holo_dark.png diff --git a/res/drawable-xhdpi/ic_cancel_lt.png b/res/drawable-xhdpi/ic_cancel_lt.png Binary files differnew file mode 100644 index 000000000..04f05aae8 --- /dev/null +++ b/res/drawable-xhdpi/ic_cancel_lt.png diff --git a/res/drawable-xhdpi/ic_ims_incoming_holo_dark.png b/res/drawable-xhdpi/ic_ims_incoming_holo_dark.png Binary files differnew file mode 100644 index 000000000..afacf6c18 --- /dev/null +++ b/res/drawable-xhdpi/ic_ims_incoming_holo_dark.png diff --git a/res/drawable-xhdpi/ic_ims_missed_holo_dark.png b/res/drawable-xhdpi/ic_ims_missed_holo_dark.png Binary files differnew file mode 100644 index 000000000..c94244518 --- /dev/null +++ b/res/drawable-xhdpi/ic_ims_missed_holo_dark.png diff --git a/res/drawable-xhdpi/ic_ims_outgoing_holo_dark.png b/res/drawable-xhdpi/ic_ims_outgoing_holo_dark.png Binary files differnew file mode 100644 index 000000000..104d9872d --- /dev/null +++ b/res/drawable-xhdpi/ic_ims_outgoing_holo_dark.png diff --git a/res/drawable-xhdpi/ic_search_lt.png b/res/drawable-xhdpi/ic_search_lt.png Binary files differnew file mode 100644 index 000000000..71800841e --- /dev/null +++ b/res/drawable-xhdpi/ic_search_lt.png diff --git a/res/drawable-xhdpi/textfield_search_lt.9.png b/res/drawable-xhdpi/textfield_search_lt.9.png Binary files differnew file mode 100644 index 000000000..d0909888a --- /dev/null +++ b/res/drawable-xhdpi/textfield_search_lt.9.png diff --git a/res/drawable-xxhdpi/ic_cancel_lt.png b/res/drawable-xxhdpi/ic_cancel_lt.png Binary files differnew file mode 100644 index 000000000..9237b5496 --- /dev/null +++ b/res/drawable-xxhdpi/ic_cancel_lt.png diff --git a/res/drawable-xxhdpi/ic_search_lt.png b/res/drawable-xxhdpi/ic_search_lt.png Binary files differnew file mode 100644 index 000000000..a4f34d86c --- /dev/null +++ b/res/drawable-xxhdpi/ic_search_lt.png diff --git a/res/drawable-xxhdpi/textfield_search_lt.9.png b/res/drawable-xxhdpi/textfield_search_lt.9.png Binary files differnew file mode 100644 index 000000000..8b9af6770 --- /dev/null +++ b/res/drawable-xxhdpi/textfield_search_lt.9.png 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("&", "&"); + 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; |