Merge "Pop up permission dialog if necessary"
diff --git a/src/com/android/soundrecorder/SoundRecorder.java b/src/com/android/soundrecorder/SoundRecorder.java
index 2067d6a..169c3d7 100644
--- a/src/com/android/soundrecorder/SoundRecorder.java
+++ b/src/com/android/soundrecorder/SoundRecorder.java
@@ -28,9 +28,11 @@
 import android.content.Context;
 import android.content.IntentFilter;
 import android.content.BroadcastReceiver;
+import android.content.pm.PackageManager;
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.database.Cursor;
+import android.Manifest;
 import android.media.AudioManager;
 import android.media.MediaRecorder;
 import android.net.Uri;
@@ -208,6 +210,11 @@
     static final int BITRATE_AMR =  5900; // bits/sec
     static final int BITRATE_3GPP = 5900;
     
+    private int mNumPermissionsToRequest = 0;
+    private boolean mShouldRequestSoundPermission = false;
+    private boolean mShouldRequestStoragePermission = false;
+    private static final int PERMISSION_REQUEST_CODE = 0;
+
     WakeLock mWakeLock;
     String mRequestedType = AUDIO_ANY;
     Recorder mRecorder;
@@ -245,6 +252,7 @@
     public void onCreate(Bundle icycle) {
         super.onCreate(icycle);
 
+        checkPermission();
         Intent i = getIntent();
         if (i != null) {
             String s = i.getType();
@@ -862,4 +870,50 @@
                 .show();
         }
     }
+
+    private void checkPermission() {
+        if (checkSelfPermission(Manifest.permission.RECORD_AUDIO)
+                != PackageManager.PERMISSION_GRANTED) {
+            mNumPermissionsToRequest++;
+            mShouldRequestSoundPermission = true;
+        }
+
+        if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
+                != PackageManager.PERMISSION_GRANTED) {
+            mNumPermissionsToRequest++;
+            mShouldRequestStoragePermission  = true;
+        }
+
+        String[] permissionToRequest = new String[mNumPermissionsToRequest];
+        int permissionRequestIndex = 0;
+        if (mShouldRequestSoundPermission) {
+            permissionToRequest[permissionRequestIndex] = Manifest.permission.RECORD_AUDIO;
+            permissionRequestIndex++;
+        }
+        if (mShouldRequestStoragePermission) {
+            permissionToRequest[permissionRequestIndex] =
+                Manifest.permission.WRITE_EXTERNAL_STORAGE;
+            permissionRequestIndex++;
+        }
+        if (permissionToRequest.length > 0) {
+            requestPermissions(permissionToRequest, PERMISSION_REQUEST_CODE);
+        }
+    }
+
+    @Override
+    public void onRequestPermissionsResult(int requestCode,
+            String permissions[], int[] grantResults) {
+        switch (requestCode) {
+            case PERMISSION_REQUEST_CODE:
+                if (grantResults.length > 0 &&
+                        grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+                    Log.d(TAG, "Grant permission successfully");
+                } else {
+                    Log.e(TAG, "Grant permission unsuccessfully");
+                }
+                break;
+            default:
+                break;
+        }
+    }
 }