blob: 08be05c280c3fe49ca7272bbaff408d04582a118 [file]
/*
* Copyright (C) 2025 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.settings.accessibility
import android.content.Context
import androidx.preference.PreferenceScreen
import com.android.settings.accessibility.extensions.isInSetupWizard
import com.android.settings.core.BasePreferenceController
import com.android.settingslib.widget.ButtonPreference
/** Controller for managing the display and behavior of a feedback button preference. */
open class FeedbackButtonPreferenceController(context: Context, prefKey: String) :
BasePreferenceController(context, prefKey) {
private var feedbackManager: FeedbackManager? = null
/**
* Initializes the [FeedbackButtonPreferenceController] with a [FeedbackManager] instance. This
* method must be called to provide the controller with the means to handle feedback.
*
* @param feedbackManager The [FeedbackManager] instance to be used by this controller.
*/
fun initialize(feedbackManager: FeedbackManager) {
this.feedbackManager = feedbackManager
}
fun getFeedbackManager(): FeedbackManager? {
return feedbackManager
}
/**
* Determines the availability status of the feedback button preference.
*
* The preference is [AVAILABLE] only if the current context is not within the setup wizard and
* the [feedbackManager] is initialized and reports that feedback is available. Otherwise, it is
* [CONDITIONALLY_UNAVAILABLE].
*
* @return An integer representing the availability status, either [AVAILABLE] or
* [CONDITIONALLY_UNAVAILABLE].
*/
override fun getAvailabilityStatus(): Int =
if (!mContext.isInSetupWizard() && feedbackManager?.isAvailable == true) {
AVAILABLE
} else {
CONDITIONALLY_UNAVAILABLE
}
override fun displayPreference(screen: PreferenceScreen) {
super.displayPreference(screen)
val buttonPreference: ButtonPreference? = screen.findPreference(mPreferenceKey)
buttonPreference?.apply {
order = Integer.MAX_VALUE
setOnClickListener { view ->
view.context.startActivityForResult(
mPreferenceKey,
feedbackManager?.getFeedbackIntent(),
/* requestCode= */ 0,
/* options= */ null,
)
}
}
}
}