Add weak leanback compatibility to experimental permissions app

Change-Id: I6d6960029822a68b5c5c156e7d35ba2202028f66
diff --git a/PermissionApp/AndroidManifest.xml b/PermissionApp/AndroidManifest.xml
index 8807e94..9c298df 100644
--- a/PermissionApp/AndroidManifest.xml
+++ b/PermissionApp/AndroidManifest.xml
@@ -19,6 +19,7 @@
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.LAUNCHER" />
+                <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
             </intent-filter>
         </activity>
 
diff --git a/PermissionApp/src/foo/bar/permission/PermissionActivity.java b/PermissionApp/src/foo/bar/permission/PermissionActivity.java
index 364fc13..994986f 100644
--- a/PermissionApp/src/foo/bar/permission/PermissionActivity.java
+++ b/PermissionApp/src/foo/bar/permission/PermissionActivity.java
@@ -32,6 +32,11 @@
 import android.widget.CursorAdapter;
 import android.widget.ListView;
 import android.widget.SimpleCursorAdapter;
+import android.widget.Toast;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 
 /**
  * Simple sample of how to use the runtime permissions APIs.
@@ -160,6 +165,11 @@
     }
 
     @Override
+    public void onBackPressed() {
+        requestPermissions();
+    }
+
+    @Override
     public void onRequestPermissionsResult(int requestCode, String permissions[],
             int[] grantResults) {
         switch (requestCode) {
@@ -174,6 +184,23 @@
                     showEvents();
                 }
             } break;
+
+            case PERMISSIONS_REQUEST_ALL_PERMISSIONS: {
+                for (int i = 0; i < permissions.length; i++) {
+                    if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
+                        switch (permissions[i]) {
+                            case Manifest.permission.READ_CALENDAR: {
+                                Toast.makeText(this, "Granted Calendar!",
+                                        Toast.LENGTH_SHORT).show();
+                            } break;
+
+                            case Manifest.permission.READ_CONTACTS: {
+                                showContacts();
+                            } break;
+                        }
+                    }
+                }
+            } break;
         }
     }
 
@@ -222,15 +249,18 @@
     }
 
     private void requestPermissions() {
+        List<String> permissions = new ArrayList<>();
         if (checkSelfPermission(Manifest.permission.READ_CALENDAR)
-                != PackageManager.PERMISSION_GRANTED
-            || checkSelfPermission(Manifest.permission.READ_CONTACTS)
                 != PackageManager.PERMISSION_GRANTED) {
-            String[] permissions = new String[]{
-                    Manifest.permission.READ_CONTACTS,
-                    Manifest.permission.READ_CALENDAR
-            };
-            requestPermissions(permissions, PERMISSIONS_REQUEST_ALL_PERMISSIONS);
+            permissions.add(Manifest.permission.READ_CALENDAR);
+        }
+        if (checkSelfPermission(Manifest.permission.READ_CONTACTS)
+                != PackageManager.PERMISSION_GRANTED) {
+            permissions.add(Manifest.permission.READ_CONTACTS);
+        }
+        if (!permissions.isEmpty()) {
+            requestPermissions(permissions.toArray(new String[0]),
+                    PERMISSIONS_REQUEST_ALL_PERMISSIONS);
         }
     }
 }