1 /*
2  * Copyright (C) 2015 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 package android.assist.cts;
17 
18 import android.assist.common.Utils;
19 import android.content.BroadcastReceiver;
20 import android.content.Context;
21 import android.content.Intent;
22 import android.content.IntentFilter;
23 import android.os.Bundle;
24 import android.util.Log;
25 
26 import java.util.concurrent.CountDownLatch;
27 import java.util.concurrent.TimeUnit;
28 
29 public class ExtraAssistDataTest extends AssistTestBase {
30     private static final String TAG = "ExtraAssistDataTest";
31     private static final String TEST_CASE_TYPE = Utils.EXTRA_ASSIST;
32 
33     private BroadcastReceiver mReceiver;
34     private CountDownLatch mHasResumedLatch = new CountDownLatch(1);
35     private CountDownLatch mReadyLatch = new CountDownLatch(1);
36 
ExtraAssistDataTest()37     public ExtraAssistDataTest() {
38         super();
39     }
40 
41     @Override
setUp()42     public void setUp() throws Exception {
43         super.setUp();
44         setUpAndRegisterReceiver();
45         startTestActivity(TEST_CASE_TYPE);
46     }
47 
48     @Override
tearDown()49     public void tearDown() throws Exception {
50         super.tearDown();
51         if (mReceiver != null) {
52             mContext.unregisterReceiver(mReceiver);
53             mReceiver = null;
54         }
55     }
56 
setUpAndRegisterReceiver()57     private void setUpAndRegisterReceiver() {
58         if (mReceiver != null) {
59             mContext.unregisterReceiver(mReceiver);
60         }
61         mReceiver = new ExtraAssistDataReceiver();
62         IntentFilter filter = new IntentFilter();
63         filter.addAction(Utils.APP_3P_HASRESUMED);
64         filter.addAction(Utils.ASSIST_RECEIVER_REGISTERED);
65         mContext.registerReceiver(mReceiver, filter);
66     }
67 
testAssistContentAndAssistData()68     public void testAssistContentAndAssistData() throws Exception {
69         if (mActivityManager.isLowRamDevice()) {
70             Log.d(TAG, "Not running assist tests on low-RAM device.");
71             return;
72         }
73         mTestActivity.startTest(TEST_CASE_TYPE);
74         waitForAssistantToBeReady(mReadyLatch);
75         mTestActivity.start3pApp(TEST_CASE_TYPE);
76         waitForOnResume();
77         startSession();
78         waitForContext();
79         verifyAssistDataNullness(false, false, false, false);
80 
81         Log.i(TAG, "assist bundle is: " + Utils.toBundleString(mAssistBundle));
82 
83         // tests that the assist content's structured data is the expected
84         assertEquals("AssistContent structured data did not match data in onProvideAssistContent",
85                 Utils.getStructuredJSON(), mAssistContent.getStructuredData());
86         // tests the assist data. EXTRA_ASSIST_CONTEXT is what's expected.
87         Bundle extraExpectedBundle = Utils.getExtraAssistBundle();
88         Bundle extraAssistBundle = mAssistBundle.getBundle(Intent.EXTRA_ASSIST_CONTEXT);
89         for (String key : extraExpectedBundle.keySet()) {
90             assertTrue("Assist bundle does not contain expected extra context key: " + key,
91                     extraAssistBundle.containsKey(key));
92             assertEquals("Extra assist context bundle values do not match for key: " + key,
93                     extraExpectedBundle.get(key), extraAssistBundle.get(key));
94         }
95     }
96 
waitForOnResume()97     private void waitForOnResume() throws Exception {
98         Log.i(TAG, "waiting for onResume() before continuing");
99         if (!mHasResumedLatch.await(Utils.ACTIVITY_ONRESUME_TIMEOUT_MS, TimeUnit.MILLISECONDS)) {
100             fail("Activity failed to resume in " + Utils.ACTIVITY_ONRESUME_TIMEOUT_MS + "msec");
101         }
102     }
103 
104     private class ExtraAssistDataReceiver extends BroadcastReceiver {
105         @Override
onReceive(Context context, Intent intent)106         public void onReceive(Context context, Intent intent) {
107             String action = intent.getAction();
108             if (action.equals(Utils.APP_3P_HASRESUMED)) {
109                 if (mHasResumedLatch != null) {
110                     mHasResumedLatch.countDown();
111                 }
112             } else if (action.equals(Utils.ASSIST_RECEIVER_REGISTERED)) {
113                 if (mReadyLatch != null) {
114                     mReadyLatch.countDown();
115                 }
116             }
117         }
118     }
119 }
120