Exercise voicemail permissions in Test Dialer

Bug: 20333102
Change-Id: Icc244816518a558ba5b841d7d9e070b3c6c34e8b
diff --git a/testapps/AndroidManifest.xml b/testapps/AndroidManifest.xml
index c8d7105..130cf48 100644
--- a/testapps/AndroidManifest.xml
+++ b/testapps/AndroidManifest.xml
@@ -21,10 +21,12 @@
     <uses-permission android:name="android.permission.CAMERA" />
     <uses-permission android:name="android.permission.CALL_PHONE" />
     <uses-permission android:name="android.permission.CONTROL_INCALL_EXPERIENCE" />
+    <uses-permission android:name="android.permission.READ_CALL_LOG" />
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
     <uses-permission android:name="android.permission.REGISTER_CALL_PROVIDER" />
     <uses-permission android:name="android.permission.REGISTER_CONNECTION_MANAGER" />
     <uses-permission android:name="android.permission.REGISTER_SIM_SUBSCRIPTION" />
+    <uses-permission android:name="android.permission.WRITE_CALL_LOG" />
 
     <application android:label="@string/app_name">
         <uses-library android:name="android.test.runner" />
diff --git a/testapps/res/layout/testdialer_main.xml b/testapps/res/layout/testdialer_main.xml
index a5453fc..4f2d6bb 100644
--- a/testapps/res/layout/testdialer_main.xml
+++ b/testapps/res/layout/testdialer_main.xml
@@ -34,4 +34,9 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="@string/defaultDialerButton" />
+    <Button
+        android:id="@+id/test_voicemail_button"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/testVoicemailButton" />
 </LinearLayout>
diff --git a/testapps/res/values/donottranslate_strings.xml b/testapps/res/values/donottranslate_strings.xml
index 91d8628..6a163d4 100644
--- a/testapps/res/values/donottranslate_strings.xml
+++ b/testapps/res/values/donottranslate_strings.xml
@@ -29,4 +29,8 @@
 
     <!-- String for button in TestDialerActivity that places a test call -->
     <string name="placeCallButton">Place call</string>
+
+    <!-- String for button in TestDialerActivity that performs voicemail requests to verify
+            voicemail permissions -->
+    <string name="testVoicemailButton">Exercise voicemail permissions</string>
 </resources>
diff --git a/testapps/src/com/android/server/telecom/testapps/TestDialerActivity.java b/testapps/src/com/android/server/telecom/testapps/TestDialerActivity.java
index 08a0d3b..dcef96a 100644
--- a/testapps/src/com/android/server/telecom/testapps/TestDialerActivity.java
+++ b/testapps/src/com/android/server/telecom/testapps/TestDialerActivity.java
@@ -1,13 +1,16 @@
 package com.android.server.telecom.testapps;
 
 import android.app.Activity;
+import android.content.ContentValues;
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Bundle;
+import android.provider.CallLog.Calls;
 import android.telecom.PhoneAccount;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.EditText;
+import android.widget.Toast;
 
 import com.android.server.telecom.testapps.R;
 
@@ -31,6 +34,13 @@
             }
         });
 
+        findViewById(R.id.test_voicemail_button).setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                testVoicemail();
+            }
+        });
+
         mNumberView = (EditText) findViewById(R.id.number);
         updateEditTextWithNumber();
     }
@@ -57,4 +67,19 @@
                 Uri.fromParts(PhoneAccount.SCHEME_TEL, mNumberView.getText().toString(), null));
         startActivityForResult(intent, 0);
     }
+
+    private void testVoicemail() {
+        try {
+            // Test read
+            getContentResolver().query(Calls.CONTENT_URI_WITH_VOICEMAIL, null, null, null, null);
+            // Test write
+            final ContentValues values = new ContentValues();
+            values.put(Calls.CACHED_NAME, "hello world");
+            getContentResolver().update(Calls.CONTENT_URI_WITH_VOICEMAIL, values, "1=0", null);
+        } catch (SecurityException e) {
+            Toast.makeText(this, "Permission check failed", Toast.LENGTH_SHORT).show();
+            return;
+        }
+        Toast.makeText(this, "Permission check succeeded", Toast.LENGTH_SHORT).show();
+    }
 }