/* * Copyright (C) 2023 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.cts.notesapp; import android.Manifest; import android.app.Activity; import android.app.StatusBarManager; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import androidx.core.app.ActivityCompat; /** * A test activity to be used as the Default notes app for CTS Verifier test. */ public class NotesAppActivity extends Activity { private static final Intent API_ACTION = new Intent(Intent.ACTION_LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE); private static final int REQUEST_CODE = 42; private StatusBarManager mStatusBarManager; private TextView mStatusMessageTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mStatusMessageTextView = findViewById(R.id.status_message); // Set up button firing the capture content intent action. Button fireIntentActionButton = findViewById(R.id.fire_intent_action); fireIntentActionButton.setOnClickListener(unused -> { mStatusMessageTextView.setVisibility(View.INVISIBLE); startActivityForResult(API_ACTION, REQUEST_CODE); }); // Set up button that calls the can-use API. mStatusBarManager = getSystemService(StatusBarManager.class); Button callCanUseApiButton = findViewById(R.id.call_can_use_api); callCanUseApiButton.setOnClickListener(unused -> { mStatusMessageTextView.setVisibility(View.INVISIBLE); // Check for permission before making the API call. if (ActivityCompat.checkSelfPermission(NotesAppActivity.this, Manifest.permission.LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE) != PackageManager.PERMISSION_GRANTED) { mStatusMessageTextView.setText(R.string.permission_not_available); mStatusMessageTextView.setVisibility(View.VISIBLE); return; } // Perform the API call and update UI state. boolean canUseApiResponse = mStatusBarManager.canLaunchCaptureContentActivityForNote(NotesAppActivity.this); if (canUseApiResponse) { mStatusMessageTextView.setText(R.string.can_use_api_returned_true); } else { mStatusMessageTextView.setText(R.string.can_use_api_returned_false); } mStatusMessageTextView.setVisibility(View.VISIBLE); }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // Return early for unrelated request codes. if (requestCode != REQUEST_CODE) { return; } // Handle API call failures indicated by RESULT_CANCELED result code. if (resultCode == Activity.RESULT_CANCELED) { mStatusMessageTextView.setText(R.string.api_call_failed); mStatusMessageTextView.setVisibility(View.VISIBLE); return; } // Get the response code from API call and update UI in a switch statement. int apiResponseCode = data.getIntExtra(Intent.EXTRA_CAPTURE_CONTENT_FOR_NOTE_STATUS_CODE, -1); switch (apiResponseCode) { case Intent.CAPTURE_CONTENT_FOR_NOTE_SUCCESS: if (data.getData() == null) { // In case there is no screenshot URI returned, set status to API failed. mStatusMessageTextView.setText(R.string.api_call_failed); } else { mStatusMessageTextView.setText(R.string.launch_and_add); } break; case Intent.CAPTURE_CONTENT_FOR_NOTE_USER_CANCELED: mStatusMessageTextView.setText(R.string.launch_and_cancel); break; case Intent.CAPTURE_CONTENT_FOR_NOTE_WINDOW_MODE_UNSUPPORTED: mStatusMessageTextView.setText(R.string.launch_window_unsupported); break; case Intent.CAPTURE_CONTENT_FOR_NOTE_BLOCKED_BY_ADMIN: mStatusMessageTextView.setText(R.string.launch_blocked_by_admin); break; default: mStatusMessageTextView.setText(R.string.api_call_failed); } mStatusMessageTextView.setVisibility(View.VISIBLE); } }