Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bc178c01 authored by Stefan Maftei's avatar Stefan Maftei Committed by Android (Google) Code Review
Browse files

Merge "[Expressive design] Center Zero State Preference component in App List" into main

parents 04b5cb20 c26ccad0
Loading
Loading
Loading
Loading
+17 −6
Original line number Diff line number Diff line
@@ -19,10 +19,14 @@ package com.android.settingslib.spaprivileged.template.app
import android.content.Intent
import android.content.IntentFilter
import android.os.UserHandle
import androidx.compose.foundation.verticalScroll
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.rememberScrollState
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Apps
import androidx.compose.runtime.Composable
@@ -30,6 +34,7 @@ import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.State
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.stringResource
@@ -141,13 +146,19 @@ private fun <T : AppRecord> AppListModel<T>.AppListWidget(
    appListData.value?.let { (list, option) ->
        timeMeasurer.logFirst("app list first loaded")
        if (list.isEmpty()) {
            LazyColumn(
                modifier = Modifier.fillMaxSize(),
                state = rememberLazyListStateAndHideKeyboardWhenStartScroll(),
                contentPadding = PaddingValues(bottom = bottomPadding),
            Column(
                modifier = Modifier
                    .fillMaxSize()
                    .padding(bottom = bottomPadding)
                    .verticalScroll(rememberScrollState())
            ) {
                header()

                Column(
                    modifier = Modifier.weight(1f),
                    horizontalAlignment = Alignment.CenterHorizontally,
                    verticalArrangement = Arrangement.Center
                ) {
                item { header() }
                item {
                    if (isSpaExpressiveEnabled) {
                        ZeroStatePreference(noAppInfo.icon, stringResource(noAppInfo.title))
                    } else {
+18 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.graphics.PorterDuff
import android.graphics.PorterDuffColorFilter
import android.graphics.drawable.Drawable
import android.util.AttributeSet
import android.view.ViewGroup
import android.widget.ImageView
import androidx.preference.Preference
import androidx.preference.PreferenceViewHolder
@@ -39,6 +40,8 @@ class ZeroStatePreference @JvmOverloads constructor(
    )
    private var tintedIcon: Drawable? = null

    private var layoutHeight: Int = ViewGroup.LayoutParams.WRAP_CONTENT

    init {
        isSelectable = false
        layoutResource = R.layout.settingslib_expressive_preference_zerostate
@@ -53,11 +56,26 @@ class ZeroStatePreference @JvmOverloads constructor(
        holder.itemView.isFocusable = false
        holder.itemView.isClickable = false

        holder.itemView.layoutParams.height = layoutHeight

        (holder.findViewById(android.R.id.icon) as? ImageView)?.apply {
            setImageDrawable(tintedIcon ?: icon)
        }
    }

    /**
     * Center ZeroStatePreference in the middle of the screen.
     *
     * @param isScreenCentered whether to center or not
     */
    fun setScreenCentering(isScreenCentered: Boolean) {
        layoutHeight = if (isScreenCentered) {
            ViewGroup.LayoutParams.MATCH_PARENT
        } else {
            ViewGroup.LayoutParams.WRAP_CONTENT
        }
    }

    override fun setIcon(iconResId: Int) {
        super.setIcon(iconResId)