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.ViewGroup
import androidx.fragment.app.FragmentActivity
import androidx.preference.PreferenceManager.getDefaultSharedPreferences
import androidx.preference.PreferenceManager.*
import androidx.recyclerview.widget.RecyclerView
import com.github.florent37.viewtooltip.ViewTooltip
import com.vanced.manager.R
@ -46,10 +46,10 @@ class AppListAdapter(
holder.appCard.setOnClickListener {
tooltip.close()
AppInfoDialog(
apps[position],
dataModels[position]?.appIcon,
dataModels[position]?.changelog?.get()
AppInfoDialog.newInstance(
appName = apps[position],
appIcon = dataModels[position]?.appIcon,
changelog = dataModels[position]?.changelog?.get()
).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,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
): View {
_binding = binding(inflater, container, savedInstanceState)
otherSetups()
return binding.root

View File

@ -5,34 +5,49 @@ import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.Drawable
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.DialogFragment
import androidx.core.graphics.drawable.toBitmap
import com.vanced.manager.R
import com.vanced.manager.databinding.DialogAppInfoBinding
import com.vanced.manager.ui.core.BindingDialogFragment
class AppInfoDialog(
private val appName: String?,
private val appIcon: Drawable?,
private val changelog: String?
) : DialogFragment() {
class AppInfoDialog : BindingDialogFragment<DialogAppInfoBinding>() {
private lateinit var binding: DialogAppInfoBinding
companion object {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
if (dialog != null && dialog?.window != null) {
dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
private const val TAG_APP_NAME = "TAG_APP_NAME"
private const val TAG_APP_ICON = "TAG_APP_ICON"
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?) {
super.onViewCreated(view, savedInstanceState)
binding.aboutAppName.text = requireActivity().getString(R.string.about_app, appName)
binding.aboutAppImage.setImageDrawable(appIcon)
binding.aboutAppChangelog.text = changelog
override fun binding(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
) = 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.preference.PreferenceManager
import com.vanced.manager.R
import com.vanced.manager.core.ext.showDialog
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.dialogs.AppInfoDialog
import com.vanced.manager.ui.viewmodels.AboutViewModel
import com.vanced.manager.utils.Extensions.show
import com.vanced.manager.utils.InternetTools.manager
class AboutFragment : BindingFragment<FragmentAboutBinding>() {
@ -37,7 +37,15 @@ class AboutFragment : BindingFragment<FragmentAboutBinding>() {
@SuppressLint("ClickableViewAccessibility")
private fun dataBind() {
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 ->
val eventAction = event.action
if (eventAction == MotionEvent.ACTION_UP) {

View File

@ -1,60 +1,55 @@
<?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: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_height="wrap_content"
android:background="?colorLinkBG"
app:cardCornerRadius="8dp"
app:cardElevation="0dp"
app:contentPaddingBottom="8dp"
app:contentPaddingLeft="16dp"
app:contentPaddingRight="16dp">
android:layout_height="match_parent">
<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_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
android:id="@+id/about_app_name"
style="@style/DialogCardTitle"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="About YouTube Vanced" />
<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"
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>
<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>