From 1cc4a8a35bcba0056e788d24a9a87a56d0a8f57d Mon Sep 17 00:00:00 2001 From: Varun Shah Date: Mon, 18 May 2020 18:10:59 -0700 Subject: Fix writeable mode bug with CP2 contact photo. Bug: 150857116 Test: atest ContactsProvider2Test Test: atest android.permission.cts.ContactsProviderTest Test: atest android.permission2.cts.ContactsProviderTest Change-Id: I4d81971cb562b130d5edfdaa77444969fbf315af (cherry picked from commit 1a449253b3f9c7c6fba3bd5c122a9659be7d5090) --- src/com/android/providers/contacts/ContactsProvider2.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/providers/contacts/ContactsProvider2.java b/src/com/android/providers/contacts/ContactsProvider2.java index 5159fb94..99d8bcf7 100644 --- a/src/com/android/providers/contacts/ContactsProvider2.java +++ b/src/com/android/providers/contacts/ContactsProvider2.java @@ -8628,7 +8628,7 @@ public class ContactsProvider2 extends AbstractContactsProvider case RAW_CONTACTS_ID_DISPLAY_PHOTO: { long rawContactId = Long.parseLong(uri.getPathSegments().get(1)); - boolean writeable = !mode.equals("r"); + boolean writeable = mode.contains("w"); // Find the primary photo data record for this raw contact. SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); -- cgit v1.2.3 From be1f52acdd47fbc66a5681d682db4022aa239838 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Sat, 31 Oct 2020 16:02:32 +0000 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I0ead5e5aa89f6176c939efe544d98a6331aa2e7d --- res/values-fa/strings.xml | 2 +- res/values-mr/strings.xml | 2 +- res/values-pt-rPT/strings.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 9fa5c9bc..a5cad589 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -26,7 +26,7 @@ "سایر موارد" "پست صوتی از " "کپی پایگاه داده مخاطبین" - "شما در شرف ۱) ایجاد یک کپی از پایگاه داده‌ در حافظه داخلی هستید، این کپی حاوی همه اطلاعات مربوط به مخاطبین و همه گزارشات تماس است و همچنین می‌خواهید ۲) آنرا ایمیل کنید. به خاطر داشته باشید که به محض کپی کردن این نسخه در دستگاه یا دریافت ایمیل، آنرا حذف کنید." + "شما در شرف ۱) ایجاد یک نسخه از پایگاه داده‌ در حافظه داخلی هستید، این کپی حاوی همه اطلاعات مربوط به مخاطبین و همه گزارش‌های تماس است و همچنین می‌خواهید ۲) آن را ایمیل کنید. به‌خاطر داشته باشید که به محض تهیه این نسخه در دستگاه یا دریافت ایمیل، آن را حذف کنید." "اکنون حذف شود" "شروع" "یک برنامه را برای ارسال فایل خود انتخاب کنید" diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml index 67014ca7..cb75f204 100644 --- a/res/values-mr/strings.xml +++ b/res/values-mr/strings.xml @@ -29,7 +29,7 @@ "तुम्ही 1) आपल्‍या डेटाबेसची प्रत बनवणार आहात जिच्‍यामध्‍ये सर्व संपर्कांसंबंधी माहिती आणि अंतर्गत संचयनावरील कॉल लॉग समाविष्‍ट असतात आणि 2) ती ईमेल करणार आहात. तुम्ही डिव्‍हाइसवरून यशस्‍वीरित्‍या प्रत कॉपी केल्‍यानंतर किंवा ईमेल प्राप्त केल्‍यानंतर लगेच ती हटविण्‍याचे लक्षात ठेवा." "आता हटवा" "प्रारंभ करा" - "तुमची फाईल पाठविण्‍यासाठी एक प्रोग्राम निवडा" + "तुमची फाइल पाठविण्‍यासाठी एक प्रोग्राम निवडा" "संपर्क Db संलग्‍न केला" "संलग्‍न केलेला माझ्‍या सर्व संपर्क माहितीसह माझा संपर्क डेटाबेस आहे. काळजीपूर्वक हाताळणी करा." diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index beaa2c73..8d94fbbb 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -16,7 +16,7 @@ - "Aplicações Principais do Android" + "Apps Principais do Android" "Armazenamento de contactos" "Contactos" "A atualização de contactos necessita de mais memória." -- cgit v1.2.3 From 6f4ceb405ac18493d5484fc7343b998e12282890 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Mon, 23 Nov 2020 06:38:38 +0000 Subject: Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import Change-Id: I8dfba8ab93c14613aefaf86636e30e2af83c5d4d --- res/values-fa/strings.xml | 2 +- res/values-mr/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 9fa5c9bc..a5cad589 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -26,7 +26,7 @@ "سایر موارد" "پست صوتی از " "کپی پایگاه داده مخاطبین" - "شما در شرف ۱) ایجاد یک کپی از پایگاه داده‌ در حافظه داخلی هستید، این کپی حاوی همه اطلاعات مربوط به مخاطبین و همه گزارشات تماس است و همچنین می‌خواهید ۲) آنرا ایمیل کنید. به خاطر داشته باشید که به محض کپی کردن این نسخه در دستگاه یا دریافت ایمیل، آنرا حذف کنید." + "شما در شرف ۱) ایجاد یک نسخه از پایگاه داده‌ در حافظه داخلی هستید، این کپی حاوی همه اطلاعات مربوط به مخاطبین و همه گزارش‌های تماس است و همچنین می‌خواهید ۲) آن را ایمیل کنید. به‌خاطر داشته باشید که به محض تهیه این نسخه در دستگاه یا دریافت ایمیل، آن را حذف کنید." "اکنون حذف شود" "شروع" "یک برنامه را برای ارسال فایل خود انتخاب کنید" diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml index 67014ca7..cb75f204 100644 --- a/res/values-mr/strings.xml +++ b/res/values-mr/strings.xml @@ -29,7 +29,7 @@ "तुम्ही 1) आपल्‍या डेटाबेसची प्रत बनवणार आहात जिच्‍यामध्‍ये सर्व संपर्कांसंबंधी माहिती आणि अंतर्गत संचयनावरील कॉल लॉग समाविष्‍ट असतात आणि 2) ती ईमेल करणार आहात. तुम्ही डिव्‍हाइसवरून यशस्‍वीरित्‍या प्रत कॉपी केल्‍यानंतर किंवा ईमेल प्राप्त केल्‍यानंतर लगेच ती हटविण्‍याचे लक्षात ठेवा." "आता हटवा" "प्रारंभ करा" - "तुमची फाईल पाठविण्‍यासाठी एक प्रोग्राम निवडा" + "तुमची फाइल पाठविण्‍यासाठी एक प्रोग्राम निवडा" "संपर्क Db संलग्‍न केला" "संलग्‍न केलेला माझ्‍या सर्व संपर्क माहितीसह माझा संपर्क डेटाबेस आहे. काळजीपूर्वक हाताळणी करा." -- cgit v1.2.3 From 4c94266286279d545f3a770bad8a641d46164ee4 Mon Sep 17 00:00:00 2001 From: Tyler Gunn Date: Thu, 3 Dec 2020 15:26:58 -0800 Subject: Ensure update/deletes in the call log notify content observers. Update/delete in CallLogProvider used to use DbModifierWithNotification which took care of this. Due to a change made to CallLogProvider to use a query builder class, DbModifierWithNotification was not being used any more. Made the notifyCallLogChange accessible as a static method and also use it in CallLogProvider on update/delete. There is a bunch of other logic in DbModifierWithNotification in the update method that needs to be migrated over, however this change fixes the immediate bug. Test: Manual test; clear the call log and verify Dialer recents lists updates itself immediately. Test: Manual test: clear a single row in the call log and verify dialer recent list updates itself immediately. Test: Added update/delete CTS tests that verify content observer triggers for update and delete. Fixes: 174243006 Bug: 174211399 Change-Id: Ie716d3d739c6854d7c40a1f94498bff15931b272 Merged-In: Ie716d3d739c6854d7c40a1f94498bff15931b272 --- src/com/android/providers/contacts/CallLogProvider.java | 12 ++++++++++-- .../providers/contacts/DbModifierWithNotification.java | 16 ++++++++-------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/com/android/providers/contacts/CallLogProvider.java b/src/com/android/providers/contacts/CallLogProvider.java index ebe111f1..7a610151 100644 --- a/src/com/android/providers/contacts/CallLogProvider.java +++ b/src/com/android/providers/contacts/CallLogProvider.java @@ -563,7 +563,11 @@ public class CallLogProvider extends ContentProvider { throw new UnsupportedOperationException("Cannot update URL: " + uri); } - return qb.update(db, values, selectionBuilder.build(), selectionArgs); + int rowsUpdated = qb.update(db, values, selectionBuilder.build(), selectionArgs); + if (rowsUpdated > 0) { + DbModifierWithNotification.notifyCallLogChange(getContext()); + } + return rowsUpdated; } private int deleteInternal(Uri uri, String selection, String[] selectionArgs) { @@ -596,7 +600,11 @@ public class CallLogProvider extends ContentProvider { case CALLS: // TODO: Special case - We may want to forward the delete request on user 0 to the // shadow provider too. - return qb.delete(db, selectionBuilder.build(), selectionArgs); + int deletedCount = qb.delete(db, selectionBuilder.build(), selectionArgs); + if (deletedCount > 0) { + DbModifierWithNotification.notifyCallLogChange(getContext()); + } + return deletedCount; default: throw new UnsupportedOperationException("Cannot delete that URL: " + uri); } diff --git a/src/com/android/providers/contacts/DbModifierWithNotification.java b/src/com/android/providers/contacts/DbModifierWithNotification.java index 852301d3..03ebd1f1 100644 --- a/src/com/android/providers/contacts/DbModifierWithNotification.java +++ b/src/com/android/providers/contacts/DbModifierWithNotification.java @@ -109,7 +109,7 @@ public class DbModifierWithNotification implements DatabaseModifier { packagesModified); } if (rowId > 0 && mIsCallsTable) { - notifyCallLogChange(); + notifyCallLogChange(mContext); } return rowId; } @@ -126,20 +126,20 @@ public class DbModifierWithNotification implements DatabaseModifier { ContentUris.withAppendedId(mBaseUri, rowId), packagesModified); } if (rowId > 0 && mIsCallsTable) { - notifyCallLogChange(); + notifyCallLogChange(mContext); } return rowId; } - private void notifyCallLogChange() { - mContext.getContentResolver().notifyChange(Calls.CONTENT_URI, null, false); + public static void notifyCallLogChange(Context context) { + context.getContentResolver().notifyChange(Calls.CONTENT_URI, null, false); Intent intent = new Intent("com.android.internal.action.CALL_LOG_CHANGE"); intent.setComponent(new ComponentName("com.android.calllogbackup", "com.android.calllogbackup.CallLogChangeReceiver")); - if (!mContext.getPackageManager().queryBroadcastReceivers(intent, 0).isEmpty()) { - mContext.sendBroadcast(intent); + if (!context.getPackageManager().queryBroadcastReceivers(intent, 0).isEmpty()) { + context.sendBroadcast(intent); } } @@ -201,7 +201,7 @@ public class DbModifierWithNotification implements DatabaseModifier { notifyVoicemailChange(mBaseUri, packagesModified); } if (count > 0 && mIsCallsTable) { - notifyCallLogChange(); + notifyCallLogChange(mContext); } if (hasMarkedRead) { // A "New" voicemail has been marked as read by the server. This voicemail is no longer @@ -283,7 +283,7 @@ public class DbModifierWithNotification implements DatabaseModifier { notifyVoicemailChange(mBaseUri, packagesModified); } if (count > 0 && mIsCallsTable) { - notifyCallLogChange(); + notifyCallLogChange(mContext); } return count; } -- cgit v1.2.3 From a8d6b1ff4a8c188ffdbff32dd2a63fda1b55b883 Mon Sep 17 00:00:00 2001 From: Tyler Gunn Date: Wed, 9 Dec 2020 09:57:51 -0800 Subject: Provide allow-list to recipient of voicemail intents. This enables an app receiving the intent to launch a background activity to perform more time consuming (but time sensitive) voicemail related work. Test: Manual test; verified that when new VVM broadcast is sent that the broadcast options are set to allow-list the recipient for 10sec. Bug: 173155475 Merged-In: I4768ca3aa607bf3341ac8fe89fa074fe65dfedea Change-Id: I4768ca3aa607bf3341ac8fe89fa074fe65dfedea --- AndroidManifest.xml | 2 ++ .../android/providers/contacts/VoicemailNotifier.java | 19 ++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 9542e6d9..be62fc16 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -4,6 +4,8 @@ android:sharedUserLabel="@string/sharedUserLabel"> + + diff --git a/src/com/android/providers/contacts/VoicemailNotifier.java b/src/com/android/providers/contacts/VoicemailNotifier.java index 159cec73..b4033eac 100644 --- a/src/com/android/providers/contacts/VoicemailNotifier.java +++ b/src/com/android/providers/contacts/VoicemailNotifier.java @@ -1,5 +1,6 @@ package com.android.providers.contacts; +import android.app.BroadcastOptions; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -27,6 +28,12 @@ public class VoicemailNotifier { private final String TAG = "VoicemailNotifier"; + /** + * Grant recipients of new voicemail broadcasts a 10sec allowlist so they can start a background + * service to do VVM processing. + */ + private final long VOICEMAIL_ALLOW_LIST_DURATION_MILLIS = 10000; + private final Context mContext; private final Uri mBaseUri; @@ -85,7 +92,17 @@ public class VoicemailNotifier { intent.putExtra(VoicemailContract.EXTRA_SELF_CHANGE, callingPackages.contains(component.getPackageName())); } - mContext.sendBroadcast(intent); + if (intentAction.equals(VoicemailContract.ACTION_NEW_VOICEMAIL)) { + BroadcastOptions bopts = BroadcastOptions.makeBasic(); + bopts.setTemporaryAppWhitelistDuration(VOICEMAIL_ALLOW_LIST_DURATION_MILLIS); + Log.i(TAG, String.format("sendNotification: allowMillis=%d, pkg=%s", + VOICEMAIL_ALLOW_LIST_DURATION_MILLIS, component.getPackageName())); + mContext.sendBroadcast(intent, android.Manifest.permission.READ_VOICEMAIL, + bopts.toBundle()); + } else { + mContext.sendBroadcast(intent); + } + Log.v(TAG, String.format("Sent intent. act:%s, url:%s, comp:%s," + " self_change:%s", intent.getAction(), intent.getData(), component.getClassName(), -- cgit v1.2.3