VancedManager/app/src/main/java/com/vanced/manager/ui/fragments/HomeFragment.kt

137 lines
5.1 KiB
Kotlin
Raw Normal View History

package com.vanced.manager.ui.fragments
2020-03-18 18:10:54 +00:00
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
2020-03-18 18:10:54 +00:00
import android.os.Bundle
2020-11-15 17:04:23 +00:00
import android.view.LayoutInflater
import android.view.Menu
import android.view.MenuInflater
import android.view.ViewGroup
2020-11-05 16:35:49 +00:00
import androidx.core.content.edit
2020-10-31 19:45:39 +00:00
import androidx.core.content.res.ResourcesCompat
2020-06-04 08:39:04 +00:00
import androidx.fragment.app.viewModels
import androidx.localbroadcastmanager.content.LocalBroadcastManager
2020-10-31 19:45:39 +00:00
import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.LinearLayoutManager
import com.crowdin.platform.util.inflateWithCrowdin
2020-10-31 19:45:39 +00:00
import com.github.florent37.viewtooltip.ViewTooltip
import com.google.android.flexbox.FlexboxLayoutManager
import com.google.android.flexbox.JustifyContent
import com.vanced.manager.R
2020-10-31 19:45:39 +00:00
import com.vanced.manager.adapter.AppListAdapter
import com.vanced.manager.adapter.LinkAdapter
import com.vanced.manager.adapter.SponsorAdapter
import com.vanced.manager.core.ui.base.BindingFragment
2020-06-04 07:35:26 +00:00
import com.vanced.manager.databinding.FragmentHomeBinding
2020-08-05 11:52:09 +00:00
import com.vanced.manager.ui.dialogs.DialogContainer.installAlertBuilder
2020-06-04 08:39:04 +00:00
import com.vanced.manager.ui.viewmodels.HomeViewModel
import com.vanced.manager.ui.viewmodels.HomeViewModelFactory
2020-03-18 18:10:54 +00:00
2020-11-14 21:48:47 +00:00
open class HomeFragment : BindingFragment<FragmentHomeBinding>() {
companion object {
2020-11-23 16:00:41 +00:00
const val INSTALL_FAILED = "INSTALL_FAILED"
const val REFRESH_HOME = "REFRESH_HOME"
2020-11-14 21:48:47 +00:00
}
2020-03-18 18:10:54 +00:00
private val viewModel: HomeViewModel by viewModels {
HomeViewModelFactory(requireActivity())
}
2020-11-14 21:48:47 +00:00
private val localBroadcastManager by lazy { LocalBroadcastManager.getInstance(requireActivity()) }
2020-10-31 19:45:39 +00:00
private val prefs by lazy { PreferenceManager.getDefaultSharedPreferences(requireActivity()) }
private lateinit var tooltip: ViewTooltip
2020-11-14 21:48:47 +00:00
override fun binding(
inflater: LayoutInflater,
container: ViewGroup?,
2020-07-16 21:05:31 +00:00
savedInstanceState: Bundle?
2020-11-14 21:48:47 +00:00
) = FragmentHomeBinding.inflate(inflater, container, false)
2020-11-14 21:48:47 +00:00
override fun otherSetups() {
bindData()
}
2020-09-19 07:07:32 +00:00
2020-11-14 21:48:47 +00:00
private fun bindData() {
requireActivity().title = getString(R.string.title_home)
setHasOptionsMenu(true)
with(binding) {
2020-11-14 21:48:47 +00:00
homeRefresh.setOnRefreshListener { viewModel.fetchData() }
2020-10-31 19:45:39 +00:00
tooltip = ViewTooltip
.on(recyclerAppList)
.position(ViewTooltip.Position.TOP)
.autoHide(false, 0)
.color(ResourcesCompat.getColor(requireActivity().resources, R.color.Twitter, null))
.withShadow(false)
.corner(25)
.onHide {
2020-11-05 16:35:49 +00:00
prefs.edit { putBoolean("show_changelog_tooltip", false) }
2020-10-31 19:45:39 +00:00
}
.text(requireActivity().getString(R.string.app_changelog_tooltip))
if (prefs.getBoolean("show_changelog_tooltip", true)) {
tooltip.show()
}
recyclerAppList.apply {
layoutManager = LinearLayoutManager(requireActivity())
2020-11-23 20:33:24 +00:00
adapter = AppListAdapter(requireActivity(), viewModel, viewLifecycleOwner, tooltip)
2020-10-31 19:45:39 +00:00
setHasFixedSize(true)
}
recyclerSponsors.apply {
val lm = FlexboxLayoutManager(requireActivity())
lm.justifyContent = JustifyContent.SPACE_EVENLY
layoutManager = lm
setHasFixedSize(true)
2020-11-23 20:33:24 +00:00
adapter = SponsorAdapter(requireActivity(), viewModel)
2020-10-31 19:45:39 +00:00
}
recyclerLinks.apply {
val lm = FlexboxLayoutManager(requireActivity())
lm.justifyContent = JustifyContent.SPACE_EVENLY
layoutManager = lm
setHasFixedSize(true)
2020-11-23 20:33:24 +00:00
adapter = LinkAdapter(requireActivity(), viewModel)
2020-10-31 19:45:39 +00:00
}
2020-07-16 21:05:31 +00:00
}
2020-11-14 21:48:47 +00:00
}
2020-11-14 21:48:47 +00:00
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflateWithCrowdin(R.menu.toolbar_menu, menu, resources)
super.onCreateOptionsMenu(menu, inflater)
2020-03-18 18:10:54 +00:00
}
2020-11-14 21:48:47 +00:00
override fun onPause() {
super.onPause()
localBroadcastManager.unregisterReceiver(broadcastReceiver)
2020-10-31 19:45:39 +00:00
tooltip.close()
//binding.mainTablayout.removeOnTabSelectedListener(tabListener)
}
2020-08-04 13:49:46 +00:00
override fun onResume() {
super.onResume()
registerReceivers()
2020-10-31 19:45:39 +00:00
// binding.mainTablayout.addOnTabSelectedListener(tabListener)
2020-08-04 13:49:46 +00:00
}
private val broadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
when (intent.action) {
2020-11-12 19:00:10 +00:00
INSTALL_FAILED -> installAlertBuilder(intent.getStringExtra("errorMsg").toString(), intent.getStringExtra("fullErrorMsg"), requireActivity())
2020-09-17 10:13:16 +00:00
REFRESH_HOME -> viewModel.fetchData()
}
}
}
private fun registerReceivers() {
2020-06-23 13:47:20 +00:00
val intentFilter = IntentFilter()
2020-08-06 18:37:43 +00:00
intentFilter.addAction(INSTALL_FAILED)
intentFilter.addAction(REFRESH_HOME)
localBroadcastManager.registerReceiver(broadcastReceiver, intentFilter)
}
2020-03-18 18:10:54 +00:00
}