فهرست منبع

android: Show associated value in home settings (#11272)

Charles Lombardo 2 سال پیش
والد
کامیت
df00da1760

+ 23 - 1
src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/HomeSettingAdapter.kt

@@ -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
+            }
         }
         }
     }
     }
 }
 }

+ 10 - 2
src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/HomeSettingsFragment.kt

@@ -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()

+ 5 - 1
src/android/app/src/main/java/org/yuzu/yuzu_emu/model/HomeSetting.kt

@@ -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("")
 )
 )

+ 19 - 0
src/android/app/src/main/java/org/yuzu/yuzu_emu/model/HomeViewModel.kt

@@ -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
+    }
 }
 }

+ 1 - 0
src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/main/MainActivity.kt

@@ -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 =

+ 17 - 0
src/android/app/src/main/res/layout/card_home_option.xml

@@ -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>