diff --git a/tools/EditTextVariations/AndroidManifest.xml b/tools/EditTextVariations/AndroidManifest.xml
index b5a27b9..b283b3a 100644
--- a/tools/EditTextVariations/AndroidManifest.xml
+++ b/tools/EditTextVariations/AndroidManifest.xml
@@ -34,6 +34,10 @@
                 <category android:name="android.intent.category.LAUNCHER"/>
             </intent-filter>
         </activity>
+        <activity android:name=".EditorActivity"
+                  android:windowSoftInputMode="stateHidden|adjustPan"
+                  android:theme="@style/defaultActivityTheme"
+                  android:label="@string/app_name"/>
         <receiver android:name=".NotificationBroadcastReceiver"
              android:exported="false"/>
     </application>
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 0000000..4fc947b
--- /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 a9b7132..78d52bb 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 @@
         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 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)
