diff options
3 files changed, 19 insertions, 24 deletions
diff --git a/src/com/android/providers/contacts/VoicemailContentProvider.java b/src/com/android/providers/contacts/VoicemailContentProvider.java index fb0957cb..e7bd32f8 100644 --- a/src/com/android/providers/contacts/VoicemailContentProvider.java +++ b/src/com/android/providers/contacts/VoicemailContentProvider.java @@ -116,7 +116,7 @@ public class VoicemailContentProvider extends ContentProvider { return lookupMimeType(uriData); } // Not an individual voicemail - must be a directory listing type. - return VoicemailContract.DIR_TYPE; + return Voicemails.DIR_TYPE; } /** Query the db for the MIME type of the given URI, called only from {@link #getType(Uri)}. */ @@ -222,10 +222,7 @@ public class VoicemailContentProvider extends ContentProvider { SQLiteDatabase db = mDbHelper.getWritableDatabase(); long rowId = db.insert(VOICEMAILS_TABLE_NAME, null, copiedValues); if (rowId > 0) { - Uri newUri = ContentUris.withAppendedId( - Uri.withAppendedPath(VoicemailContract.CONTENT_URI_SOURCE, - copiedValues.getAsString(Voicemails.SOURCE_PACKAGE)), rowId); - + Uri newUri = ContentUris.withAppendedId(uriData.getUri(), rowId); if (sendProviderChangedNotification) { notifyChange(newUri, VoicemailContract.ACTION_NEW_VOICEMAIL, Intent.ACTION_PROVIDER_CHANGED); @@ -501,16 +498,13 @@ public class VoicemailContentProvider extends ContentProvider { /** Get a {@link UriData} corresponding to a given uri. */ private UriData createUriData(Uri uri) { + String sourcePackage = uri.getQueryParameter(VoicemailContract.PARAM_KEY_SOURCE_PACKAGE); List<String> segments = uri.getPathSegments(); switch (createUriMatcher().match(uri)) { case VOICEMAILS: - return new UriData(uri, null, null); + return new UriData(uri, null, sourcePackage); case VOICEMAILS_ID: - return new UriData(uri, segments.get(1), null); - case VOICEMAILS_SOURCE: - return new UriData(uri, null, segments.get(2)); - case VOICEMAILS_SOURCE_ID: - return new UriData(uri, segments.get(3), segments.get(2)); + return new UriData(uri, segments.get(1), sourcePackage); case NO_MATCH: throw new IllegalArgumentException("Invalid URI: " + uri); default: diff --git a/src/com/android/providers/contacts/VoicemailUriType.java b/src/com/android/providers/contacts/VoicemailUriType.java index 9e728a28..c3a33abe 100644 --- a/src/com/android/providers/contacts/VoicemailUriType.java +++ b/src/com/android/providers/contacts/VoicemailUriType.java @@ -23,9 +23,7 @@ import com.android.providers.contacts.util.UriType; enum VoicemailUriType implements UriType { NO_MATCH(null), VOICEMAILS("voicemail"), - VOICEMAILS_ID("voicemail/#"), - VOICEMAILS_SOURCE("voicemail/source/*"), - VOICEMAILS_SOURCE_ID("voicemail/source/*/#"); + VOICEMAILS_ID("voicemail/#"); private final String path; diff --git a/tests/src/com/android/providers/contacts/VoicemailProviderTest.java b/tests/src/com/android/providers/contacts/VoicemailProviderTest.java index 90ad870e..9a3bd658 100644 --- a/tests/src/com/android/providers/contacts/VoicemailProviderTest.java +++ b/tests/src/com/android/providers/contacts/VoicemailProviderTest.java @@ -95,13 +95,13 @@ public class VoicemailProviderTest extends BaseContactsProvider2Test { // Give away full permission, in case it was granted previously. mActor.removePermissions(ALL_PERMISSION); mActor.addPermissions(OWN_PERMISSION); - mUseSourceUri = false; + mUseSourceUri = true; } private void setUpForFullPermission() { mActor.addPermissions(OWN_PERMISSION); mActor.addPermissions(ALL_PERMISSION); - mUseSourceUri = true; + mUseSourceUri = false; } private void setUpForNoPermission() { @@ -111,12 +111,8 @@ public class VoicemailProviderTest extends BaseContactsProvider2Test { } private Uri contentUri() { - if (mUseSourceUri) { - return VoicemailContract.CONTENT_URI; - } else { - return Uri.withAppendedPath(VoicemailContract.CONTENT_URI_SOURCE, - mActor.packageName); - } + return mUseSourceUri ? + Voicemails.buildSourceUri(mActor.packageName) : Voicemails.CONTENT_URI; } public void testInsert() throws Exception { @@ -198,8 +194,9 @@ public class VoicemailProviderTest extends BaseContactsProvider2Test { // Now give away full permission and check that we can update and delete only // the own voicemail. setUpForOwnPermission(); - mResolver.update(ownVoicemail, getDefaultVoicemailValues(), null, null); - mResolver.delete(ownVoicemail, null, null); + mResolver.update(withSourcePackageParam(ownVoicemail), + getDefaultVoicemailValues(), null, null); + mResolver.delete(withSourcePackageParam(ownVoicemail), null, null); // However, attempting to update or delete another-package's voicemail should fail. EvenMoreAsserts.assertThrows(SecurityException.class, new Runnable() { @@ -216,6 +213,12 @@ public class VoicemailProviderTest extends BaseContactsProvider2Test { }); } + private Uri withSourcePackageParam(Uri uri) { + return uri.buildUpon() + .appendQueryParameter(VoicemailContract.PARAM_KEY_SOURCE_PACKAGE, mActor.packageName) + .build(); + } + // Test to ensure that all operations fail when no voicemail permission is granted. public void testNoPermissions() { setUpForNoPermission(); |