diff options
Diffstat (limited to 'tools/EditTextVariations/src')
3 files changed, 79 insertions, 2 deletions
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 6eb85a528..31a0025ec 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.Intent; 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.ArrayAdapter; 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 @@ public final class EditTextVariations extends Activity implements TextView.OnEdi 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 @@ public final class EditTextVariations extends Activity implements TextView.OnEdi 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 @@ public final class EditTextVariations extends Activity implements TextView.OnEdi } 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; + } } diff --git a/tools/EditTextVariations/src/com/android/inputmethod/tools/edittextvariations/EditorActivity.java b/tools/EditTextVariations/src/com/android/inputmethod/tools/edittextvariations/EditorActivity.java new file mode 100644 index 000000000..4fc947bff --- /dev/null +++ b/tools/EditTextVariations/src/com/android/inputmethod/tools/edittextvariations/EditorActivity.java @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.inputmethod.tools.edittextvariations; + +import android.app.Activity; +import android.os.Bundle; +import android.widget.EditText; +import android.widget.LinearLayout; + +public final class EditorActivity extends Activity { + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + LinearLayout layout = new LinearLayout(this); + layout.setOrientation(LinearLayout.VERTICAL); + EditText editText = new EditText(this); + editText.setHint("reply the message"); + layout.addView(editText); + setContentView(layout); + } +} diff --git a/tools/EditTextVariations/src/com/android/inputmethod/tools/edittextvariations/NotificationUtils.java b/tools/EditTextVariations/src/com/android/inputmethod/tools/edittextvariations/NotificationUtils.java index a9b7132eb..78d52bb00 100644 --- a/tools/EditTextVariations/src/com/android/inputmethod/tools/edittextvariations/NotificationUtils.java +++ b/tools/EditTextVariations/src/com/android/inputmethod/tools/edittextvariations/NotificationUtils.java @@ -57,7 +57,7 @@ final class NotificationUtils { synchronized (sLock) { if (!sNotificationChannelInitialized) { final NotificationChannel channel = new NotificationChannel(CHANNEL_ID, - CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT); + CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH); channel.setDescription(CHANNEL_DESCRIPTION); context.getSystemService(NotificationManager.class) .createNotificationChannel(channel); @@ -79,12 +79,15 @@ final class NotificationUtils { final int notificationId = sNextNotificationId.getAndIncrement(); final PendingIntent pendingIntent = getReplyPendingIntent(context, notificationId); + final PendingIntent activityIntent = PendingIntent.getActivity(context, 0, + new Intent(context, EditorActivity.class), 0); final Notification.Action action = new Notification.Action.Builder(null, "Direct Reply Test", pendingIntent) .addRemoteInput(remoteInput) .build(); final Notification notification = createNotificationBuilder(context) .setContentText("Content Title") + .setContentIntent(activityIntent) .setSmallIcon(R.drawable.ic_launcher) .setContentText("Message from " + UserHandle.getUserHandleForUid(Process.myUid())) .setShowWhen(true) |