improved AppListAdapter

This commit is contained in:
X1nto 2021-02-17 21:00:39 +04:00
parent 537e76499a
commit 8c4b8332e8
2 changed files with 31 additions and 32 deletions

View File

@ -4,7 +4,6 @@ import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.core.view.isVisible
import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.LifecycleOwner
import androidx.preference.PreferenceManager.getDefaultSharedPreferences
import androidx.recyclerview.widget.RecyclerView
import com.github.florent37.viewtooltip.ViewTooltip
@ -17,16 +16,15 @@ import com.vanced.manager.ui.viewmodels.HomeViewModel
import com.vanced.manager.utils.*
class AppListAdapter(
private val context: FragmentActivity,
private val activity: FragmentActivity,
private val viewModel: HomeViewModel,
private val lifecycleOwner: LifecycleOwner,
private val tooltip: ViewTooltip
private val tooltip: ViewTooltip?
) : RecyclerView.Adapter<AppListAdapter.ListViewHolder>() {
private val apps = mutableListOf<String>()
private val dataModels = mutableListOf<DataModel?>()
private val rootDataModels = mutableListOf<RootDataModel?>()
private val prefs = getDefaultSharedPreferences(context)
private val prefs = getDefaultSharedPreferences(activity)
private val isRoot = prefs.managerVariant == "root"
@ -36,11 +34,11 @@ class AppListAdapter(
val dataModel = if (isRoot) rootDataModels[position] else dataModels[position]
with(binding) {
appName.text = dataModel?.appName
dataModel?.buttonTxt?.observe(lifecycleOwner) {
dataModel?.buttonTxt?.observe(activity) {
appInstallButton.text = it
}
appInstallButton.setOnClickListener {
if (vanced.value != null) {
if (dataModel?.versionName?.value != activity.getString(R.string.unavailable)) {
viewModel.openInstallDialog(it, apps[position])
} else {
return@setOnClickListener
@ -52,14 +50,14 @@ class AppListAdapter(
appLaunch.setOnClickListener {
viewModel.launchApp(apps[position], isRoot)
}
dataModel?.isAppInstalled?.observe(lifecycleOwner) {
dataModel?.isAppInstalled?.observe(activity) {
appUninstall.isVisible = it
appLaunch.isVisible = it
}
dataModel?.versionName?.observe(lifecycleOwner) {
dataModel?.versionName?.observe(activity) {
appRemoteVersion.text = it
}
dataModel?.installedVersionName?.observe(lifecycleOwner) {
dataModel?.installedVersionName?.observe(activity) {
appInstalledVersion.text = it
}
}
@ -67,7 +65,7 @@ class AppListAdapter(
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ListViewHolder {
val view = ViewAppBinding.inflate(LayoutInflater.from(context), parent, false)
val view = ViewAppBinding.inflate(LayoutInflater.from(activity), parent, false)
return ListViewHolder(view)
}
@ -75,12 +73,12 @@ class AppListAdapter(
holder.bind(position)
val dataModel = if (isRoot) rootDataModels[position] else dataModels[position]
holder.appCard.setOnClickListener {
tooltip.close()
tooltip?.close()
AppInfoDialog.newInstance(
appName = apps[position],
appIcon = dataModel?.appIcon,
changelog = dataModel?.changelog?.value
).show(context.supportFragmentManager, "info")
).show(activity.supportFragmentManager, "info")
}
}
@ -94,7 +92,7 @@ class AppListAdapter(
} else {
dataModels.add(viewModel.vancedModel.value)
}
apps.add(context.getString(R.string.vanced))
apps.add(activity.getString(R.string.vanced))
}
if (prefs.enableMusic) {
@ -103,12 +101,12 @@ class AppListAdapter(
} else {
dataModels.add(viewModel.musicModel.value)
}
apps.add(context.getString(R.string.music))
apps.add(activity.getString(R.string.music))
}
if (!isRoot) {
dataModels.add(viewModel.microgModel.value)
apps.add(context.getString(R.string.microg))
apps.add(activity.getString(R.string.microg))
}
}

View File

@ -30,7 +30,7 @@ import com.vanced.manager.ui.viewmodels.HomeViewModel
import com.vanced.manager.ui.viewmodels.HomeViewModelFactory
import com.vanced.manager.utils.isFetching
open class HomeFragment : BindingFragment<FragmentHomeBinding>() {
class HomeFragment : BindingFragment<FragmentHomeBinding>() {
companion object {
const val INSTALL_FAILED = "INSTALL_FAILED"
@ -43,7 +43,7 @@ open class HomeFragment : BindingFragment<FragmentHomeBinding>() {
private val localBroadcastManager by lazy { LocalBroadcastManager.getInstance(requireActivity()) }
private val prefs by lazy { PreferenceManager.getDefaultSharedPreferences(requireActivity()) }
private lateinit var tooltip: ViewTooltip
private var tooltip: ViewTooltip? = null
override fun binding(
inflater: LayoutInflater,
@ -61,25 +61,26 @@ open class HomeFragment : BindingFragment<FragmentHomeBinding>() {
with (binding) {
homeRefresh.setOnRefreshListener { viewModel.fetchData() }
isFetching.observe(viewLifecycleOwner) { homeRefresh.isRefreshing = it }
tooltip = ViewTooltip
.on(recyclerAppList)
.position(ViewTooltip.Position.TOP)
.autoHide(false, 0)
.color(ResourcesCompat.getColor(requireActivity().resources, R.color.Twitter, null))
.withShadow(false)
.corner(25)
.onHide {
prefs.edit { putBoolean("show_changelog_tooltip", false) }
}
.text(requireActivity().getString(R.string.app_changelog_tooltip))
if (prefs.getBoolean("show_changelog_tooltip", true)) {
tooltip.show()
tooltip = ViewTooltip
.on(recyclerAppList)
.position(ViewTooltip.Position.TOP)
.autoHide(false, 0)
.color(ResourcesCompat.getColor(requireActivity().resources, R.color.Twitter, null))
.withShadow(false)
.corner(25)
.onHide {
prefs.edit { putBoolean("show_changelog_tooltip", false) }
}
.text(requireActivity().getString(R.string.app_changelog_tooltip))
tooltip?.show()
}
recyclerAppList.apply {
layoutManager = LinearLayoutManager(requireActivity())
adapter = AppListAdapter(requireActivity(), viewModel, viewLifecycleOwner, tooltip)
adapter = AppListAdapter(requireActivity(), viewModel, tooltip)
setHasFixedSize(true)
}
@ -109,7 +110,7 @@ open class HomeFragment : BindingFragment<FragmentHomeBinding>() {
override fun onPause() {
super.onPause()
localBroadcastManager.unregisterReceiver(broadcastReceiver)
tooltip.close()
tooltip?.close()
}
override fun onResume() {