1 /* 2 * Copyright (C) 2024 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 com.android.healthconnect.controller.selectabledeletion 17 18 import android.content.Context 19 import android.view.View.GONE 20 import android.view.View.OnClickListener 21 import android.view.View.VISIBLE 22 import android.view.ViewGroup 23 import android.widget.CheckBox 24 import androidx.preference.PreferenceViewHolder 25 import com.android.healthconnect.controller.R 26 import com.android.healthconnect.controller.permissions.data.FitnessPermissionStrings 27 import com.android.healthconnect.controller.permissions.data.HealthPermissionType 28 import com.android.healthconnect.controller.shared.preference.HealthPreference 29 30 /** Custom preference for displaying checkboxes where the user can delete their data */ 31 class DeletionPermissionTypesPreference constructor(context: Context) : HealthPreference(context) { 32 private var checkboxButtonListener: OnClickListener? = null 33 34 // TODO: b/341886932 35 // var logName : ElementName = ErrorPageElement.UNKNOWN_ELEMENT 36 private var isShowCheckbox: Boolean = false 37 private var widgetFrame: ViewGroup? = null 38 private var checkBox: CheckBox? = null 39 private var isChecked: Boolean = false 40 private lateinit var healthPermissionType: HealthPermissionType 41 42 init { 43 widgetLayoutResource = R.layout.widget_checkbox 44 isSelectable = true 45 } 46 onBindViewHoldernull47 override fun onBindViewHolder(holder: PreferenceViewHolder) { 48 super.onBindViewHolder(holder) 49 widgetFrame = holder?.findViewById(android.R.id.widget_frame) as ViewGroup? 50 51 showCheckbox(isShowCheckbox) 52 53 checkBox = holder?.findViewById(R.id.checkbox_button) as CheckBox 54 55 checkBox?.isChecked = this.isChecked 56 57 checkBox?.contentDescription = 58 context.getString( 59 FitnessPermissionStrings.fromPermissionType(healthPermissionType).uppercaseLabel) 60 61 checkBox?.setOnClickListener(checkboxButtonListener) 62 63 val widgetFrameParent: ViewGroup? = widgetFrame?.parent as ViewGroup? 64 widgetFrameParent?.setPaddingRelative( 65 widgetFrameParent.paddingStart, 66 widgetFrameParent.paddingTop, 67 /* end = */ 0, 68 widgetFrameParent.paddingBottom) 69 } 70 71 /** Set a click listener to check the checkbox */ setOnPreferenceClickListenernull72 fun setOnPreferenceClickListener( 73 method: () -> Unit, 74 onPreferenceClickListener: OnPreferenceClickListener 75 ) { 76 val clickListener = OnPreferenceClickListener { 77 if (isShowCheckbox) { 78 checkBox?.toggle() 79 // Set local variable to current value of whether checkBox is checked 80 isChecked = checkBox?.isChecked ?: false 81 method() 82 } else { 83 onPreferenceClickListener.onPreferenceClick(it) 84 } 85 true 86 } 87 88 checkboxButtonListener = OnClickListener { 89 isChecked = !isChecked 90 method() 91 } 92 93 super.setOnPreferenceClickListener(clickListener) 94 } 95 setHealthPermissionTypenull96 fun setHealthPermissionType(healthPermissionType: HealthPermissionType) { 97 this.healthPermissionType = healthPermissionType 98 } 99 getHealthPermissionTypenull100 fun getHealthPermissionType(): HealthPermissionType { 101 return healthPermissionType 102 } 103 104 /** Display or hide checkbox */ showCheckboxnull105 fun showCheckbox(isShowCheckbox: Boolean) { 106 setShowCheckbox(isShowCheckbox) 107 widgetFrame?.visibility = if (isShowCheckbox) VISIBLE else GONE 108 widgetFrame?.tag = if (isShowCheckbox) "checkbox" else "" 109 } 110 setIsCheckednull111 fun setIsChecked(isChecked: Boolean) { 112 this.isChecked = isChecked 113 } 114 getIsCheckednull115 fun getIsChecked(): Boolean { 116 return isChecked 117 } 118 setShowCheckboxnull119 fun setShowCheckbox(isShowCheckbox: Boolean) { 120 this.isShowCheckbox = isShowCheckbox 121 } 122 } 123