[LeakCanary]: OnboardingFragment: Use viewbinding as official way
Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -24,10 +24,8 @@ import android.animation.AnimatorListenerAdapter
|
|||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.graphics.Canvas
|
import android.graphics.Canvas
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewAnimationUtils
|
import android.view.ViewAnimationUtils
|
||||||
import android.view.ViewGroup
|
|
||||||
import androidx.recyclerview.widget.StaggeredGridLayoutManager
|
import androidx.recyclerview.widget.StaggeredGridLayoutManager
|
||||||
import com.aurora.extensions.hide
|
import com.aurora.extensions.hide
|
||||||
import com.aurora.extensions.isSAndAbove
|
import com.aurora.extensions.isSAndAbove
|
||||||
@@ -48,60 +46,31 @@ import java.nio.charset.StandardCharsets
|
|||||||
import kotlin.math.sqrt
|
import kotlin.math.sqrt
|
||||||
|
|
||||||
|
|
||||||
class AccentFragment : BaseFragment() {
|
class AccentFragment : BaseFragment(R.layout.fragment_onboarding_accent) {
|
||||||
|
|
||||||
private lateinit var B: FragmentOnboardingAccentBinding
|
private var _binding: FragmentOnboardingAccentBinding? = null
|
||||||
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
private var themeId: Int = 0
|
private var themeId: Int = 0
|
||||||
private var accentId: Int = if (isSAndAbove()) 0 else 1
|
private var accentId: Int = if (isSAndAbove()) 0 else 1
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater,
|
|
||||||
container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View {
|
|
||||||
B = FragmentOnboardingAccentBinding.bind(
|
|
||||||
inflater.inflate(
|
|
||||||
R.layout.fragment_onboarding_accent,
|
|
||||||
container,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
return B.root
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
_binding = FragmentOnboardingAccentBinding.bind(view)
|
||||||
|
|
||||||
themeId = Preferences.getInteger(
|
themeId = Preferences.getInteger(requireContext(), PREFERENCE_THEME_TYPE)
|
||||||
requireContext(),
|
accentId = Preferences.getInteger(requireContext(), PREFERENCE_THEME_ACCENT)
|
||||||
PREFERENCE_THEME_TYPE
|
|
||||||
)
|
|
||||||
|
|
||||||
accentId = Preferences.getInteger(
|
// RecyclerView
|
||||||
requireContext(),
|
with(binding.epoxyRecycler) {
|
||||||
PREFERENCE_THEME_ACCENT
|
|
||||||
)
|
|
||||||
|
|
||||||
attachRecycler()
|
|
||||||
|
|
||||||
val accentList = loadAccentsFromAssets()
|
|
||||||
updateController(accentList)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun attachRecycler() {
|
|
||||||
with(B.epoxyRecycler) {
|
|
||||||
setHasFixedSize(true)
|
setHasFixedSize(true)
|
||||||
layoutManager = StaggeredGridLayoutManager(5, StaggeredGridLayoutManager.VERTICAL)
|
layoutManager = StaggeredGridLayoutManager(5, StaggeredGridLayoutManager.VERTICAL)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private fun updateController(accentList: List<Accent>) {
|
binding.epoxyRecycler.withModels {
|
||||||
B.epoxyRecycler.withModels {
|
|
||||||
setFilterDuplicates(true)
|
setFilterDuplicates(true)
|
||||||
|
|
||||||
accentList.forEach {
|
loadAccentsFromAssets().forEach {
|
||||||
if (it.id == 0) {
|
if (it.id == 0) {
|
||||||
if (!isSAndAbove()) return@forEach
|
if (!isSAndAbove()) return@forEach
|
||||||
}
|
}
|
||||||
@@ -128,25 +97,25 @@ class AccentFragment : BaseFragment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun animate(view: View) {
|
private fun animate(view: View) {
|
||||||
if (B.themeSwitchImage.isVisible()) {
|
if (binding.themeSwitchImage.isVisible()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
val pos = IntArray(2)
|
val pos = IntArray(2)
|
||||||
view.getLocationInWindow(pos)
|
view.getLocationInWindow(pos)
|
||||||
val w: Int = B.root.measuredWidth
|
val w: Int = binding.root.measuredWidth
|
||||||
val h: Int = B.root.measuredHeight
|
val h: Int = binding.root.measuredHeight
|
||||||
|
|
||||||
val bitmap = Bitmap.createBitmap(
|
val bitmap = Bitmap.createBitmap(
|
||||||
B.root.measuredWidth,
|
binding.root.measuredWidth,
|
||||||
B.root.measuredHeight,
|
binding.root.measuredHeight,
|
||||||
Bitmap.Config.ARGB_8888
|
Bitmap.Config.ARGB_8888
|
||||||
)
|
)
|
||||||
|
|
||||||
val canvas = Canvas(bitmap)
|
val canvas = Canvas(bitmap)
|
||||||
B.root.draw(canvas)
|
binding.root.draw(canvas)
|
||||||
B.themeSwitchImage.setImageBitmap(bitmap)
|
binding.themeSwitchImage.setImageBitmap(bitmap)
|
||||||
B.themeSwitchImage.show()
|
binding.themeSwitchImage.show()
|
||||||
|
|
||||||
val finalRadius = sqrt(
|
val finalRadius = sqrt(
|
||||||
((w - pos[0]) * (w - pos[0]) + (h - pos[1]) * (h - pos[1])).toDouble()
|
((w - pos[0]) * (w - pos[0]) + (h - pos[1]) * (h - pos[1])).toDouble()
|
||||||
@@ -155,7 +124,7 @@ class AccentFragment : BaseFragment() {
|
|||||||
).toFloat()
|
).toFloat()
|
||||||
|
|
||||||
val anim: Animator = ViewAnimationUtils.createCircularReveal(
|
val anim: Animator = ViewAnimationUtils.createCircularReveal(
|
||||||
B.root,
|
binding.root,
|
||||||
pos[0],
|
pos[0],
|
||||||
pos[1],
|
pos[1],
|
||||||
0f,
|
0f,
|
||||||
@@ -166,8 +135,8 @@ class AccentFragment : BaseFragment() {
|
|||||||
anim.interpolator = CubicBezierInterpolator.EASE_IN_OUT_QUAD
|
anim.interpolator = CubicBezierInterpolator.EASE_IN_OUT_QUAD
|
||||||
anim.addListener(object : AnimatorListenerAdapter() {
|
anim.addListener(object : AnimatorListenerAdapter() {
|
||||||
override fun onAnimationEnd(animation: Animator) {
|
override fun onAnimationEnd(animation: Animator) {
|
||||||
B.themeSwitchImage.setImageDrawable(null)
|
binding.themeSwitchImage.setImageDrawable(null)
|
||||||
B.themeSwitchImage.hide()
|
binding.themeSwitchImage.hide()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
anim.start()
|
anim.start()
|
||||||
|
|||||||
@@ -17,8 +17,7 @@ import com.aurora.store.databinding.FragmentAppLinksBinding
|
|||||||
class AppLinksFragment : Fragment(R.layout.fragment_app_links) {
|
class AppLinksFragment : Fragment(R.layout.fragment_app_links) {
|
||||||
|
|
||||||
private var _binding: FragmentAppLinksBinding? = null
|
private var _binding: FragmentAppLinksBinding? = null
|
||||||
private val binding: FragmentAppLinksBinding
|
private val binding get() = _binding!!
|
||||||
get() = _binding!!
|
|
||||||
|
|
||||||
private val playStoreDomain = "play.google.com"
|
private val playStoreDomain = "play.google.com"
|
||||||
|
|
||||||
|
|||||||
@@ -21,9 +21,7 @@ package com.aurora.store.view.ui.onboarding
|
|||||||
|
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
|
||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
import com.aurora.extensions.isMIUI
|
import com.aurora.extensions.isMIUI
|
||||||
import com.aurora.extensions.isMiuiOptimizationDisabled
|
import com.aurora.extensions.isMiuiOptimizationDisabled
|
||||||
@@ -44,15 +42,16 @@ import com.aurora.store.util.save
|
|||||||
import com.aurora.store.view.epoxy.views.preference.InstallerViewModel_
|
import com.aurora.store.view.epoxy.views.preference.InstallerViewModel_
|
||||||
import com.aurora.store.view.ui.commons.BaseFragment
|
import com.aurora.store.view.ui.commons.BaseFragment
|
||||||
import com.google.gson.reflect.TypeToken
|
import com.google.gson.reflect.TypeToken
|
||||||
import java.nio.charset.StandardCharsets
|
|
||||||
import rikka.shizuku.Shizuku
|
import rikka.shizuku.Shizuku
|
||||||
|
import java.nio.charset.StandardCharsets
|
||||||
|
|
||||||
|
|
||||||
class InstallerFragment : BaseFragment() {
|
class InstallerFragment : BaseFragment(R.layout.fragment_onboarding_installer) {
|
||||||
|
|
||||||
private lateinit var B: FragmentOnboardingInstallerBinding
|
private var _binding: FragmentOnboardingInstallerBinding? = null
|
||||||
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
var installerId: Int = 0
|
private var installerId: Int = 0
|
||||||
|
|
||||||
private var shizukuAlive = false
|
private var shizukuAlive = false
|
||||||
private val shizukuAliveListener = Shizuku.OnBinderReceivedListener {
|
private val shizukuAliveListener = Shizuku.OnBinderReceivedListener {
|
||||||
@@ -69,7 +68,7 @@ class InstallerFragment : BaseFragment() {
|
|||||||
if (result == PackageManager.PERMISSION_GRANTED) {
|
if (result == PackageManager.PERMISSION_GRANTED) {
|
||||||
this.installerId = 5
|
this.installerId = 5
|
||||||
save(PREFERENCE_INSTALLER_ID, 5)
|
save(PREFERENCE_INSTALLER_ID, 5)
|
||||||
B.epoxyRecycler.requestModelBuild()
|
binding.epoxyRecycler.requestModelBuild()
|
||||||
} else {
|
} else {
|
||||||
showDialog(
|
showDialog(
|
||||||
R.string.action_installations,
|
R.string.action_installations,
|
||||||
@@ -78,54 +77,16 @@ class InstallerFragment : BaseFragment() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater,
|
|
||||||
container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View {
|
|
||||||
|
|
||||||
if (hasShizuku(requireContext()) && isOAndAbove()) {
|
|
||||||
Shizuku.addBinderReceivedListenerSticky(shizukuAliveListener)
|
|
||||||
Shizuku.addBinderDeadListener(shizukuDeadListener)
|
|
||||||
Shizuku.addRequestPermissionResultListener(shizukuResultListener)
|
|
||||||
}
|
|
||||||
|
|
||||||
B = FragmentOnboardingInstallerBinding.bind(
|
|
||||||
inflater.inflate(
|
|
||||||
R.layout.fragment_onboarding_installer,
|
|
||||||
container,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
return B.root
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
_binding = FragmentOnboardingInstallerBinding.bind(view)
|
||||||
|
|
||||||
installerId = Preferences.getInteger(
|
installerId = Preferences.getInteger(requireContext(), PREFERENCE_INSTALLER_ID)
|
||||||
requireContext(),
|
|
||||||
PREFERENCE_INSTALLER_ID
|
|
||||||
)
|
|
||||||
|
|
||||||
val installerList = loadInstallersFromAssets()
|
// RecyclerView
|
||||||
updateController(installerList)
|
binding.epoxyRecycler.withModels {
|
||||||
}
|
|
||||||
|
|
||||||
override fun onDestroy() {
|
|
||||||
if (hasShizuku(requireContext()) && isOAndAbove()) {
|
|
||||||
Shizuku.removeBinderReceivedListener(shizukuAliveListener)
|
|
||||||
Shizuku.removeBinderDeadListener(shizukuDeadListener)
|
|
||||||
Shizuku.removeRequestPermissionResultListener(shizukuResultListener)
|
|
||||||
}
|
|
||||||
super.onDestroy()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updateController(installerList: List<Installer>) {
|
|
||||||
B.epoxyRecycler.withModels {
|
|
||||||
setFilterDuplicates(true)
|
setFilterDuplicates(true)
|
||||||
installerList.forEach {
|
loadInstallersFromAssets().forEach {
|
||||||
add(
|
add(
|
||||||
InstallerViewModel_()
|
InstallerViewModel_()
|
||||||
.id(it.id)
|
.id(it.id)
|
||||||
@@ -146,6 +107,20 @@ class InstallerFragment : BaseFragment() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onDestroyView() {
|
||||||
|
super.onDestroyView()
|
||||||
|
_binding = null
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDestroy() {
|
||||||
|
if (hasShizuku(requireContext()) && isOAndAbove()) {
|
||||||
|
Shizuku.removeBinderReceivedListener(shizukuAliveListener)
|
||||||
|
Shizuku.removeBinderDeadListener(shizukuDeadListener)
|
||||||
|
Shizuku.removeRequestPermissionResultListener(shizukuResultListener)
|
||||||
|
}
|
||||||
|
super.onDestroy()
|
||||||
|
}
|
||||||
|
|
||||||
private fun save(installerId: Int) {
|
private fun save(installerId: Int) {
|
||||||
when (installerId) {
|
when (installerId) {
|
||||||
0 -> {
|
0 -> {
|
||||||
|
|||||||
@@ -54,8 +54,7 @@ import com.google.android.material.tabs.TabLayoutMediator
|
|||||||
class OnboardingFragment : Fragment(R.layout.fragment_onboarding) {
|
class OnboardingFragment : Fragment(R.layout.fragment_onboarding) {
|
||||||
|
|
||||||
private var _binding: FragmentOnboardingBinding? = null
|
private var _binding: FragmentOnboardingBinding? = null
|
||||||
private val binding: FragmentOnboardingBinding
|
private val binding get() = _binding!!
|
||||||
get() = _binding!!
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|||||||
@@ -27,9 +27,7 @@ import android.net.Uri
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
|
||||||
import androidx.activity.result.contract.ActivityResultContracts
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.core.app.ActivityCompat
|
import androidx.core.app.ActivityCompat
|
||||||
import com.aurora.extensions.isOAndAbove
|
import com.aurora.extensions.isOAndAbove
|
||||||
@@ -44,57 +42,40 @@ import com.aurora.store.view.epoxy.views.preference.PermissionViewModel_
|
|||||||
import com.aurora.store.view.ui.commons.BaseFragment
|
import com.aurora.store.view.ui.commons.BaseFragment
|
||||||
|
|
||||||
|
|
||||||
class PermissionsFragment : BaseFragment() {
|
class PermissionsFragment : BaseFragment(R.layout.fragment_onboarding_permissions) {
|
||||||
|
|
||||||
private lateinit var B: FragmentOnboardingPermissionsBinding
|
private var _binding: FragmentOnboardingPermissionsBinding? = null
|
||||||
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
private val startForPackageManagerResult =
|
private val startForPackageManagerResult =
|
||||||
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
|
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
|
||||||
if (isOAndAbove() && requireContext().packageManager.canRequestPackageInstalls()) {
|
if (isOAndAbove() && requireContext().packageManager.canRequestPackageInstalls()) {
|
||||||
toast(R.string.toast_permission_granted)
|
toast(R.string.toast_permission_granted)
|
||||||
B.epoxyRecycler.requestModelBuild()
|
binding.epoxyRecycler.requestModelBuild()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private val startForStorageManagerResult =
|
private val startForStorageManagerResult =
|
||||||
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
|
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
|
||||||
if (isRAndAbove() && Environment.isExternalStorageManager()) {
|
if (isRAndAbove() && Environment.isExternalStorageManager()) {
|
||||||
toast(R.string.toast_permission_granted)
|
toast(R.string.toast_permission_granted)
|
||||||
B.epoxyRecycler.requestModelBuild()
|
binding.epoxyRecycler.requestModelBuild()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private val startForPermissions =
|
private val startForPermissions =
|
||||||
registerForActivityResult(ActivityResultContracts.RequestPermission()) {
|
registerForActivityResult(ActivityResultContracts.RequestPermission()) {
|
||||||
if (it) {
|
if (it) {
|
||||||
toast(R.string.toast_permission_granted)
|
toast(R.string.toast_permission_granted)
|
||||||
B.epoxyRecycler.requestModelBuild()
|
binding.epoxyRecycler.requestModelBuild()
|
||||||
} else {
|
} else {
|
||||||
toast(R.string.permissions_denied)
|
toast(R.string.permissions_denied)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater,
|
|
||||||
container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View {
|
|
||||||
B = FragmentOnboardingPermissionsBinding.bind(
|
|
||||||
inflater.inflate(
|
|
||||||
R.layout.fragment_onboarding_permissions,
|
|
||||||
container,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
return B.root
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
updateController()
|
_binding = FragmentOnboardingPermissionsBinding.bind(view)
|
||||||
}
|
|
||||||
|
|
||||||
private fun updateController() {
|
|
||||||
|
|
||||||
|
// RecyclerView
|
||||||
val installerList = mutableListOf(
|
val installerList = mutableListOf(
|
||||||
Permission(
|
Permission(
|
||||||
2,
|
2,
|
||||||
@@ -131,7 +112,7 @@ class PermissionsFragment : BaseFragment() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
B.epoxyRecycler.withModels {
|
binding.epoxyRecycler.withModels {
|
||||||
val writeExternalStorage = if (!isRAndAbove()) ActivityCompat.checkSelfPermission(
|
val writeExternalStorage = if (!isRAndAbove()) ActivityCompat.checkSelfPermission(
|
||||||
requireContext(),
|
requireContext(),
|
||||||
Manifest.permission.WRITE_EXTERNAL_STORAGE
|
Manifest.permission.WRITE_EXTERNAL_STORAGE
|
||||||
@@ -141,7 +122,12 @@ class PermissionsFragment : BaseFragment() {
|
|||||||
Manifest.permission.POST_NOTIFICATIONS
|
Manifest.permission.POST_NOTIFICATIONS
|
||||||
) == PackageManager.PERMISSION_GRANTED else true
|
) == PackageManager.PERMISSION_GRANTED else true
|
||||||
val storageManager = if (isRAndAbove()) Environment.isExternalStorageManager() else true
|
val storageManager = if (isRAndAbove()) Environment.isExternalStorageManager() else true
|
||||||
val canInstallPackages = if (isOAndAbove()) requireContext().packageManager.canRequestPackageInstalls() else true
|
val canInstallPackages = if (isOAndAbove()) {
|
||||||
|
requireContext().packageManager.canRequestPackageInstalls()
|
||||||
|
} else {
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
setFilterDuplicates(true)
|
setFilterDuplicates(true)
|
||||||
installerList.forEach {
|
installerList.forEach {
|
||||||
add(
|
add(
|
||||||
@@ -170,6 +156,11 @@ class PermissionsFragment : BaseFragment() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onDestroyView() {
|
||||||
|
super.onDestroyView()
|
||||||
|
_binding = null
|
||||||
|
}
|
||||||
|
|
||||||
private fun checkStorageAccessPermission() {
|
private fun checkStorageAccessPermission() {
|
||||||
startForPermissions.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
startForPermissions.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,10 +24,8 @@ import android.animation.AnimatorListenerAdapter
|
|||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.graphics.Canvas
|
import android.graphics.Canvas
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewAnimationUtils
|
import android.view.ViewAnimationUtils
|
||||||
import android.view.ViewGroup
|
|
||||||
import com.aurora.extensions.hide
|
import com.aurora.extensions.hide
|
||||||
import com.aurora.extensions.isVisible
|
import com.aurora.extensions.isVisible
|
||||||
import com.aurora.extensions.show
|
import com.aurora.extensions.show
|
||||||
@@ -46,50 +44,25 @@ import java.nio.charset.StandardCharsets
|
|||||||
import kotlin.math.sqrt
|
import kotlin.math.sqrt
|
||||||
|
|
||||||
|
|
||||||
class ThemeFragment : BaseFragment() {
|
class ThemeFragment : BaseFragment(R.layout.fragment_onboarding_theme) {
|
||||||
|
|
||||||
private lateinit var B: FragmentOnboardingThemeBinding
|
private var _binding: FragmentOnboardingThemeBinding? = null
|
||||||
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
private var themeId: Int = 0
|
private var themeId: Int = 0
|
||||||
private var accentId: Int = 0
|
private var accentId: Int = 0
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater,
|
|
||||||
container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View {
|
|
||||||
B = FragmentOnboardingThemeBinding.bind(
|
|
||||||
inflater.inflate(
|
|
||||||
R.layout.fragment_onboarding_theme,
|
|
||||||
container,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
return B.root
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
_binding = FragmentOnboardingThemeBinding.bind(view)
|
||||||
|
|
||||||
themeId = Preferences.getInteger(
|
themeId = Preferences.getInteger(requireContext(), PREFERENCE_THEME_TYPE)
|
||||||
requireContext(),
|
accentId = Preferences.getInteger(requireContext(), PREFERENCE_THEME_ACCENT)
|
||||||
PREFERENCE_THEME_TYPE
|
|
||||||
)
|
|
||||||
|
|
||||||
accentId = Preferences.getInteger(
|
// RecyclerView
|
||||||
requireContext(),
|
binding.epoxyRecycler.withModels {
|
||||||
PREFERENCE_THEME_ACCENT
|
|
||||||
)
|
|
||||||
|
|
||||||
val themeList = loadThemesFromAssets()
|
|
||||||
updateController(themeList)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updateController(themeList: List<Theme>) {
|
|
||||||
B.epoxyRecycler.withModels {
|
|
||||||
setFilterDuplicates(true)
|
setFilterDuplicates(true)
|
||||||
themeList.forEach {
|
loadThemesFromAssets().forEach {
|
||||||
add(
|
add(
|
||||||
ThemeViewModel_()
|
ThemeViewModel_()
|
||||||
.id(it.id)
|
.id(it.id)
|
||||||
@@ -108,31 +81,36 @@ class ThemeFragment : BaseFragment() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onDestroyView() {
|
||||||
|
super.onDestroyView()
|
||||||
|
_binding = null
|
||||||
|
}
|
||||||
|
|
||||||
private fun update(themeId: Int) {
|
private fun update(themeId: Int) {
|
||||||
requireActivity().recreate()
|
requireActivity().recreate()
|
||||||
save(PREFERENCE_THEME_TYPE, themeId)
|
save(PREFERENCE_THEME_TYPE, themeId)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun animate(view: View) {
|
private fun animate(view: View) {
|
||||||
if (B.themeSwitchImage.isVisible()) {
|
if (binding.themeSwitchImage.isVisible()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
val pos = IntArray(2)
|
val pos = IntArray(2)
|
||||||
view.getLocationInWindow(pos)
|
view.getLocationInWindow(pos)
|
||||||
val w: Int = B.root.measuredWidth
|
val w: Int = binding.root.measuredWidth
|
||||||
val h: Int = B.root.measuredHeight
|
val h: Int = binding.root.measuredHeight
|
||||||
|
|
||||||
val bitmap = Bitmap.createBitmap(
|
val bitmap = Bitmap.createBitmap(
|
||||||
B.root.measuredWidth,
|
binding.root.measuredWidth,
|
||||||
B.root.measuredHeight,
|
binding.root.measuredHeight,
|
||||||
Bitmap.Config.ARGB_8888
|
Bitmap.Config.ARGB_8888
|
||||||
)
|
)
|
||||||
|
|
||||||
val canvas = Canvas(bitmap)
|
val canvas = Canvas(bitmap)
|
||||||
B.root.draw(canvas)
|
binding.root.draw(canvas)
|
||||||
B.themeSwitchImage.setImageBitmap(bitmap)
|
binding.themeSwitchImage.setImageBitmap(bitmap)
|
||||||
B.themeSwitchImage.show()
|
binding.themeSwitchImage.show()
|
||||||
|
|
||||||
val finalRadius = sqrt(
|
val finalRadius = sqrt(
|
||||||
((w - pos[0]) * (w - pos[0]) + (h - pos[1]) * (h - pos[1])).toDouble()
|
((w - pos[0]) * (w - pos[0]) + (h - pos[1]) * (h - pos[1])).toDouble()
|
||||||
@@ -141,7 +119,7 @@ class ThemeFragment : BaseFragment() {
|
|||||||
).toFloat()
|
).toFloat()
|
||||||
|
|
||||||
val anim: Animator = ViewAnimationUtils.createCircularReveal(
|
val anim: Animator = ViewAnimationUtils.createCircularReveal(
|
||||||
B.root,
|
binding.root,
|
||||||
pos[0],
|
pos[0],
|
||||||
pos[1],
|
pos[1],
|
||||||
0f,
|
0f,
|
||||||
@@ -152,8 +130,8 @@ class ThemeFragment : BaseFragment() {
|
|||||||
anim.interpolator = CubicBezierInterpolator.EASE_IN_OUT_QUAD
|
anim.interpolator = CubicBezierInterpolator.EASE_IN_OUT_QUAD
|
||||||
anim.addListener(object : AnimatorListenerAdapter() {
|
anim.addListener(object : AnimatorListenerAdapter() {
|
||||||
override fun onAnimationEnd(animation: Animator) {
|
override fun onAnimationEnd(animation: Animator) {
|
||||||
B.themeSwitchImage.setImageDrawable(null)
|
binding.themeSwitchImage.setImageDrawable(null)
|
||||||
B.themeSwitchImage.hide()
|
binding.themeSwitchImage.hide()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
anim.start()
|
anim.start()
|
||||||
|
|||||||
@@ -20,9 +20,7 @@
|
|||||||
package com.aurora.store.view.ui.onboarding
|
package com.aurora.store.view.ui.onboarding
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
|
||||||
import com.aurora.extensions.browse
|
import com.aurora.extensions.browse
|
||||||
import com.aurora.store.R
|
import com.aurora.store.R
|
||||||
import com.aurora.store.data.model.Dash
|
import com.aurora.store.data.model.Dash
|
||||||
@@ -32,18 +30,12 @@ import com.aurora.store.view.ui.commons.BaseFragment
|
|||||||
import com.google.gson.reflect.TypeToken
|
import com.google.gson.reflect.TypeToken
|
||||||
import java.nio.charset.StandardCharsets
|
import java.nio.charset.StandardCharsets
|
||||||
|
|
||||||
class WelcomeFragment : BaseFragment() {
|
class WelcomeFragment : BaseFragment(R.layout.fragment_onboarding_welcome) {
|
||||||
|
|
||||||
private lateinit var B: FragmentOnboardingWelcomeBinding
|
private var _binding: FragmentOnboardingWelcomeBinding? = null
|
||||||
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@JvmStatic
|
|
||||||
fun newInstance(): WelcomeFragment {
|
|
||||||
return WelcomeFragment().apply {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val icMap: MutableMap<String, Int> = mutableMapOf(
|
val icMap: MutableMap<String, Int> = mutableMapOf(
|
||||||
"ic_faq" to R.drawable.ic_faq,
|
"ic_faq" to R.drawable.ic_faq,
|
||||||
"ic_code" to R.drawable.ic_code,
|
"ic_code" to R.drawable.ic_code,
|
||||||
@@ -53,32 +45,14 @@ class WelcomeFragment : BaseFragment() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater,
|
|
||||||
container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View {
|
|
||||||
B = FragmentOnboardingWelcomeBinding.bind(
|
|
||||||
inflater.inflate(
|
|
||||||
R.layout.fragment_onboarding_welcome,
|
|
||||||
container,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
return B.root
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
val dashList = loadDashFromAssets()
|
_binding = FragmentOnboardingWelcomeBinding.bind(view)
|
||||||
updateController(dashList)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updateController(dashList: List<Dash>) {
|
// RecyclerView
|
||||||
B.epoxyRecycler.withModels {
|
binding.epoxyRecycler.withModels {
|
||||||
setFilterDuplicates(true)
|
setFilterDuplicates(true)
|
||||||
dashList.forEach {
|
loadDashFromAssets().forEach {
|
||||||
add(
|
add(
|
||||||
DashViewModel_()
|
DashViewModel_()
|
||||||
.id(it.id)
|
.id(it.id)
|
||||||
@@ -101,4 +75,9 @@ class WelcomeFragment : BaseFragment() {
|
|||||||
object : TypeToken<MutableList<Dash?>?>() {}.type
|
object : TypeToken<MutableList<Dash?>?>() {}.type
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onDestroyView() {
|
||||||
|
super.onDestroyView()
|
||||||
|
_binding = null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user