Settings: Allow using icon for ComposePreference

Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
This commit is contained in:
Pranav Vashi
2024-09-30 23:17:26 +05:30
committed by Joey
parent c5a5cc1924
commit 452dd2c86b
2 changed files with 47 additions and 3 deletions

View File

@@ -15,7 +15,38 @@
~ limitations under the License.
-->
<androidx.compose.ui.platform.ComposeView
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
android:gravity="center_vertical"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:background="?android:attr/activatedBackgroundIndicator"
android:clipToPadding="false">
<LinearLayout
android:id="@+id/icon_frame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="48dp"
android:gravity="start|center_vertical"
android:orientation="horizontal"
android:paddingTop="4dp"
android:paddingBottom="4dp">
<androidx.preference.internal.PreferenceImageView
android:id="@android:id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:maxWidth="48dp"
app:maxHeight="48dp"/>
</LinearLayout>
<androidx.compose.ui.platform.ComposeView
android:id="@+id/compose_view"
android:paddingStart="-24dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>

View File

@@ -18,6 +18,8 @@ package com.android.settings.spa.preference
import android.content.Context
import android.util.AttributeSet
import android.view.View
import android.widget.ImageView
import androidx.annotation.VisibleForTesting
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.ComposeView
@@ -68,7 +70,18 @@ constructor(
holder.isDividerAllowedAbove = false
holder.isDividerAllowedBelow = false
(holder.itemView as ComposeView).apply {
val iconView = holder.findViewById(android.R.id.icon) as? ImageView
iconView?.let {
if (icon != null) {
it.visibility = View.VISIBLE
it.setImageDrawable(icon)
} else {
it.visibility = View.GONE
}
}
val composeView = holder.findViewById(R.id.compose_view) as? ComposeView
composeView?.apply {
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent {
SettingsTheme {