Merge "syncslides: Using the new discovery API."
diff --git a/android/app/build.gradle b/android/app/build.gradle
index a507a38..42f51da 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -29,8 +29,8 @@
         targetCompatibility JavaVersion.VERSION_1_8
     }
     defaultConfig {
-        applicationId "io.v.syncslides"
-        minSdkVersion 22
+        applicationId "io.v.syncslides23"
+        minSdkVersion 23
         targetSdkVersion 23
         versionCode 1
         versionName "1.0"
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 2e8ea3c..e187071 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -3,7 +3,7 @@
     package="io.v.syncslides"
     xmlns:android="http://schemas.android.com/apk/res/android">
 
-    <uses-sdk android:minSdkVersion="22"/>
+    <uses-sdk android:minSdkVersion="23"/>
 
     <!-- SignInActivity has the user select an email address. -->
     <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
diff --git a/android/app/src/main/java/io/v/syncslides/SignInActivity.java b/android/app/src/main/java/io/v/syncslides/SignInActivity.java
index 8fc2adb..40f8a80 100644
--- a/android/app/src/main/java/io/v/syncslides/SignInActivity.java
+++ b/android/app/src/main/java/io/v/syncslides/SignInActivity.java
@@ -4,6 +4,7 @@
 
 package io.v.syncslides;
 
+import android.Manifest;
 import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.accounts.AccountManagerCallback;
@@ -14,6 +15,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
 import android.database.Cursor;
 import android.os.AsyncTask;
 import android.os.Handler;
@@ -51,6 +53,7 @@
 
     private static final int REQUEST_CODE_PICK_ACCOUNT = 1000;
     private static final int REQUEST_CODE_FETCH_USER_PROFILE_APPROVAL = 1001;
+    private static final int REQUEST_CODE_ASK_PERMISSIONS = 1002;
 
     private static final String OAUTH_PROFILE = "email";
     private static final String OAUTH_SCOPE = "oauth2:" + OAUTH_PROFILE;
@@ -108,6 +111,12 @@
         if (mAccountName.isEmpty()) {
             mProgressDialog.setMessage("Signing in...");
             mProgressDialog.show();
+            if (checkSelfPermission(Manifest.permission.READ_CONTACTS) !=
+                    PackageManager.PERMISSION_GRANTED) {
+                requestPermissions(new String[]{Manifest.permission.READ_CONTACTS},
+                        REQUEST_CODE_ASK_PERMISSIONS);
+                return;
+            }
             pickAccount();
         } else {
             finishActivity();
@@ -136,6 +145,27 @@
         }
     }
 
+    @Override
+    public void onRequestPermissionsResult(int requestCode, String[] permissions,
+                                           int[] grantResults) {
+        switch (requestCode) {
+            case REQUEST_CODE_ASK_PERMISSIONS:
+                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+                    pickAccount();
+                    return;
+                } else {
+                    Toast.makeText(
+                            this, "Access to contacts required to pick account",
+                            Toast.LENGTH_LONG).show();
+                    requestPermissions(new String[]{Manifest.permission.READ_CONTACTS},
+                            REQUEST_CODE_ASK_PERMISSIONS);
+                    return;
+                }
+            default:
+                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+        }
+    }
+
     private void pickAccount() {
         Intent chooseIntent = AccountManager.newChooseAccountIntent(
                 null, null, new String[]{"com.google"}, false, null, null, null, null);