summaryrefslogtreecommitdiffstats
path: root/src/com/android
diff options
context:
space:
mode:
authorYorke Lee <yorkelee@google.com>2015-04-23 13:23:28 -0700
committerYorke Lee <yorkelee@google.com>2015-04-27 13:00:31 -0700
commit77b65aa3d1c2db02ce664c4b31e10370efe645cb (patch)
treee68771bbd67b8d4411af76b1ac16aca06e6d8e98 /src/com/android
parent74e4f99cada94d6ca6be5d1bfee9abe7c4561253 (diff)
downloadpackages_providers_ContactsProvider-77b65aa3d1c2db02ce664c4b31e10370efe645cb.zip
packages_providers_ContactsProvider-77b65aa3d1c2db02ce664c4b31e10370efe645cb.tar.gz
packages_providers_ContactsProvider-77b65aa3d1c2db02ce664c4b31e10370efe645cb.tar.bz2
Grant VoicemailContentProvider permissions to default or system dialers
Bug: 20333102 Change-Id: Icb54620cf9241b3999bcb3de1b73394c71becb2f
Diffstat (limited to 'src/com/android')
-rw-r--r--src/com/android/providers/contacts/CallLogProvider.java6
-rw-r--r--src/com/android/providers/contacts/VoicemailContentProvider.java14
-rw-r--r--src/com/android/providers/contacts/VoicemailPermissions.java29
3 files changed, 30 insertions, 19 deletions
diff --git a/src/com/android/providers/contacts/CallLogProvider.java b/src/com/android/providers/contacts/CallLogProvider.java
index 547e4d3..76481bd 100644
--- a/src/com/android/providers/contacts/CallLogProvider.java
+++ b/src/com/android/providers/contacts/CallLogProvider.java
@@ -303,7 +303,7 @@ public class CallLogProvider extends ContentProvider {
// permission and also requires the additional voicemail param set.
if (hasVoicemailValue(values)) {
checkIsAllowVoicemailRequest(uri);
- mVoicemailPermissions.checkCallerHasWriteAccess();
+ mVoicemailPermissions.checkCallerHasWriteAccess(getCallingPackage());
}
if (mCallsInserter == null) {
SQLiteDatabase db = mDbHelper.getWritableDatabase();
@@ -411,9 +411,9 @@ public class CallLogProvider extends ContentProvider {
SelectionBuilder selectionBuilder, boolean isQuery) {
if (isAllowVoicemailRequest(uri)) {
if (isQuery) {
- mVoicemailPermissions.checkCallerHasReadAccess();
+ mVoicemailPermissions.checkCallerHasReadAccess(getCallingPackage());
} else {
- mVoicemailPermissions.checkCallerHasWriteAccess();
+ mVoicemailPermissions.checkCallerHasWriteAccess(getCallingPackage());
}
} else {
selectionBuilder.addClause(EXCLUDE_VOICEMAIL_SELECTION);
diff --git a/src/com/android/providers/contacts/VoicemailContentProvider.java b/src/com/android/providers/contacts/VoicemailContentProvider.java
index dc84129..ba51b8e 100644
--- a/src/com/android/providers/contacts/VoicemailContentProvider.java
+++ b/src/com/android/providers/contacts/VoicemailContentProvider.java
@@ -255,7 +255,7 @@ public class VoicemailContentProvider extends ContentProvider
}
// You must have access to the provider given in values.
- if (!mVoicemailPermissions.callerHasWriteAccess()) {
+ if (!mVoicemailPermissions.callerHasWriteAccess(getCallingPackage())) {
checkPackagesMatch(getCallingPackage_(),
values.getAsString(VoicemailContract.SOURCE_PACKAGE_FIELD),
uriData.getUri());
@@ -296,7 +296,7 @@ public class VoicemailContentProvider extends ContentProvider
return UriData.createUriData(uri);
}
- if (mVoicemailPermissions.callerHasReadAccess()) {
+ if (mVoicemailPermissions.callerHasReadAccess(getCallingPackage())) {
return UriData.createUriData(uri);
}
@@ -353,7 +353,7 @@ public class VoicemailContentProvider extends ContentProvider
* @throws SecurityException if the check fails.
*/
private void checkPackagePermission(UriData uriData) {
- if (!mVoicemailPermissions.callerHasWriteAccess()) {
+ if (!mVoicemailPermissions.callerHasWriteAccess(getCallingPackage())) {
if (!uriData.hasSourcePackage()) {
// You cannot have a match if this is not a provider URI.
throw new SecurityException(String.format(
@@ -414,14 +414,16 @@ public class VoicemailContentProvider extends ContentProvider
}
/**
- * Whether or not the calling package has the appropriate read/write permission
+ * Whether or not the calling package has the appropriate read/write permission. The user
+ * selected default and/or system dialers are always allowed to read and write to the
+ * VoicemailContentProvider.
*
* @param read Whether or not this operation is a read
*
* @return True if the package has the permission required to perform the read/write operation
*/
private boolean hasReadWritePermission(boolean read) {
- return read ? mVoicemailPermissions.callerHasReadAccess() :
- mVoicemailPermissions.callerHasWriteAccess();
+ return read ? mVoicemailPermissions.callerHasReadAccess(getCallingPackage()) :
+ mVoicemailPermissions.callerHasWriteAccess(getCallingPackage());
}
}
diff --git a/src/com/android/providers/contacts/VoicemailPermissions.java b/src/com/android/providers/contacts/VoicemailPermissions.java
index 0aac18a..e1c9b57 100644
--- a/src/com/android/providers/contacts/VoicemailPermissions.java
+++ b/src/com/android/providers/contacts/VoicemailPermissions.java
@@ -18,6 +18,7 @@ package com.android.providers.contacts;
import android.content.Context;
import android.content.pm.PackageManager;
+import android.telecom.DefaultDialerManager;
/**
* Provides method related to check various voicemail permissions under the
@@ -37,13 +38,19 @@ public class VoicemailPermissions {
}
/** Determine if the calling process has full read access to all voicemails. */
- public boolean callerHasReadAccess() {
+ public boolean callerHasReadAccess(String callingPackage) {
+ if (DefaultDialerManager.isDefaultOrSystemDialer(mContext, callingPackage)) {
+ return true;
+ }
return callerHasPermission(android.Manifest.permission.READ_VOICEMAIL);
}
/** Determine if the calling process has the permission required to update and remove all
* voicemails */
- public boolean callerHasWriteAccess() {
+ public boolean callerHasWriteAccess(String callingPackage) {
+ if (DefaultDialerManager.isDefaultOrSystemDialer(mContext, callingPackage)) {
+ return true;
+ }
return callerHasPermission(android.Manifest.permission.WRITE_VOICEMAIL);
}
@@ -64,17 +71,19 @@ public class VoicemailPermissions {
*
* @throws SecurityException if the caller does not have the voicemail source permission.
*/
- public void checkCallerHasReadAccess() {
- if (!callerHasReadAccess()) {
- throw new SecurityException(String.format("The caller must have %s permission: ",
- android.Manifest.permission.READ_VOICEMAIL));
+ public void checkCallerHasReadAccess(String callingPackage) {
+ if (!callerHasReadAccess(callingPackage)) {
+ throw new SecurityException(String.format("The caller must be the default or system "
+ + "dialer, or have the system-only %s permission: ",
+ android.Manifest.permission.READ_VOICEMAIL));
}
}
- public void checkCallerHasWriteAccess() {
- if (!callerHasWriteAccess()) {
- throw new SecurityException(String.format("The caller must have %s permission: ",
- android.Manifest.permission.WRITE_VOICEMAIL));
+ public void checkCallerHasWriteAccess(String callingPackage) {
+ if (!callerHasWriteAccess(callingPackage)) {
+ throw new SecurityException(String.format("The caller must be the default or system "
+ + "dialer, or have the system-only %s permission: ",
+ android.Manifest.permission.WRITE_VOICEMAIL));
}
}