Merge "Dismiss dialpad when user touches spaces above it." into klp-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index b0d988c..0f3285e 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -22,6 +22,7 @@
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.WRITE_CALL_LOG" />
+ <uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
diff --git a/res/layout/dialpad.xml b/res/layout/dialpad.xml
index bc910db..4fc3e83 100644
--- a/res/layout/dialpad.xml
+++ b/res/layout/dialpad.xml
@@ -40,7 +40,7 @@
android:focusable="true" >
<LinearLayout
android:layout_width="wrap_content"
- android:layout_height="match_parent"
+ android:layout_height="wrap_content"
android:layout_gravity="center" >
<TextView
android:id="@+id/dialpad_key_number"
diff --git a/res/layout/dialpad_key.xml b/res/layout/dialpad_key.xml
index e87fde0..c104f8a 100644
--- a/res/layout/dialpad_key.xml
+++ b/res/layout/dialpad_key.xml
@@ -22,7 +22,7 @@
android:focusable="true" >
<LinearLayout
android:layout_width="wrap_content"
- android:layout_height="match_parent"
+ android:layout_height="wrap_content"
android:layout_gravity="center">
<TextView
android:id="@+id/dialpad_key_number"
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 9998c6f..5b60eb9 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -125,13 +125,13 @@
<string name="dialerDialpadHintText" msgid="5824490365898349041">"طلب لإضافة مكالمة"</string>
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"عدد الدقائق:<xliff:g id="MINUTES">%s</xliff:g>، عددالثواني: <xliff:g id="SECONDS">%s</xliff:g>"</string>
<string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"لم يتم إرسال المكالمة"</string>
- <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"لإعداد البريد الصوتي، انتقل إلى القائمة > الإعدادات."</string>
+ <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"لإعداد البريد الصوتي، انتقل إلى القائمة > الإعدادات."</string>
<string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"للاتصال بالبريد الصوتي، يجب أولاً إيقاف وضع الطائرة."</string>
<string name="contact_list_loading" msgid="5488620820563977329">"جارٍ التحميل..."</string>
<string name="imei" msgid="3045126336951684285">"IMEI"</string>
<string name="meid" msgid="6210568493746275750">"MEID"</string>
- <string name="simContacts_emptyLoading" msgid="6700035985448642408">"جارٍ التحميل من بطاقة SIM…"</string>
- <string name="simContacts_title" msgid="27341688347689769">"بطاقة SIM وجهات الاتصال"</string>
+ <string name="simContacts_emptyLoading" msgid="6700035985448642408">"جارٍ التحميل من بطاقة SIM…"</string>
+ <string name="simContacts_title" msgid="27341688347689769">"بطاقة SIM وجهات الاتصال"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"أعد تمكين تطبيق الأشخاص لاستخدام هذه الميزة."</string>
<string name="dialer_hint_find_contact" msgid="8798845521253672403">"أدخل اسمًا أو رقم هاتف"</string>
<string name="call_log_all_title" msgid="3566738938889333307">"الكل"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index d7df7f6..ab95711 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -125,7 +125,7 @@
<string name="dialerDialpadHintText" msgid="5824490365898349041">"شماره گیری برای افزودن یک تماس"</string>
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> دقیقه و <xliff:g id="SECONDS">%s</xliff:g> ثانیه"</string>
<string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"تماس ارسال نشد"</string>
- <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"برای راهاندازی پست صوتی به منو > تنظیمات بروید."</string>
+ <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"برای راهاندازی پست صوتی به منو > تنظیمات بروید."</string>
<string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"برای تماس با پست صوتی، ابتدا حالت هواپیما را غیرفعال کنید."</string>
<string name="contact_list_loading" msgid="5488620820563977329">"در حال بارگیری..."</string>
<string name="imei" msgid="3045126336951684285">"IMEI"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index f6d2a3d..00e87fa 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -132,7 +132,7 @@
<string name="meid" msgid="6210568493746275750">"MEID"</string>
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"सिम कार्ड से लोड हो रहा है…"</string>
<string name="simContacts_title" msgid="27341688347689769">"सिम कार्ड के संपर्क"</string>
- <string name="add_contact_not_available" msgid="1419207765446461366">"इस सुविधा का उपयोग करने के लिए लोग एप्स को पुन: सक्षम करें."</string>
+ <string name="add_contact_not_available" msgid="1419207765446461366">"इस सुविधा का उपयोग करने के लिए लोग ऐप्स को पुन: सक्षम करें."</string>
<string name="dialer_hint_find_contact" msgid="8798845521253672403">"नाम या फ़ोन नंबर लिखें"</string>
<string name="call_log_all_title" msgid="3566738938889333307">"सभी"</string>
<string name="call_log_missed_title" msgid="4541142293870638971">"छूटे हुए"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 90c2ed6..5a8df3ac 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -125,13 +125,13 @@
<string name="dialerDialpadHintText" msgid="5824490365898349041">"חייג כדי להוסיף שיחה"</string>
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> דקות <xliff:g id="SECONDS">%s</xliff:g> שניות"</string>
<string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"השיחה לא נשלחה."</string>
- <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"כדי להגדיר את הדואר הקולי, עבור אל \'תפריט\' > \'הגדרות\'."</string>
+ <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"כדי להגדיר את הדואר הקולי, עבור אל \'תפריט\' > \'הגדרות\'."</string>
<string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"כדי להתקשר לדואר קולי, ראשית כבה את מצב הטיסה."</string>
<string name="contact_list_loading" msgid="5488620820563977329">"טוען..."</string>
<string name="imei" msgid="3045126336951684285">"IMEI"</string>
<string name="meid" msgid="6210568493746275750">"MEID"</string>
- <string name="simContacts_emptyLoading" msgid="6700035985448642408">"טוען מכרטיס SIM…"</string>
- <string name="simContacts_title" msgid="27341688347689769">"אנשי קשר בכרטיס SIM"</string>
+ <string name="simContacts_emptyLoading" msgid="6700035985448642408">"טוען מכרטיס SIM…"</string>
+ <string name="simContacts_title" msgid="27341688347689769">"אנשי קשר בכרטיס SIM"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"הפעל מחדש את אפליקציית אנשי הקשר כדי להשתמש בתכונה זו."</string>
<string name="dialer_hint_find_contact" msgid="8798845521253672403">"הקלד שם או מספר טלפון"</string>
<string name="call_log_all_title" msgid="3566738938889333307">"הכול"</string>
diff --git a/res/values/animation_constants.xml b/res/values/animation_constants.xml
index b41b316..4e4bc36 100644
--- a/res/values/animation_constants.xml
+++ b/res/values/animation_constants.xml
@@ -24,7 +24,7 @@
<integer name="max_dismiss_velocity">2000</integer>
<integer name="snap_animation_duration">350</integer>
<integer name="swipe_scroll_slop">2</integer>
- <dimen name="min_swipe">5dip</dimen>
+ <dimen name="min_swipe">0dip</dimen>
<dimen name="min_vert">10dip</dimen>
<dimen name="min_lock">20dip</dimen>
</resources>
diff --git a/src/com/android/dialer/CallDetailActivity.java b/src/com/android/dialer/CallDetailActivity.java
index b0c8e68..a24940d 100644
--- a/src/com/android/dialer/CallDetailActivity.java
+++ b/src/com/android/dialer/CallDetailActivity.java
@@ -17,11 +17,13 @@
package com.android.dialer;
import android.app.Activity;
+import android.app.LoaderManager.LoaderCallbacks;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
+import android.content.Loader;
import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.drawable.Drawable;
@@ -30,9 +32,10 @@
import android.os.Bundle;
import android.provider.CallLog;
import android.provider.CallLog.Calls;
-import android.provider.Contacts.Intents.Insert;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.DisplayNameSources;
+import android.provider.ContactsContract.Intents.Insert;
import android.provider.VoicemailContract.Voicemails;
import android.telephony.PhoneNumberUtils;
import android.telephony.TelephonyManager;
@@ -54,6 +57,8 @@
import com.android.contacts.common.CallUtil;
import com.android.contacts.common.ClipboardUtils;
import com.android.contacts.common.GeoUtil;
+import com.android.contacts.common.model.Contact;
+import com.android.contacts.common.model.ContactLoader;
import com.android.contacts.common.util.UriUtils;
import com.android.dialer.BackScrollManager.ScrollableHeader;
import com.android.dialer.calllog.CallDetailHistoryAdapter;
@@ -80,6 +85,9 @@
public class CallDetailActivity extends Activity implements ProximitySensorAware {
private static final String TAG = "CallDetail";
+ private static final int LOADER_ID = 0;
+ private static final String BUNDLE_CONTACT_URI_EXTRA = "contact_uri_extra";
+
private static final char LEFT_TO_RIGHT_EMBEDDING = '\u202A';
private static final char POP_DIRECTIONAL_FORMATTING = '\u202C';
@@ -252,6 +260,35 @@
}
};
+ private final LoaderCallbacks<Contact> mLoaderCallbacks = new LoaderCallbacks<Contact>() {
+ @Override
+ public void onLoaderReset(Loader<Contact> loader) {
+ }
+
+ @Override
+ public void onLoadFinished(Loader<Contact> loader, Contact data) {
+ final Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
+ intent.setType(Contacts.CONTENT_ITEM_TYPE);
+ if (data.getDisplayNameSource() >= DisplayNameSources.ORGANIZATION) {
+ intent.putExtra(Insert.NAME, data.getDisplayName());
+ }
+ intent.putExtra(Insert.DATA, data.getContentValues());
+ bindContactPhotoAction(intent, R.drawable.ic_add_contact_holo_dark,
+ getString(R.string.description_add_contact));
+ }
+
+ @Override
+ public Loader<Contact> onCreateLoader(int id, Bundle args) {
+ final Uri contactUri = args.getParcelable(BUNDLE_CONTACT_URI_EXTRA);
+ if (contactUri == null) {
+ Log.wtf(TAG, "No contact lookup uri provided.");
+ }
+ return new ContactLoader(CallDetailActivity.this, contactUri,
+ false /* loadGroupMetaData */, false /* loadInvitableAccountTypes */,
+ false /* postViewNotification */, true /* computeFormattedPhoneNumber */);
+ }
+ };
+
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
@@ -452,6 +489,8 @@
nameOrNumber = firstDetails.number;
}
+ boolean skipBind = false;
+
if (contactUri != null && !UriUtils.isEncodedContactUri(contactUri)) {
mainActionIntent = new Intent(Intent.ACTION_VIEW, contactUri);
// This will launch People's detail contact screen, so we probably want to
@@ -461,6 +500,14 @@
mainActionIcon = R.drawable.ic_contacts_holo_dark;
mainActionDescription =
getString(R.string.description_view_contact, nameOrNumber);
+ } else if (UriUtils.isEncodedContactUri(contactUri)) {
+ final Bundle bundle = new Bundle(1);
+ bundle.putParcelable(BUNDLE_CONTACT_URI_EXTRA, contactUri);
+ getLoaderManager().initLoader(LOADER_ID, bundle, mLoaderCallbacks);
+ mainActionIntent = null;
+ mainActionIcon = R.drawable.ic_add_contact_holo_dark;
+ mainActionDescription = getString(R.string.description_add_contact);
+ skipBind = true;
} else if (isVoicemailNumber) {
mainActionIntent = null;
mainActionIcon = 0;
@@ -485,31 +532,16 @@
mainActionIcon = R.drawable.ic_add_contact_holo_dark;
mainActionDescription = getString(R.string.description_add_contact);
} else {
- // If we cannot call the number, when we probably cannot add it as a contact either.
- // This is usually the case of private, unknown, or payphone numbers.
+ // If we cannot call the number, when we probably cannot add it as a contact
+ // either. This is usually the case of private, unknown, or payphone numbers.
mainActionIntent = null;
mainActionIcon = 0;
mainActionDescription = null;
}
- if (mainActionIntent == null) {
- mMainActionView.setVisibility(View.INVISIBLE);
- mMainActionPushLayerView.setVisibility(View.GONE);
- mHeaderTextView.setVisibility(View.INVISIBLE);
- mHeaderOverlayView.setVisibility(View.INVISIBLE);
- } else {
- mMainActionView.setVisibility(View.VISIBLE);
- mMainActionView.setImageResource(mainActionIcon);
- mMainActionPushLayerView.setVisibility(View.VISIBLE);
- mMainActionPushLayerView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- startActivity(mainActionIntent);
- }
- });
- mMainActionPushLayerView.setContentDescription(mainActionDescription);
- mHeaderTextView.setVisibility(View.VISIBLE);
- mHeaderOverlayView.setVisibility(View.VISIBLE);
+ if (!skipBind) {
+ bindContactPhotoAction(mainActionIntent, mainActionIcon,
+ mainActionDescription);
}
// This action allows to call the number that places the call.
@@ -597,6 +629,29 @@
mAsyncTaskExecutor.submit(Tasks.UPDATE_PHONE_CALL_DETAILS, new UpdateContactDetailsTask());
}
+ private void bindContactPhotoAction(final Intent actionIntent, int actionIcon,
+ String actionDescription) {
+ if (actionIntent == null) {
+ mMainActionView.setVisibility(View.INVISIBLE);
+ mMainActionPushLayerView.setVisibility(View.GONE);
+ mHeaderTextView.setVisibility(View.INVISIBLE);
+ mHeaderOverlayView.setVisibility(View.INVISIBLE);
+ } else {
+ mMainActionView.setVisibility(View.VISIBLE);
+ mMainActionView.setImageResource(actionIcon);
+ mMainActionPushLayerView.setVisibility(View.VISIBLE);
+ mMainActionPushLayerView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ startActivity(actionIntent);
+ }
+ });
+ mMainActionPushLayerView.setContentDescription(actionDescription);
+ mHeaderTextView.setVisibility(View.VISIBLE);
+ mHeaderOverlayView.setVisibility(View.VISIBLE);
+ }
+ }
+
/** Return the phone call details for a given call log URI. */
private PhoneCallDetails getPhoneCallDetailsForUri(Uri callUri) {
ContentResolver resolver = getContentResolver();
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 82d5c3f..faf63cd 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -852,7 +852,6 @@
}
// Go all the way back to the favorites fragment, regardless of how many times we
// transitioned between search fragments
- final BackStackEntry entry = getFragmentManager().getBackStackEntryAt(0);
getFragmentManager().popBackStack(0, FragmentManager.POP_BACK_STACK_INCLUSIVE);
setNotInSearchUi();
}
diff --git a/src/com/android/dialer/calllog/CallDetailHistoryAdapter.java b/src/com/android/dialer/calllog/CallDetailHistoryAdapter.java
index 52435aa..8af3b82 100644
--- a/src/com/android/dialer/calllog/CallDetailHistoryAdapter.java
+++ b/src/com/android/dialer/calllog/CallDetailHistoryAdapter.java
@@ -150,7 +150,7 @@
DateUtils.FORMAT_SHOW_WEEKDAY | DateUtils.FORMAT_SHOW_YEAR);
dateView.setText(dateValue);
// Set the duration
- if (callType == Calls.MISSED_TYPE || callType == Calls.VOICEMAIL_TYPE) {
+ if (Calls.VOICEMAIL_TYPE == callType || CallTypeHelper.isMissedCallType(callType)) {
durationView.setVisibility(View.GONE);
} else {
durationView.setVisibility(View.VISIBLE);
diff --git a/src/com/android/dialer/calllog/CallLogGroupBuilder.java b/src/com/android/dialer/calllog/CallLogGroupBuilder.java
index 1e4684e..213f1e7 100644
--- a/src/com/android/dialer/calllog/CallLogGroupBuilder.java
+++ b/src/com/android/dialer/calllog/CallLogGroupBuilder.java
@@ -78,8 +78,7 @@
shouldGroup = false;
} else {
// Incoming, outgoing, and missed calls group together.
- shouldGroup = (callType == Calls.INCOMING_TYPE || callType == Calls.OUTGOING_TYPE ||
- callType == Calls.MISSED_TYPE);
+ shouldGroup = callType != Calls.VOICEMAIL_TYPE;
}
if (shouldGroup) {
diff --git a/src/com/android/dialer/calllog/CallTypeHelper.java b/src/com/android/dialer/calllog/CallTypeHelper.java
index 0f9b737..1c4f44f 100644
--- a/src/com/android/dialer/calllog/CallTypeHelper.java
+++ b/src/com/android/dialer/calllog/CallTypeHelper.java
@@ -64,7 +64,7 @@
return mVoicemailName;
default:
- throw new IllegalArgumentException("invalid call type: " + callType);
+ return mMissedName;
}
}
@@ -86,7 +86,15 @@
return mNewVoicemailColor;
default:
- throw new IllegalArgumentException("invalid call type: " + callType);
+ // Don't highlight calls of unknown types. They are treated as missed calls by
+ // the rest of the UI, but since they will never be marked as read by
+ // {@link CallLogQueryHandler}, just don't ever highlight them anyway.
+ return null;
}
}
+
+ public static boolean isMissedCallType(int callType) {
+ return (callType != Calls.INCOMING_TYPE && callType != Calls.OUTGOING_TYPE &&
+ callType != Calls.VOICEMAIL_TYPE);
+ }
}
diff --git a/src/com/android/dialer/calllog/CallTypeIconsView.java b/src/com/android/dialer/calllog/CallTypeIconsView.java
index e835128..a65f2c2 100644
--- a/src/com/android/dialer/calllog/CallTypeIconsView.java
+++ b/src/com/android/dialer/calllog/CallTypeIconsView.java
@@ -86,7 +86,11 @@
case Calls.VOICEMAIL_TYPE:
return mResources.voicemail;
default:
- throw new IllegalArgumentException("invalid call type: " + callType);
+ // 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
+ // distinguish between rejected and missed calls). Instead of crashing, just
+ // assume that all unknown call types are missed calls.
+ return mResources.missed;
}
}
diff --git a/src/com/android/dialer/dialpad/SmartDialCursorLoader.java b/src/com/android/dialer/dialpad/SmartDialCursorLoader.java
index a13ecd8..3690796 100644
--- a/src/com/android/dialer/dialpad/SmartDialCursorLoader.java
+++ b/src/com/android/dialer/dialpad/SmartDialCursorLoader.java
@@ -162,6 +162,8 @@
}
private void releaseResources(Cursor cursor) {
- cursor.close();
+ if (cursor != null) {
+ cursor.close();
+ }
}
}