xref: /aosp_15_r20/cts/apps/NotesApp/src/com.android.cts.notesapp/NotesAppActivity.java (revision b7c941bb3fa97aba169d73cee0bed2de8ac964bf)
1*b7c941bbSAndroid Build Coastguard Worker /*
2*b7c941bbSAndroid Build Coastguard Worker  * Copyright (C) 2023 The Android Open Source Project
3*b7c941bbSAndroid Build Coastguard Worker  *
4*b7c941bbSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*b7c941bbSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*b7c941bbSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*b7c941bbSAndroid Build Coastguard Worker  *
8*b7c941bbSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*b7c941bbSAndroid Build Coastguard Worker  *
10*b7c941bbSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*b7c941bbSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*b7c941bbSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*b7c941bbSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*b7c941bbSAndroid Build Coastguard Worker  * limitations under the License.
15*b7c941bbSAndroid Build Coastguard Worker  */
16*b7c941bbSAndroid Build Coastguard Worker 
17*b7c941bbSAndroid Build Coastguard Worker package com.android.cts.notesapp;
18*b7c941bbSAndroid Build Coastguard Worker 
19*b7c941bbSAndroid Build Coastguard Worker import android.Manifest;
20*b7c941bbSAndroid Build Coastguard Worker import android.app.Activity;
21*b7c941bbSAndroid Build Coastguard Worker import android.app.StatusBarManager;
22*b7c941bbSAndroid Build Coastguard Worker import android.content.Intent;
23*b7c941bbSAndroid Build Coastguard Worker import android.content.pm.PackageManager;
24*b7c941bbSAndroid Build Coastguard Worker import android.os.Bundle;
25*b7c941bbSAndroid Build Coastguard Worker import android.view.View;
26*b7c941bbSAndroid Build Coastguard Worker import android.widget.Button;
27*b7c941bbSAndroid Build Coastguard Worker import android.widget.TextView;
28*b7c941bbSAndroid Build Coastguard Worker 
29*b7c941bbSAndroid Build Coastguard Worker import androidx.core.app.ActivityCompat;
30*b7c941bbSAndroid Build Coastguard Worker 
31*b7c941bbSAndroid Build Coastguard Worker /**
32*b7c941bbSAndroid Build Coastguard Worker  * A test activity to be used as the Default notes app for CTS Verifier test.
33*b7c941bbSAndroid Build Coastguard Worker  */
34*b7c941bbSAndroid Build Coastguard Worker public class NotesAppActivity extends Activity {
35*b7c941bbSAndroid Build Coastguard Worker 
36*b7c941bbSAndroid Build Coastguard Worker     private static final Intent API_ACTION =
37*b7c941bbSAndroid Build Coastguard Worker             new Intent(Intent.ACTION_LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE);
38*b7c941bbSAndroid Build Coastguard Worker     private static final int REQUEST_CODE = 42;
39*b7c941bbSAndroid Build Coastguard Worker 
40*b7c941bbSAndroid Build Coastguard Worker     private StatusBarManager mStatusBarManager;
41*b7c941bbSAndroid Build Coastguard Worker     private TextView mStatusMessageTextView;
42*b7c941bbSAndroid Build Coastguard Worker 
43*b7c941bbSAndroid Build Coastguard Worker     @Override
onCreate(Bundle savedInstanceState)44*b7c941bbSAndroid Build Coastguard Worker     protected void onCreate(Bundle savedInstanceState) {
45*b7c941bbSAndroid Build Coastguard Worker         super.onCreate(savedInstanceState);
46*b7c941bbSAndroid Build Coastguard Worker         setContentView(R.layout.main);
47*b7c941bbSAndroid Build Coastguard Worker 
48*b7c941bbSAndroid Build Coastguard Worker         mStatusMessageTextView = findViewById(R.id.status_message);
49*b7c941bbSAndroid Build Coastguard Worker 
50*b7c941bbSAndroid Build Coastguard Worker         // Set up button firing the capture content intent action.
51*b7c941bbSAndroid Build Coastguard Worker         Button fireIntentActionButton = findViewById(R.id.fire_intent_action);
52*b7c941bbSAndroid Build Coastguard Worker         fireIntentActionButton.setOnClickListener(unused -> {
53*b7c941bbSAndroid Build Coastguard Worker             mStatusMessageTextView.setVisibility(View.INVISIBLE);
54*b7c941bbSAndroid Build Coastguard Worker             startActivityForResult(API_ACTION, REQUEST_CODE);
55*b7c941bbSAndroid Build Coastguard Worker         });
56*b7c941bbSAndroid Build Coastguard Worker 
57*b7c941bbSAndroid Build Coastguard Worker         // Set up button that calls the can-use API.
58*b7c941bbSAndroid Build Coastguard Worker         mStatusBarManager = getSystemService(StatusBarManager.class);
59*b7c941bbSAndroid Build Coastguard Worker         Button callCanUseApiButton = findViewById(R.id.call_can_use_api);
60*b7c941bbSAndroid Build Coastguard Worker         callCanUseApiButton.setOnClickListener(unused -> {
61*b7c941bbSAndroid Build Coastguard Worker             mStatusMessageTextView.setVisibility(View.INVISIBLE);
62*b7c941bbSAndroid Build Coastguard Worker 
63*b7c941bbSAndroid Build Coastguard Worker             // Check for permission before making the API call.
64*b7c941bbSAndroid Build Coastguard Worker             if (ActivityCompat.checkSelfPermission(NotesAppActivity.this,
65*b7c941bbSAndroid Build Coastguard Worker                     Manifest.permission.LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE)
66*b7c941bbSAndroid Build Coastguard Worker                     != PackageManager.PERMISSION_GRANTED) {
67*b7c941bbSAndroid Build Coastguard Worker                 mStatusMessageTextView.setText(R.string.permission_not_available);
68*b7c941bbSAndroid Build Coastguard Worker                 mStatusMessageTextView.setVisibility(View.VISIBLE);
69*b7c941bbSAndroid Build Coastguard Worker                 return;
70*b7c941bbSAndroid Build Coastguard Worker             }
71*b7c941bbSAndroid Build Coastguard Worker 
72*b7c941bbSAndroid Build Coastguard Worker             // Perform the API call and update UI state.
73*b7c941bbSAndroid Build Coastguard Worker             boolean canUseApiResponse =
74*b7c941bbSAndroid Build Coastguard Worker                     mStatusBarManager.canLaunchCaptureContentActivityForNote(NotesAppActivity.this);
75*b7c941bbSAndroid Build Coastguard Worker             if (canUseApiResponse) {
76*b7c941bbSAndroid Build Coastguard Worker                 mStatusMessageTextView.setText(R.string.can_use_api_returned_true);
77*b7c941bbSAndroid Build Coastguard Worker             } else {
78*b7c941bbSAndroid Build Coastguard Worker                 mStatusMessageTextView.setText(R.string.can_use_api_returned_false);
79*b7c941bbSAndroid Build Coastguard Worker             }
80*b7c941bbSAndroid Build Coastguard Worker 
81*b7c941bbSAndroid Build Coastguard Worker             mStatusMessageTextView.setVisibility(View.VISIBLE);
82*b7c941bbSAndroid Build Coastguard Worker         });
83*b7c941bbSAndroid Build Coastguard Worker     }
84*b7c941bbSAndroid Build Coastguard Worker 
85*b7c941bbSAndroid Build Coastguard Worker     @Override
onActivityResult(int requestCode, int resultCode, Intent data)86*b7c941bbSAndroid Build Coastguard Worker     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
87*b7c941bbSAndroid Build Coastguard Worker         // Return early for unrelated request codes.
88*b7c941bbSAndroid Build Coastguard Worker         if (requestCode != REQUEST_CODE) {
89*b7c941bbSAndroid Build Coastguard Worker             return;
90*b7c941bbSAndroid Build Coastguard Worker         }
91*b7c941bbSAndroid Build Coastguard Worker 
92*b7c941bbSAndroid Build Coastguard Worker         // Handle API call failures indicated by RESULT_CANCELED result code.
93*b7c941bbSAndroid Build Coastguard Worker         if (resultCode == Activity.RESULT_CANCELED) {
94*b7c941bbSAndroid Build Coastguard Worker             mStatusMessageTextView.setText(R.string.api_call_failed);
95*b7c941bbSAndroid Build Coastguard Worker             mStatusMessageTextView.setVisibility(View.VISIBLE);
96*b7c941bbSAndroid Build Coastguard Worker             return;
97*b7c941bbSAndroid Build Coastguard Worker         }
98*b7c941bbSAndroid Build Coastguard Worker 
99*b7c941bbSAndroid Build Coastguard Worker         // Get the response code from API call and update UI in a switch statement.
100*b7c941bbSAndroid Build Coastguard Worker         int apiResponseCode =
101*b7c941bbSAndroid Build Coastguard Worker                 data.getIntExtra(Intent.EXTRA_CAPTURE_CONTENT_FOR_NOTE_STATUS_CODE, -1);
102*b7c941bbSAndroid Build Coastguard Worker         switch (apiResponseCode) {
103*b7c941bbSAndroid Build Coastguard Worker             case Intent.CAPTURE_CONTENT_FOR_NOTE_SUCCESS:
104*b7c941bbSAndroid Build Coastguard Worker                 if (data.getData() == null) {
105*b7c941bbSAndroid Build Coastguard Worker                     // In case there is no screenshot URI returned, set status to API failed.
106*b7c941bbSAndroid Build Coastguard Worker                     mStatusMessageTextView.setText(R.string.api_call_failed);
107*b7c941bbSAndroid Build Coastguard Worker                 } else {
108*b7c941bbSAndroid Build Coastguard Worker                     mStatusMessageTextView.setText(R.string.launch_and_add);
109*b7c941bbSAndroid Build Coastguard Worker                 }
110*b7c941bbSAndroid Build Coastguard Worker                 break;
111*b7c941bbSAndroid Build Coastguard Worker 
112*b7c941bbSAndroid Build Coastguard Worker             case Intent.CAPTURE_CONTENT_FOR_NOTE_USER_CANCELED:
113*b7c941bbSAndroid Build Coastguard Worker                 mStatusMessageTextView.setText(R.string.launch_and_cancel);
114*b7c941bbSAndroid Build Coastguard Worker                 break;
115*b7c941bbSAndroid Build Coastguard Worker 
116*b7c941bbSAndroid Build Coastguard Worker             case Intent.CAPTURE_CONTENT_FOR_NOTE_WINDOW_MODE_UNSUPPORTED:
117*b7c941bbSAndroid Build Coastguard Worker                 mStatusMessageTextView.setText(R.string.launch_window_unsupported);
118*b7c941bbSAndroid Build Coastguard Worker                 break;
119*b7c941bbSAndroid Build Coastguard Worker 
120*b7c941bbSAndroid Build Coastguard Worker             case Intent.CAPTURE_CONTENT_FOR_NOTE_BLOCKED_BY_ADMIN:
121*b7c941bbSAndroid Build Coastguard Worker                 mStatusMessageTextView.setText(R.string.launch_blocked_by_admin);
122*b7c941bbSAndroid Build Coastguard Worker                 break;
123*b7c941bbSAndroid Build Coastguard Worker 
124*b7c941bbSAndroid Build Coastguard Worker             default:
125*b7c941bbSAndroid Build Coastguard Worker                 mStatusMessageTextView.setText(R.string.api_call_failed);
126*b7c941bbSAndroid Build Coastguard Worker         }
127*b7c941bbSAndroid Build Coastguard Worker 
128*b7c941bbSAndroid Build Coastguard Worker         mStatusMessageTextView.setVisibility(View.VISIBLE);
129*b7c941bbSAndroid Build Coastguard Worker     }
130*b7c941bbSAndroid Build Coastguard Worker }
131