AppMenuSheet: Migrate to navigation components

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2023-08-04 17:02:14 +08:00
parent c0af12c23f
commit e35384e1f7
6 changed files with 30 additions and 77 deletions

View File

@@ -24,7 +24,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import com.aurora.Constants
import com.aurora.gplayapi.data.models.App import com.aurora.gplayapi.data.models.App
import com.aurora.store.R import com.aurora.store.R
import com.aurora.store.databinding.FragmentUpdatesBinding import com.aurora.store.databinding.FragmentUpdatesBinding
@@ -32,7 +31,6 @@ import com.aurora.store.view.epoxy.views.app.AppListViewModel_
import com.aurora.store.view.epoxy.views.HeaderViewModel_ import com.aurora.store.view.epoxy.views.HeaderViewModel_
import com.aurora.store.view.epoxy.views.shimmer.AppListViewShimmerModel_ import com.aurora.store.view.epoxy.views.shimmer.AppListViewShimmerModel_
import com.aurora.store.view.ui.commons.BaseFragment import com.aurora.store.view.ui.commons.BaseFragment
import com.aurora.store.view.ui.sheets.AppMenuSheet
import com.aurora.store.viewmodel.all.InstalledViewModel import com.aurora.store.viewmodel.all.InstalledViewModel
class InstalledAppsFragment : BaseFragment() { class InstalledAppsFragment : BaseFragment() {
@@ -112,19 +110,4 @@ class InstalledAppsFragment : BaseFragment() {
} }
} }
} }
private fun openAppMenuSheet(app: App) {
val fragment = childFragmentManager.findFragmentByTag(AppMenuSheet.TAG)
if (fragment != null)
childFragmentManager.beginTransaction().remove(fragment)
AppMenuSheet().apply {
arguments = Bundle().apply {
putString(Constants.STRING_EXTRA, gson.toJson(app))
}
}.show(
childFragmentManager,
AppMenuSheet.TAG
)
}
} }

View File

@@ -24,7 +24,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import com.aurora.Constants
import com.aurora.gplayapi.data.models.App import com.aurora.gplayapi.data.models.App
import com.aurora.store.R import com.aurora.store.R
import com.aurora.store.databinding.FragmentUpdatesBinding import com.aurora.store.databinding.FragmentUpdatesBinding
@@ -33,7 +32,6 @@ import com.aurora.store.view.epoxy.views.app.AppListViewModel_
import com.aurora.store.view.epoxy.views.HeaderViewModel_ import com.aurora.store.view.epoxy.views.HeaderViewModel_
import com.aurora.store.view.epoxy.views.shimmer.AppListViewShimmerModel_ import com.aurora.store.view.epoxy.views.shimmer.AppListViewShimmerModel_
import com.aurora.store.view.ui.commons.BaseFragment import com.aurora.store.view.ui.commons.BaseFragment
import com.aurora.store.view.ui.sheets.AppMenuSheet
import com.aurora.store.viewmodel.all.PurchasedViewModel import com.aurora.store.viewmodel.all.PurchasedViewModel
class PurchasedAppsFragment : BaseFragment() { class PurchasedAppsFragment : BaseFragment() {
@@ -126,19 +124,4 @@ class PurchasedAppsFragment : BaseFragment() {
} }
} }
} }
private fun openAppMenuSheet(app: App) {
val fragment = childFragmentManager.findFragmentByTag(AppMenuSheet.TAG)
if (fragment != null)
childFragmentManager.beginTransaction().remove(fragment)
AppMenuSheet().apply {
arguments = Bundle().apply {
putString(Constants.STRING_EXTRA, gson.toJson(app))
}
}.show(
childFragmentManager,
AppMenuSheet.TAG
)
}
} }

View File

@@ -93,4 +93,8 @@ open class BaseFragment : Fragment {
) )
) )
} }
fun openAppMenuSheet(app: App) {
findNavController().navigate(MobileNavigationDirections.actionGlobalAppMenuSheet(app))
}
} }

View File

