AppInfoDialog view binding and add BindingDialogFragment
This commit is contained in:
parent
af76bcb2a6
commit
41cd02c256
|
@ -3,7 +3,7 @@ package com.vanced.manager.adapter
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.fragment.app.FragmentActivity
|
import androidx.fragment.app.FragmentActivity
|
||||||
import androidx.preference.PreferenceManager.getDefaultSharedPreferences
|
import androidx.preference.PreferenceManager.*
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.github.florent37.viewtooltip.ViewTooltip
|
import com.github.florent37.viewtooltip.ViewTooltip
|
||||||
import com.vanced.manager.R
|
import com.vanced.manager.R
|
||||||
|
@ -46,10 +46,10 @@ class AppListAdapter(
|
||||||
|
|
||||||
holder.appCard.setOnClickListener {
|
holder.appCard.setOnClickListener {
|
||||||
tooltip.close()
|
tooltip.close()
|
||||||
AppInfoDialog(
|
AppInfoDialog.newInstance(
|
||||||
apps[position],
|
appName = apps[position],
|
||||||
dataModels[position]?.appIcon,
|
appIcon = dataModels[position]?.appIcon,
|
||||||
dataModels[position]?.changelog?.get()
|
changelog = dataModels[position]?.changelog?.get()
|
||||||
).show(context.supportFragmentManager, "info")
|
).show(context.supportFragmentManager, "info")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
package com.vanced.manager.core.base
|
|
||||||
|
|
||||||
import androidx.fragment.app.Fragment
|
|
||||||
|
|
||||||
open class BaseFragment : Fragment()
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
package com.vanced.manager.ui.core
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.appcompat.app.AppCompatDialogFragment
|
||||||
|
import androidx.fragment.app.DialogFragment
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import androidx.viewbinding.ViewBinding
|
||||||
|
|
||||||
|
abstract class BindingDialogFragment<VB : ViewBinding> : AppCompatDialogFragment() {
|
||||||
|
|
||||||
|
private var _binding: VB? = null
|
||||||
|
protected val binding: VB get() = requireNotNull(_binding)
|
||||||
|
|
||||||
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater,
|
||||||
|
container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View {
|
||||||
|
_binding = binding(inflater, container, savedInstanceState)
|
||||||
|
otherSetups()
|
||||||
|
return binding.root
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract fun binding(
|
||||||
|
inflater: LayoutInflater,
|
||||||
|
container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): VB
|
||||||
|
|
||||||
|
protected open fun otherSetups() = Unit
|
||||||
|
|
||||||
|
override fun onDestroyView() {
|
||||||
|
super.onDestroyView()
|
||||||
|
_binding = null
|
||||||
|
}
|
||||||
|
}
|
|
@ -16,7 +16,7 @@ abstract class BindingFragment<VB : ViewBinding> : Fragment() {
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View? {
|
): View {
|
||||||
_binding = binding(inflater, container, savedInstanceState)
|
_binding = binding(inflater, container, savedInstanceState)
|
||||||
otherSetups()
|
otherSetups()
|
||||||
return binding.root
|
return binding.root
|
||||||
|
|
|
@ -5,34 +5,49 @@ import android.graphics.drawable.ColorDrawable
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.databinding.DataBindingUtil
|
import androidx.core.graphics.drawable.toBitmap
|
||||||
import androidx.fragment.app.DialogFragment
|
|
||||||
import com.vanced.manager.R
|
import com.vanced.manager.R
|
||||||
import com.vanced.manager.databinding.DialogAppInfoBinding
|
import com.vanced.manager.databinding.DialogAppInfoBinding
|
||||||
|
import com.vanced.manager.ui.core.BindingDialogFragment
|
||||||
|
|
||||||
class AppInfoDialog(
|
class AppInfoDialog : BindingDialogFragment<DialogAppInfoBinding>() {
|
||||||
private val appName: String?,
|
|
||||||
private val appIcon: Drawable?,
|
|
||||||
private val changelog: String?
|
|
||||||
) : DialogFragment() {
|
|
||||||
|
|
||||||
private lateinit var binding: DialogAppInfoBinding
|
companion object {
|
||||||
|
|
||||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
private const val TAG_APP_NAME = "TAG_APP_NAME"
|
||||||
if (dialog != null && dialog?.window != null) {
|
private const val TAG_APP_ICON = "TAG_APP_ICON"
|
||||||
dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
|
private const val TAG_CHANGELOG = "TAG_CHANGELOG"
|
||||||
|
|
||||||
|
fun newInstance(
|
||||||
|
appName: String?,
|
||||||
|
appIcon: Drawable?,
|
||||||
|
changelog: String?
|
||||||
|
): AppInfoDialog = AppInfoDialog().apply {
|
||||||
|
arguments = Bundle().apply {
|
||||||
|
putString(TAG_APP_NAME, appName)
|
||||||
|
putString(TAG_CHANGELOG, changelog)
|
||||||
|
putParcelable(TAG_APP_ICON, appIcon?.toBitmap())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
binding = DataBindingUtil.inflate(inflater, R.layout.dialog_app_info, container, false)
|
|
||||||
return binding.root
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun binding(
|
||||||
super.onViewCreated(view, savedInstanceState)
|
inflater: LayoutInflater,
|
||||||
binding.aboutAppName.text = requireActivity().getString(R.string.about_app, appName)
|
container: ViewGroup?,
|
||||||
binding.aboutAppImage.setImageDrawable(appIcon)
|
savedInstanceState: Bundle?
|
||||||
binding.aboutAppChangelog.text = changelog
|
) = DialogAppInfoBinding.inflate(inflater, container, false)
|
||||||
|
|
||||||
|
override fun otherSetups() {
|
||||||
|
dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
|
||||||
|
bindData()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun bindData() {
|
||||||
|
with(binding) {
|
||||||
|
aboutAppName.text = getString(R.string.about_app, arguments?.getString(TAG_APP_NAME))
|
||||||
|
aboutAppChangelog.text = arguments?.getString(TAG_CHANGELOG)
|
||||||
|
aboutAppImage.setImageBitmap(arguments?.getParcelable(TAG_APP_ICON))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -11,11 +11,11 @@ import androidx.core.content.edit
|
||||||
import androidx.fragment.app.viewModels
|
import androidx.fragment.app.viewModels
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import com.vanced.manager.R
|
import com.vanced.manager.R
|
||||||
|
import com.vanced.manager.core.ext.showDialog
|
||||||
import com.vanced.manager.databinding.FragmentAboutBinding
|
import com.vanced.manager.databinding.FragmentAboutBinding
|
||||||
import com.vanced.manager.ui.dialogs.AppInfoDialog
|
|
||||||
import com.vanced.manager.ui.core.BindingFragment
|
import com.vanced.manager.ui.core.BindingFragment
|
||||||
|
import com.vanced.manager.ui.dialogs.AppInfoDialog
|
||||||
import com.vanced.manager.ui.viewmodels.AboutViewModel
|
import com.vanced.manager.ui.viewmodels.AboutViewModel
|
||||||
import com.vanced.manager.utils.Extensions.show
|
|
||||||
import com.vanced.manager.utils.InternetTools.manager
|
import com.vanced.manager.utils.InternetTools.manager
|
||||||
|
|
||||||
class AboutFragment : BindingFragment<FragmentAboutBinding>() {
|
class AboutFragment : BindingFragment<FragmentAboutBinding>() {
|
||||||
|
@ -37,7 +37,15 @@ class AboutFragment : BindingFragment<FragmentAboutBinding>() {
|
||||||
@SuppressLint("ClickableViewAccessibility")
|
@SuppressLint("ClickableViewAccessibility")
|
||||||
private fun dataBind() {
|
private fun dataBind() {
|
||||||
requireActivity().title = getString(R.string.title_about)
|
requireActivity().title = getString(R.string.title_about)
|
||||||
binding.aboutHeader.root.setOnClickListener { AppInfoDialog(getString(R.string.app_name), AppCompatResources.getDrawable(requireActivity(), R.mipmap.ic_launcher), manager.get()?.string("changelog")).show(requireActivity()) }
|
binding.aboutHeader.root.setOnClickListener {
|
||||||
|
showDialog(
|
||||||
|
AppInfoDialog.newInstance(
|
||||||
|
appName = getString(R.string.app_name),
|
||||||
|
appIcon = AppCompatResources.getDrawable(requireActivity(), R.mipmap.ic_launcher),
|
||||||
|
changelog = manager.get()?.string("changelog")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
binding.root.setOnTouchListener { _, event: MotionEvent ->
|
binding.root.setOnTouchListener { _, event: MotionEvent ->
|
||||||
val eventAction = event.action
|
val eventAction = event.action
|
||||||
if (eventAction == MotionEvent.ACTION_UP) {
|
if (eventAction == MotionEvent.ACTION_UP) {
|
||||||
|
|
|
@ -1,60 +1,55 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<layout xmlns:android="http://schemas.android.com/apk/res/android"
|
<com.google.android.material.card.MaterialCardView
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools">
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?colorLinkBG"
|
||||||
|
app:cardCornerRadius="8dp"
|
||||||
|
app:cardElevation="0dp"
|
||||||
|
app:contentPaddingBottom="8dp"
|
||||||
|
app:contentPaddingLeft="16dp"
|
||||||
|
app:contentPaddingRight="16dp">
|
||||||
|
|
||||||
<com.google.android.material.card.MaterialCardView
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent">
|
||||||
android:background="?colorLinkBG"
|
|
||||||
app:cardCornerRadius="8dp"
|
|
||||||
app:cardElevation="0dp"
|
|
||||||
app:contentPaddingBottom="8dp"
|
|
||||||
app:contentPaddingLeft="16dp"
|
|
||||||
app:contentPaddingRight="16dp">
|
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<TextView
|
||||||
|
android:id="@+id/about_app_name"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
tools:text="About YouTube Vanced"
|
||||||
|
style="@style/DialogCardTitle"/>
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:id="@+id/about_app_image"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/about_app_name"
|
||||||
|
tools:src="@drawable/ic_vanced"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/about_app_changelog_header"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:text="@string/changelog"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/about_app_image"
|
||||||
|
style="@style/CardTextHeader"/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/about_app_name"
|
android:id="@+id/about_app_changelog"
|
||||||
style="@style/DialogCardTitle"
|
android:layout_width="match_parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
android:layout_height="wrap_content"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
android:layout_marginHorizontal="4dp"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
android:layout_marginTop="8dp"
|
||||||
tools:text="About YouTube Vanced" />
|
app:layout_constraintTop_toBottomOf="@id/about_app_changelog_header"
|
||||||
|
tools:text="@tools:sample/lorem/random"/>
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
android:id="@+id/about_app_image"
|
</com.google.android.material.card.MaterialCardView>
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="16dp"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/about_app_name"
|
|
||||||
tools:src="@drawable/ic_vanced" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/about_app_changelog_header"
|
|
||||||
style="@style/CardTextHeader"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="16dp"
|
|
||||||
android:text="@string/changelog"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/about_app_image" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/about_app_changelog"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginHorizontal="4dp"
|
|
||||||
android:layout_marginTop="8dp"
|
|
||||||
app:layout_constraintTop_toBottomOf="@id/about_app_changelog_header"
|
|
||||||
tools:text="@tools:sample/lorem/random" />
|
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
||||||
|
|
||||||
</com.google.android.material.card.MaterialCardView>
|
|
||||||
|
|
||||||
</layout>
|
|
Loading…
Reference in New Issue