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