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.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")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
): View {
|
||||
_binding = binding(inflater, container, savedInstanceState)
|
||||
otherSetups()
|
||||
return binding.root
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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) {
|
||||
|
|
|
@ -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>
|
Loading…
Reference in New Issue