@@ -33,31 +33,30 @@ import android.view.ViewGroup
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import com.aurora.Constants import androidx.navigation.fragment.navArgs
import com.aurora.extensions.isRAndAbove import com.aurora.extensions.isRAndAbove
import com.aurora.gplayapi.data.models.App import com.aurora.extensions.openInfo
import com.aurora.extensions.toast
import com.aurora.store.R import com.aurora.store.R
import com.aurora.store.data.event.BusEvent import com.aurora.store.data.event.BusEvent
import com.aurora.store.data.installer.AppInstaller import com.aurora.store.data.installer.AppInstaller
import com.aurora.store.data.providers.BlacklistProvider import com.aurora.store.data.providers.BlacklistProvider
import com.aurora.store.databinding.SheetAppMenuBinding import com.aurora.store.databinding.SheetAppMenuBinding
import com.aurora.store.util.PackageUtil import com.aurora.store.util.PackageUtil
import com.aurora.extensions.openInfo
import com.aurora.extensions.toast
import com.aurora.store.viewmodel.sheets.SheetsViewModel import com.aurora.store.viewmodel.sheets.SheetsViewModel
import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus
class AppMenuSheet : BaseBottomSheet() { class AppMenuSheet : BaseBottomSheet() {
private lateinit var B: SheetAppMenuBinding private lateinit var B: SheetAppMenuBinding
private lateinit var app: App
private val viewModel: SheetsViewModel by viewModels() private val viewModel: SheetsViewModel by viewModels()
private val args: AppMenuSheetArgs by navArgs()
private val startForPermissions = private val startForPermissions =
registerForActivityResult(ActivityResultContracts.RequestPermission()) { registerForActivityResult(ActivityResultContracts.RequestPermission()) {
if (it) { if (it) {
viewModel.copyApk(requireContext(), app.packageName) viewModel.copyApk(requireContext(), args.app.packageName)
} else { } else {
toast(R.string.permissions_denied) toast(R.string.permissions_denied)
} }
@@ -74,20 +73,9 @@ class AppMenuSheet : BaseBottomSheet() {
override fun onContentViewCreated(view: View, savedInstanceState: Bundle?) { override fun onContentViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
if (arguments != null) {
val bundle = arguments
val stringExtra = bundle!!.getString(Constants.STRING_EXTRA)
app = gson.fromJson(stringExtra, App::class.java)
setupNavigationView()
} else {
dismissAllowingStateLoss()
}
}
private fun setupNavigationView() {
val blacklistProvider = BlacklistProvider.with(requireContext()) val blacklistProvider = BlacklistProvider.with(requireContext())
val isBlacklisted: Boolean = blacklistProvider.isBlacklisted(app.packageName) val isBlacklisted: Boolean = blacklistProvider.isBlacklisted(args.app.packageName)
with(B.navigationView) { with(B.navigationView) {
//Switch strings for Add/Remove Blacklist //Switch strings for Add/Remove Blacklist
@@ -100,7 +88,7 @@ class AppMenuSheet : BaseBottomSheet() {
) )
//Show/Hide actions based on installed status //Show/Hide actions based on installed status
val installed = PackageUtil.isInstalled(requireContext(), app.packageName) val installed = PackageUtil.isInstalled(requireContext(), args.app.packageName)
menu.findItem(R.id.action_uninstall).isVisible = installed menu.findItem(R.id.action_uninstall).isVisible = installed
menu.findItem(R.id.action_local).isVisible = installed menu.findItem(R.id.action_local).isVisible = installed
@@ -109,15 +97,15 @@ class AppMenuSheet : BaseBottomSheet() {
R.id.action_blacklist -> { R.id.action_blacklist -> {
if (isBlacklisted) { if (isBlacklisted) {
blacklistProvider.whitelist(app.packageName) blacklistProvider.whitelist(args.app.packageName)
requireContext().toast(R.string.toast_apk_whitelisted) requireContext().toast(R.string.toast_apk_whitelisted)
} else { } else {
blacklistProvider.blacklist(app.packageName) blacklistProvider.blacklist(args.app.packageName)
requireContext().toast(R.string.toast_apk_blacklisted) requireContext().toast(R.string.toast_apk_blacklisted)
} }
EventBus.getDefault() EventBus.getDefault()
.post(BusEvent.Blacklisted(app.packageName, "")) .post(BusEvent.Blacklisted(args.app.packageName, ""))
} }
R.id.action_local -> { R.id.action_local -> {
@@ -126,11 +114,11 @@ class AppMenuSheet : BaseBottomSheet() {
R.id.action_uninstall -> { R.id.action_uninstall -> {
AppInstaller.getInstance(requireContext()) AppInstaller.getInstance(requireContext())
.getPreferredInstaller().uninstall(app.packageName) .getPreferredInstaller().uninstall(args.app.packageName)
} }
R.id.action_info -> { R.id.action_info -> {
requireContext().openInfo(app.packageName) requireContext().openInfo(args.app.packageName)
} }
} }
dismissAllowingStateLoss() dismissAllowingStateLoss()
@@ -144,7 +132,7 @@ class AppMenuSheet : BaseBottomSheet() {
if (!Environment.isExternalStorageManager()) { if (!Environment.isExternalStorageManager()) {
startActivity(Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION)) startActivity(Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION))
} else { } else {
viewModel.copyApk(requireContext(), app.packageName) viewModel.copyApk(requireContext(), args.app.packageName)
} }
} else { } else {
if (ContextCompat.checkSelfPermission( if (ContextCompat.checkSelfPermission(
@@ -152,7 +140,7 @@ class AppMenuSheet : BaseBottomSheet() {
Manifest.permission.WRITE_EXTERNAL_STORAGE Manifest.permission.WRITE_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED ) == PackageManager.PERMISSION_GRANTED
) { ) {
viewModel.copyApk(requireContext(), app.packageName) viewModel.copyApk(requireContext(), args.app.packageName)
} else { } else {
startForPermissions.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE) startForPermissions.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE)
} }

View File

@@ -34,7 +34,6 @@ import android.view.ViewGroup
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import com.aurora.Constants
import com.aurora.extensions.isRAndAbove import com.aurora.extensions.isRAndAbove
import com.aurora.extensions.toast import com.aurora.extensions.toast
import com.aurora.gplayapi.data.models.App import com.aurora.gplayapi.data.models.App
@@ -51,7 +50,6 @@ import com.aurora.store.view.epoxy.views.app.AppUpdateViewModel_
import com.aurora.store.view.epoxy.views.app.NoAppViewModel_ import com.aurora.store.view.epoxy.views.app.NoAppViewModel_
import com.aurora.store.view.epoxy.views.shimmer.AppListViewShimmerModel_ import com.aurora.store.view.epoxy.views.shimmer.AppListViewShimmerModel_
import com.aurora.store.view.ui.commons.BaseFragment import com.aurora.store.view.ui.commons.BaseFragment
import com.aurora.store.view.ui.sheets.AppMenuSheet
import com.aurora.store.viewmodel.all.UpdatesViewModel import com.aurora.store.viewmodel.all.UpdatesViewModel
import com.tonyodev.fetch2.AbstractFetchGroupListener import com.tonyodev.fetch2.AbstractFetchGroupListener
import com.tonyodev.fetch2.Download import com.tonyodev.fetch2.Download
@@ -331,19 +329,4 @@ class UpdatesFragment : BaseFragment() {
) )
} }
} }
private fun openAppMenuSheet(app: App) {
val fragment = childFragmentManager.findFragmentByTag(AppMenuSheet.TAG)
if (fragment != null)
childFragmentManager.beginTransaction().remove(fragment)
AppMenuSheet().apply {
arguments = Bundle().apply {
putString(Constants.STRING_EXTRA, gson.toJson(app))
}
}.show(
childFragmentManager,
AppMenuSheet.TAG
)
}
} }

View File

@@ -44,6 +44,9 @@
<action <action
android:id="@+id/action_global_streamBrowseFragment" android:id="@+id/action_global_streamBrowseFragment"
app:destination="@id/streamBrowseFragment" /> app:destination="@id/streamBrowseFragment" />
<action
android:id="@+id/action_global_appMenuSheet"
app:destination="@id/appMenuSheet" />
<fragment <fragment
android:id="@+id/appsContainerFragment" android:id="@+id/appsContainerFragment"
android:name="com.aurora.store.view.ui.apps.AppsContainerFragment" android:name="com.aurora.store.view.ui.apps.AppsContainerFragment"
@@ -341,4 +344,13 @@
android:name="com.aurora.store.view.ui.sheets.TOSSheet" android:name="com.aurora.store.view.ui.sheets.TOSSheet"
android:label="TOSSheet" android:label="TOSSheet"
tools:layout="@layout/sheet_tos" /> tools:layout="@layout/sheet_tos" />
<dialog
android:id="@+id/appMenuSheet"
android:name="com.aurora.store.view.ui.sheets.AppMenuSheet"
android:label="AppMenuSheet"
tools:layout="@layout/sheet_app_menu" >
<argument
android:name="app"
app:argType="com.aurora.gplayapi.data.models.App" />
</dialog>
</navigation> </navigation>