• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.notification.functional;
18 
19 import android.app.NotificationManager;
20 import android.content.Context;
21 import android.os.RemoteException;
22 import android.support.test.uiautomator.By;
23 import android.support.test.uiautomator.Direction;
24 import android.support.test.uiautomator.UiDevice;
25 import android.support.test.uiautomator.UiObject2;
26 import android.support.test.uiautomator.Until;
27 import android.view.KeyEvent;
28 import android.test.InstrumentationTestCase;
29 import android.test.suitebuilder.annotation.MediumTest;
30 import android.view.inputmethod.InputMethodManager;
31 import android.widget.Toast;
32 
33 public class NotificationInlineReplyTests extends InstrumentationTestCase {
34     private static final int SHORT_TIMEOUT = 200;
35     private static final int LONG_TIMEOUT = 2000;
36     private static final int NOTIFICATION_ID = 1;
37     private static final int NOTIFICATION_ID_2 = 2;
38     private static final String INLINE_REPLY_TITLE = "INLINE REPLY TITLE";
39     private static final String KEY_QUICK_REPLY_TEXT = "quick_reply";
40     private static final String RECEIVER_PKG_NAME = "com.android.systemui";
41     private NotificationManager mNotificationManager;
42     private UiDevice mDevice = null;
43     private Context mContext;
44     private NotificationHelper mHelper;
45 
46     @Override
setUp()47     public void setUp() throws Exception {
48         super.setUp();
49         mDevice = UiDevice.getInstance(getInstrumentation());
50         mContext = getInstrumentation().getContext();
51         mNotificationManager = (NotificationManager) mContext
52                 .getSystemService(Context.NOTIFICATION_SERVICE);
53         mHelper = new NotificationHelper(mDevice, getInstrumentation(), mNotificationManager);
54         try {
55             mDevice.setOrientationNatural();
56         } catch (RemoteException e) {
57             throw new RuntimeException("failed to freeze device orientaion", e);
58         }
59         mDevice.pressHome();
60         mNotificationManager.cancelAll();
61     }
62 
63     @Override
tearDown()64     public void tearDown() throws Exception {
65         mNotificationManager.cancelAll();
66         mDevice.pressHome();
67         super.tearDown();
68     }
69 
70     @MediumTest
testInLineNotificationWithLockScreen()71     public void testInLineNotificationWithLockScreen() throws Exception {
72         try {
73             mHelper.sendNotificationsWithInlineReply(NOTIFICATION_ID,false);
74             mHelper.sleepAndWakeUpDevice();
75             UiObject2 obj = mDevice.wait(Until.findObject(By.text("INLINE REPLY TEST")),
76                     LONG_TIMEOUT);
77             mDevice.swipe(obj.getVisibleBounds().centerX(), obj.getVisibleBounds().centerY(),
78                     obj.getVisibleBounds().centerX(),
79                     mDevice.getDisplayHeight(), 5);
80             mDevice.wait(Until.findObject(By.text("Reply")), LONG_TIMEOUT).click();
81             UiObject2 replyBox = mDevice.wait(
82                     Until.findObject(By.res("com.android.systemui:id/remote_input_send")),
83                     LONG_TIMEOUT);
84             InputMethodManager imm = (InputMethodManager) mContext
85                     .getSystemService(Context.INPUT_METHOD_SERVICE);
86             if (!imm.isAcceptingText()) {
87                 assertNotNull("Keyboard for inline reply has not loaded correctly", replyBox);
88             }
89         } finally {
90             mHelper.swipeUp();
91         }
92     }
93 
94     @MediumTest
testInLineNotificationsWithQuickSetting()95     public void testInLineNotificationsWithQuickSetting() throws Exception {
96         mHelper.sendNotificationsWithInlineReply(NOTIFICATION_ID, false);
97         Thread.sleep(SHORT_TIMEOUT);
98         mDevice.openQuickSettings();
99         mDevice.openNotification();
100         mDevice.wait(Until.findObject(By.text("Reply")), LONG_TIMEOUT).click();
101         UiObject2 replyBox = mDevice.wait(
102                 Until.findObject(By.res("com.android.systemui:id/remote_input_send")),
103                 LONG_TIMEOUT);
104         InputMethodManager imm = (InputMethodManager) mContext
105                 .getSystemService(Context.INPUT_METHOD_SERVICE);
106         if (!imm.isAcceptingText()) {
107             assertNotNull("Keyboard for inline reply has not loaded correctly", replyBox);
108         }
109     }
110 
111     @MediumTest
testInlineReplyNotification()112     public void testInlineReplyNotification() throws Exception {
113         mHelper.sendNotificationsWithInlineReply(NOTIFICATION_ID_2, false);
114         Thread.sleep(LONG_TIMEOUT);
115         mDevice.openNotification();
116         UiObject2 replyBtn = null;
117         int count = 10;
118         while (--count > 0) {
119             replyBtn = mDevice.wait(Until.findObject(By.res("android:id/action0")), LONG_TIMEOUT);
120             if (replyBtn != null) {
121                 break;
122             }
123         }
124         assertNotNull("Cant find inline reply box", replyBtn);
125         replyBtn.click();
126         UiObject2 replyBox = mDevice.wait(
127         Until.findObject(By.res(RECEIVER_PKG_NAME, "remote_input_send")),
128                 LONG_TIMEOUT);
129         InputMethodManager imm = (InputMethodManager) mContext
130                 .getSystemService(Context.INPUT_METHOD_SERVICE);
131         if (!imm.isAcceptingText()) {
132             assertNotNull("Keyboard for inline reply has not loaded correctly", replyBox);
133         }
134     }
135 }
136