1 /* <lambda>null2 * Copyright 2021 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 androidx.camera.integration.extensions.validation 18 19 import android.content.Context 20 import android.content.Intent 21 import android.os.Bundle 22 import android.view.LayoutInflater 23 import android.widget.AdapterView 24 import android.widget.BaseAdapter 25 import android.widget.ListView 26 import android.widget.Toast 27 import androidx.appcompat.app.AppCompatActivity 28 import androidx.camera.integration.extensions.ExtensionTestType.TEST_TYPE_CAMERAX_EXTENSION 29 import androidx.camera.integration.extensions.INVALID_LENS_FACING 30 import androidx.camera.integration.extensions.IntentExtraKey.INTENT_EXTRA_KEY_CAMERA_ID 31 import androidx.camera.integration.extensions.IntentExtraKey.INTENT_EXTRA_KEY_EXTENSION_MODE 32 import androidx.camera.integration.extensions.IntentExtraKey.INTENT_EXTRA_KEY_LENS_FACING 33 import androidx.camera.integration.extensions.IntentExtraKey.INTENT_EXTRA_KEY_REQUEST_CODE 34 import androidx.camera.integration.extensions.IntentExtraKey.INTENT_EXTRA_KEY_TEST_TYPE 35 import androidx.camera.integration.extensions.R 36 import androidx.camera.integration.extensions.TestResultType.TEST_RESULT_NOT_SUPPORTED 37 import androidx.camera.integration.extensions.validation.CameraValidationResultActivity.Companion.getLensFacingStringFromInt 38 import androidx.core.app.ActivityCompat 39 40 /** 41 * Activity to list all supported extension modes of the specified camera device. 42 * 43 * Clicking a list item will launch the ImageValidationActivity to trigger the image taking and 44 * validation flow. 45 */ 46 class ExtensionValidationResultActivity : AppCompatActivity() { 47 private lateinit var extensionTestResultMap: LinkedHashMap<Int, Pair<Int, String>> 48 private lateinit var testResults: TestResults 49 private val result = Intent() 50 private var lensFacing = INVALID_LENS_FACING 51 private lateinit var testType: String 52 private lateinit var cameraId: String 53 private lateinit var adapter: BaseAdapter 54 private val imageValidationActivityRequestCode = 55 ImageValidationActivity::class.java.hashCode() % 1000 56 57 override fun onCreate(savedInstanceState: Bundle?) { 58 super.onCreate(savedInstanceState) 59 setContentView(R.layout.full_listview) 60 61 testResults = TestResults.getInstance(this) 62 63 testType = intent.getStringExtra(INTENT_EXTRA_KEY_TEST_TYPE)!! 64 cameraId = intent.getStringExtra(INTENT_EXTRA_KEY_CAMERA_ID)!! 65 lensFacing = intent.getIntExtra(INTENT_EXTRA_KEY_LENS_FACING, INVALID_LENS_FACING) 66 67 extensionTestResultMap = 68 testResults.getCameraExtensionResultMap()[Pair(testType, cameraId)]!! 69 70 result.putExtra(INTENT_EXTRA_KEY_TEST_TYPE, testType) 71 result.putExtra(INTENT_EXTRA_KEY_CAMERA_ID, cameraId) 72 val requestCode = intent.getIntExtra(INTENT_EXTRA_KEY_REQUEST_CODE, -1) 73 setResult(requestCode, result) 74 75 supportActionBar?.title = 76 if (testType == TEST_TYPE_CAMERAX_EXTENSION) { 77 resources.getString(R.string.camerax_extensions_validator) 78 } else { 79 resources.getString(R.string.camera2_extensions_validator) 80 } 81 supportActionBar!!.subtitle = "Camera $cameraId [${getLensFacingStringFromInt(lensFacing)}]" 82 83 val layoutInflater = getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater 84 adapter = ExtensionValidationResultAdapter(testType, layoutInflater, extensionTestResultMap) 85 86 val listView = findViewById<ListView>(R.id.listView) 87 listView.adapter = adapter 88 89 listView.onItemClickListener = 90 AdapterView.OnItemClickListener { _, _, position, _ -> 91 if ( 92 extensionTestResultMap.values.elementAt(position).first == 93 TEST_RESULT_NOT_SUPPORTED 94 ) { 95 Toast.makeText(this, "Not supported!", Toast.LENGTH_SHORT).show() 96 return@OnItemClickListener 97 } 98 99 startCaptureValidationActivity( 100 testType, 101 cameraId, 102 extensionTestResultMap.keys.elementAt(position) 103 ) 104 } 105 } 106 107 @Suppress("DEPRECATION") 108 @Deprecated("Deprecated in ComponentActivity") 109 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { 110 super.onActivityResult(requestCode, resultCode, data) 111 112 if (requestCode != imageValidationActivityRequestCode) { 113 return 114 } 115 116 adapter.notifyDataSetChanged() 117 } 118 119 private fun startCaptureValidationActivity(testType: String, cameraId: String, mode: Int) { 120 val intent = Intent(this, ImageValidationActivity::class.java) 121 intent.putExtra(INTENT_EXTRA_KEY_TEST_TYPE, testType) 122 intent.putExtra(INTENT_EXTRA_KEY_CAMERA_ID, cameraId) 123 intent.putExtra(INTENT_EXTRA_KEY_LENS_FACING, lensFacing) 124 intent.putExtra(INTENT_EXTRA_KEY_EXTENSION_MODE, mode) 125 intent.putExtra(INTENT_EXTRA_KEY_REQUEST_CODE, imageValidationActivityRequestCode) 126 127 ActivityCompat.startActivityForResult( 128 this, 129 intent, 130 imageValidationActivityRequestCode, 131 null 132 ) 133 } 134 } 135