AppInfoDialog view binding and add BindingDialogFragment

This commit is contained in:
HaliksaR 2020-11-15 21:11:44 +07:00
parent af76bcb2a6
commit 41cd02c256
7 changed files with 138 additions and 86 deletions

View File

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

View File

@ -1,5 +0,0 @@
package com.vanced.manager.core.base
import androidx.fragment.app.Fragment
open class BaseFragment : Fragment()

View File

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

View File

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

View File

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

View File

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

View File

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