forked from suyu/suyu
android: Show associated value in home settings (#11272)
This commit is contained in:
parent
9d6ac28999
commit
df00da1760
6 changed files with 75 additions and 4 deletions
|
@ -3,19 +3,25 @@
|
||||||
|
|
||||||
package org.yuzu.yuzu_emu.adapters
|
package org.yuzu.yuzu_emu.adapters
|
||||||
|
|
||||||
|
import android.text.TextUtils
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.content.res.ResourcesCompat
|
import androidx.core.content.res.ResourcesCompat
|
||||||
|
import androidx.lifecycle.LifecycleOwner
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import org.yuzu.yuzu_emu.R
|
import org.yuzu.yuzu_emu.R
|
||||||
import org.yuzu.yuzu_emu.databinding.CardHomeOptionBinding
|
import org.yuzu.yuzu_emu.databinding.CardHomeOptionBinding
|
||||||
import org.yuzu.yuzu_emu.fragments.MessageDialogFragment
|
import org.yuzu.yuzu_emu.fragments.MessageDialogFragment
|
||||||
import org.yuzu.yuzu_emu.model.HomeSetting
|
import org.yuzu.yuzu_emu.model.HomeSetting
|
||||||
|
|
||||||
class HomeSettingAdapter(private val activity: AppCompatActivity, var options: List<HomeSetting>) :
|
class HomeSettingAdapter(
|
||||||
|
private val activity: AppCompatActivity,
|
||||||
|
private val viewLifecycle: LifecycleOwner,
|
||||||
|
var options: List<HomeSetting>
|
||||||
|
) :
|
||||||
RecyclerView.Adapter<HomeSettingAdapter.HomeOptionViewHolder>(),
|
RecyclerView.Adapter<HomeSettingAdapter.HomeOptionViewHolder>(),
|
||||||
View.OnClickListener {
|
View.OnClickListener {
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HomeOptionViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HomeOptionViewHolder {
|
||||||
|
@ -79,6 +85,22 @@ class HomeSettingAdapter(private val activity: AppCompatActivity, var options: L
|
||||||
binding.optionDescription.alpha = 0.5f
|
binding.optionDescription.alpha = 0.5f
|
||||||
binding.optionIcon.alpha = 0.5f
|
binding.optionIcon.alpha = 0.5f
|
||||||
}
|
}
|
||||||
|
|
||||||
|
option.details.observe(viewLifecycle) { updateOptionDetails(it) }
|
||||||
|
binding.optionDetail.postDelayed(
|
||||||
|
{
|
||||||
|
binding.optionDetail.ellipsize = TextUtils.TruncateAt.MARQUEE
|
||||||
|
binding.optionDetail.isSelected = true
|
||||||
|
},
|
||||||
|
3000
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateOptionDetails(detailString: String) {
|
||||||
|
if (detailString.isNotEmpty()) {
|
||||||
|
binding.optionDetail.text = detailString
|
||||||
|
binding.optionDetail.visibility = View.VISIBLE
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -129,7 +129,11 @@ class HomeSettingsFragment : Fragment() {
|
||||||
mainActivity.getGamesDirectory.launch(
|
mainActivity.getGamesDirectory.launch(
|
||||||
Intent(Intent.ACTION_OPEN_DOCUMENT_TREE).data
|
Intent(Intent.ACTION_OPEN_DOCUMENT_TREE).data
|
||||||
)
|
)
|
||||||
}
|
},
|
||||||
|
{ true },
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
homeViewModel.gamesDir
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
add(
|
add(
|
||||||
|
@ -201,7 +205,11 @@ class HomeSettingsFragment : Fragment() {
|
||||||
|
|
||||||
binding.homeSettingsList.apply {
|
binding.homeSettingsList.apply {
|
||||||
layoutManager = LinearLayoutManager(requireContext())
|
layoutManager = LinearLayoutManager(requireContext())
|
||||||
adapter = HomeSettingAdapter(requireActivity() as AppCompatActivity, optionsList)
|
adapter = HomeSettingAdapter(
|
||||||
|
requireActivity() as AppCompatActivity,
|
||||||
|
viewLifecycleOwner,
|
||||||
|
optionsList
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
setInsets()
|
setInsets()
|
||||||
|
|
|
@ -3,6 +3,9 @@
|
||||||
|
|
||||||
package org.yuzu.yuzu_emu.model
|
package org.yuzu.yuzu_emu.model
|
||||||
|
|
||||||
|
import androidx.lifecycle.LiveData
|
||||||
|
import androidx.lifecycle.MutableLiveData
|
||||||
|
|
||||||
data class HomeSetting(
|
data class HomeSetting(
|
||||||
val titleId: Int,
|
val titleId: Int,
|
||||||
val descriptionId: Int,
|
val descriptionId: Int,
|
||||||
|
@ -10,5 +13,6 @@ data class HomeSetting(
|
||||||
val onClick: () -> Unit,
|
val onClick: () -> Unit,
|
||||||
val isEnabled: () -> Boolean = { true },
|
val isEnabled: () -> Boolean = { true },
|
||||||
val disabledTitleId: Int = 0,
|
val disabledTitleId: Int = 0,
|
||||||
val disabledMessageId: Int = 0
|
val disabledMessageId: Int = 0,
|
||||||
|
val details: LiveData<String> = MutableLiveData("")
|
||||||
)
|
)
|
||||||
|
|
|
@ -3,9 +3,15 @@
|
||||||
|
|
||||||
package org.yuzu.yuzu_emu.model
|
package org.yuzu.yuzu_emu.model
|
||||||
|
|
||||||
|
import android.net.Uri
|
||||||
|
import androidx.fragment.app.FragmentActivity
|
||||||
import androidx.lifecycle.LiveData
|
import androidx.lifecycle.LiveData
|
||||||
import androidx.lifecycle.MutableLiveData
|
import androidx.lifecycle.MutableLiveData
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
|
import androidx.lifecycle.ViewModelProvider
|
||||||
|
import androidx.preference.PreferenceManager
|
||||||
|
import org.yuzu.yuzu_emu.YuzuApplication
|
||||||
|
import org.yuzu.yuzu_emu.utils.GameHelper
|
||||||
|
|
||||||
class HomeViewModel : ViewModel() {
|
class HomeViewModel : ViewModel() {
|
||||||
private val _navigationVisible = MutableLiveData<Pair<Boolean, Boolean>>()
|
private val _navigationVisible = MutableLiveData<Pair<Boolean, Boolean>>()
|
||||||
|
@ -17,6 +23,14 @@ class HomeViewModel : ViewModel() {
|
||||||
private val _shouldPageForward = MutableLiveData(false)
|
private val _shouldPageForward = MutableLiveData(false)
|
||||||
val shouldPageForward: LiveData<Boolean> get() = _shouldPageForward
|
val shouldPageForward: LiveData<Boolean> get() = _shouldPageForward
|
||||||
|
|
||||||
|
private val _gamesDir = MutableLiveData(
|
||||||
|
Uri.parse(
|
||||||
|
PreferenceManager.getDefaultSharedPreferences(YuzuApplication.appContext)
|
||||||
|
.getString(GameHelper.KEY_GAME_PATH, "")
|
||||||
|
).path ?: ""
|
||||||
|
)
|
||||||
|
val gamesDir: LiveData<String> get() = _gamesDir
|
||||||
|
|
||||||
var navigatedToSetup = false
|
var navigatedToSetup = false
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
@ -40,4 +54,9 @@ class HomeViewModel : ViewModel() {
|
||||||
fun setShouldPageForward(pageForward: Boolean) {
|
fun setShouldPageForward(pageForward: Boolean) {
|
||||||
_shouldPageForward.value = pageForward
|
_shouldPageForward.value = pageForward
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setGamesDir(activity: FragmentActivity, dir: String) {
|
||||||
|
ViewModelProvider(activity)[GamesViewModel::class.java].reloadGames(true)
|
||||||
|
_gamesDir.value = dir
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -290,6 +290,7 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
|
||||||
).show()
|
).show()
|
||||||
|
|
||||||
gamesViewModel.reloadGames(true)
|
gamesViewModel.reloadGames(true)
|
||||||
|
homeViewModel.setGamesDir(this, result.path!!)
|
||||||
}
|
}
|
||||||
|
|
||||||
val getProdKey =
|
val getProdKey =
|
||||||
|
|
|
@ -53,6 +53,23 @@
|
||||||
android:layout_marginTop="5dp"
|
android:layout_marginTop="5dp"
|
||||||
tools:text="@string/install_prod_keys_description" />
|
tools:text="@string/install_prod_keys_description" />
|
||||||
|
|
||||||
|
<com.google.android.material.textview.MaterialTextView
|
||||||
|
style="@style/TextAppearance.Material3.LabelMedium"
|
||||||
|
android:id="@+id/option_detail"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textAlignment="viewStart"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:marqueeRepeatLimit="marquee_forever"
|
||||||
|
android:ellipsize="none"
|
||||||
|
android:requiresFadingEdge="horizontal"
|
||||||
|
android:layout_marginTop="5dp"
|
||||||
|
android:visibility="gone"
|
||||||
|
tools:visibility="visible"
|
||||||
|
tools:text="/tree/primary:Games" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
Loading…
Reference in a new issue