package com.vanced.manager.ui.fragments import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter import android.os.Bundle import android.view.LayoutInflater import android.view.Menu import android.view.MenuInflater import android.view.ViewGroup import androidx.core.content.edit import androidx.core.content.res.ResourcesCompat import androidx.fragment.app.viewModels import androidx.localbroadcastmanager.content.LocalBroadcastManager import androidx.preference.PreferenceManager import androidx.recyclerview.widget.LinearLayoutManager import com.crowdin.platform.util.inflateWithCrowdin import com.github.florent37.viewtooltip.ViewTooltip import com.google.android.flexbox.FlexboxLayoutManager import com.google.android.flexbox.JustifyContent import com.vanced.manager.R 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 import com.vanced.manager.databinding.FragmentHomeBinding import com.vanced.manager.ui.dialogs.DialogContainer.installAlertBuilder import com.vanced.manager.ui.viewmodels.HomeViewModel import com.vanced.manager.ui.viewmodels.HomeViewModelFactory open class HomeFragment : BindingFragment() { companion object { const val INSTALL_FAILED = "INSTALL_FAILED" const val REFRESH_HOME = "REFRESH_HOME" } private val viewModel: HomeViewModel by viewModels { HomeViewModelFactory(requireActivity()) } private val localBroadcastManager by lazy { LocalBroadcastManager.getInstance(requireActivity()) } private val prefs by lazy { PreferenceManager.getDefaultSharedPreferences(requireActivity()) } private lateinit var tooltip: ViewTooltip override fun binding( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ) = FragmentHomeBinding.inflate(inflater, container, false) override fun otherSetups() { bindData() } private fun bindData() { requireActivity().title = getString(R.string.title_home) setHasOptionsMenu(true) with(binding) { homeRefresh.setOnRefreshListener { viewModel.fetchData() } 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 { prefs.edit { putBoolean("show_changelog_tooltip", false) } } .text(requireActivity().getString(R.string.app_changelog_tooltip)) if (prefs.getBoolean("show_changelog_tooltip", true)) { tooltip.show() } recyclerAppList.apply { layoutManager = LinearLayoutManager(requireActivity()) adapter = AppListAdapter(requireActivity(), viewModel, viewLifecycleOwner, tooltip) setHasFixedSize(true) } recyclerSponsors.apply { val lm = FlexboxLayoutManager(requireActivity()) lm.justifyContent = JustifyContent.SPACE_EVENLY layoutManager = lm setHasFixedSize(true) adapter = SponsorAdapter(requireActivity(), viewModel) } recyclerLinks.apply { val lm = FlexboxLayoutManager(requireActivity()) lm.justifyContent = JustifyContent.SPACE_EVENLY layoutManager = lm setHasFixedSize(true) adapter = LinkAdapter(requireActivity(), viewModel) } } } override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { inflater.inflateWithCrowdin(R.menu.toolbar_menu, menu, resources) super.onCreateOptionsMenu(menu, inflater) } override fun onPause() { super.onPause() localBroadcastManager.unregisterReceiver(broadcastReceiver) tooltip.close() //binding.mainTablayout.removeOnTabSelectedListener(tabListener) } override fun onResume() { super.onResume() registerReceivers() // binding.mainTablayout.addOnTabSelectedListener(tabListener) } private val broadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { when (intent.action) { INSTALL_FAILED -> installAlertBuilder(intent.getStringExtra("errorMsg").toString(), intent.getStringExtra("fullErrorMsg"), requireActivity()) REFRESH_HOME -> viewModel.fetchData() } } } private fun registerReceivers() { val intentFilter = IntentFilter() intentFilter.addAction(INSTALL_FAILED) intentFilter.addAction(REFRESH_HOME) localBroadcastManager.registerReceiver(broadcastReceiver, intentFilter) } }