Merge "Add Notification Permission for T"
diff --git a/tools/EditTextVariations/AndroidManifest.xml b/tools/EditTextVariations/AndroidManifest.xml
index 55b7744..ecfe764 100644
--- a/tools/EditTextVariations/AndroidManifest.xml
+++ b/tools/EditTextVariations/AndroidManifest.xml
@@ -18,6 +18,7 @@
      package="com.android.inputmethod.tools.edittextvariations"
      android:versionName="0.67"
      android:versionCode="67">
+    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
     <supports-screens android:resizeable="true"/>
     <uses-sdk android:targetSdkVersion="27"
          android:minSdkVersion="11"/>
diff --git a/tools/EditTextVariations/src/com/android/inputmethod/tools/edittextvariations/EditTextVariations.java b/tools/EditTextVariations/src/com/android/inputmethod/tools/edittextvariations/EditTextVariations.java
index 6eb85a5..31a0025 100644
--- a/tools/EditTextVariations/src/com/android/inputmethod/tools/edittextvariations/EditTextVariations.java
+++ b/tools/EditTextVariations/src/com/android/inputmethod/tools/edittextvariations/EditTextVariations.java
@@ -16,6 +16,7 @@
 
 package com.android.inputmethod.tools.edittextvariations;
 
+import android.Manifest;
 import android.annotation.SuppressLint;
 import android.app.Activity;
 import android.app.AlertDialog;
@@ -24,6 +25,7 @@
 import android.content.SharedPreferences;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.os.Build;
 import android.os.Bundle;
@@ -45,7 +47,9 @@
 import android.widget.AutoCompleteTextView;
 import android.widget.EditText;
 import android.widget.TextView;
+import android.widget.Toast;
 
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -64,6 +68,7 @@
     private static final String PREF_THEME = "theme";
     private static final String PREF_NAVIGATE = "navigate";
     private static final String PREF_SOFTINPUT = "softinput";
+    private static final int NOTIFICATION_PERMISSION_REQUEST_CODE = 0;
 
     private SharedPreferences prefs;
     private View[] fields;
@@ -199,12 +204,36 @@
             saveSoftInputMode(itemId == MENU_SOFTINPUT_VISIBLE);
             restartActivity();
         } else if (itemId == MENU_DIRECT_REPLY) {
-            NotificationUtils.sendDirectReplyNotification(this);
+            final boolean needPermissionCheck = isNeedNotificationPermission()
+                    && checkSelfPermission(Manifest.permission.POST_NOTIFICATIONS) !=
+                            PackageManager.PERMISSION_GRANTED;
+            if (needPermissionCheck) {
+                requestPermissions(new String[] { Manifest.permission.POST_NOTIFICATIONS },
+                        NOTIFICATION_PERMISSION_REQUEST_CODE);
+            } else {
+                NotificationUtils.sendDirectReplyNotification(this);
+            }
         }
         return true;
     }
 
     @Override
+    public void onRequestPermissionsResult(int requestCode, String[] permissions,
+            int[] grantResults) {
+        if (requestCode == NOTIFICATION_PERMISSION_REQUEST_CODE) {
+                if (grantResults.length == 1 &&
+                        grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+                    // Permission is granted. Continue to send the notification.
+                    NotificationUtils.sendDirectReplyNotification(this);
+                }  else {
+                    Log.d(TAG, "POST_NOTIFICATIONS Permissions denied.");
+                    Toast.makeText(this, "Required permission has denied",
+                            Toast.LENGTH_LONG).show();
+                }
+        }
+    }
+
+    @Override
     public void onClick(final DialogInterface dialog, final int which) {
         saveTheme(ThemeItem.THEME_LIST.get(which));
         restartActivity();
@@ -476,4 +505,14 @@
         }
         return text;
     }
+
+    private static boolean isNeedNotificationPermission() {
+        for(Field field : Manifest.permission.class.getFields()) {
+            if (field.getName().equals("POST_NOTIFICATIONS")) {
+                Log.d(TAG, "Need notification permission.");
+                return true;
+            }
+        }
+        return false;
+    }
 }