Loading app/src/main/java/foundation/e/apps/data/fused/FusedAPIInterface.kt→app/src/main/java/foundation/e/apps/data/fused/ApplicationInstaller.kt +2 −6 Original line number Diff line number Diff line Loading @@ -18,15 +18,11 @@ package foundation.e.apps.data.fused import android.widget.ImageView import foundation.e.apps.data.fused.data.FusedApp /** * FusedAPIInterface to allow adapter classes to install applications easily */ interface FusedAPIInterface { interface ApplicationInstaller { fun getApplication(app: FusedApp, appIcon: ImageView? = null) fun installApplication(app: FusedApp) fun cancelDownload(app: FusedApp) } app/src/main/java/foundation/e/apps/ui/applicationlist/ApplicationListFragment.kt +4 −5 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ package foundation.e.apps.ui.applicationlist import android.os.Bundle import android.view.View import android.widget.ImageView import androidx.appcompat.app.AlertDialog import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels Loading @@ -34,7 +33,7 @@ import dagger.hilt.android.AndroidEntryPoint import foundation.e.apps.R import foundation.e.apps.data.ResultSupreme import foundation.e.apps.data.enums.Status import foundation.e.apps.data.fused.FusedAPIInterface import foundation.e.apps.data.fused.ApplicationInstaller import foundation.e.apps.data.fused.data.FusedApp import foundation.e.apps.data.login.AuthObject import foundation.e.apps.data.login.exceptions.GPlayLoginException Loading @@ -54,7 +53,7 @@ import javax.inject.Inject @AndroidEntryPoint class ApplicationListFragment : TimeoutFragment(R.layout.fragment_application_list), FusedAPIInterface { ApplicationInstaller { // protected to avoid SyntheticAccessor protected val args: ApplicationListFragmentArgs by navArgs() Loading Loading @@ -196,7 +195,7 @@ class ApplicationListFragment : ), positiveButtonText = getString(R.string.dialog_confirm), positiveButtonAction = { getApplication(fusedApp) installApplication(fusedApp) }, cancelButtonText = getString(R.string.dialog_cancel), ).show(childFragmentManager, "HomeFragment") Loading Loading @@ -333,7 +332,7 @@ class ApplicationListFragment : super.onPause() } override fun getApplication(app: FusedApp, appIcon: ImageView?) { override fun installApplication(app: FusedApp) { mainActivityViewModel.getApplication(app) } Loading app/src/main/java/foundation/e/apps/ui/applicationlist/ApplicationListRVAdapter.kt +8 −9 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ package foundation.e.apps.ui.applicationlist import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView import androidx.core.content.ContextCompat import androidx.core.view.children import androidx.lifecycle.LifecycleOwner Loading @@ -40,7 +39,7 @@ import foundation.e.apps.data.cleanapk.CleanApkRetrofit import foundation.e.apps.data.enums.Origin import foundation.e.apps.data.enums.Status import foundation.e.apps.data.enums.User import foundation.e.apps.data.fused.FusedAPIInterface import foundation.e.apps.data.fused.ApplicationInstaller import foundation.e.apps.data.fused.data.FusedApp import foundation.e.apps.databinding.ApplicationListItemBinding import foundation.e.apps.install.pkg.InstallerService Loading @@ -56,7 +55,7 @@ import javax.inject.Singleton @Singleton class ApplicationListRVAdapter( private val fusedAPIInterface: FusedAPIInterface, private val applicationInstaller: ApplicationInstaller, private val privacyInfoViewModel: PrivacyInfoViewModel, private val appInfoFetchViewModel: AppInfoFetchViewModel, private val mainActivityViewModel: MainActivityViewModel, Loading Loading @@ -326,7 +325,7 @@ class ApplicationListRVAdapter( backgroundTintList = ContextCompat.getColorStateList(view.context, android.R.color.transparent) setOnClickListener { installApplication(searchApp, appIcon) installApplication(searchApp) } } } Loading Loading @@ -447,7 +446,7 @@ class ApplicationListRVAdapter( if (searchApp.isFree || searchApp.isPurchased) { disableInstallButton() text = context.getText(R.string.cancel) installApplication(searchApp, appIcon) installApplication(searchApp) } else { paidAppHandler?.invoke(searchApp) } Loading Loading @@ -504,7 +503,7 @@ class ApplicationListRVAdapter( if (mainActivityViewModel.checkUnsupportedApplication(searchApp, context)) { return@setOnClickListener } installApplication(searchApp, appIcon) installApplication(searchApp) } } progressBarInstall.visibility = View.GONE Loading Loading @@ -543,12 +542,12 @@ class ApplicationListRVAdapter( this.submitList(newList.map { it.copy() }) } private fun installApplication(searchApp: FusedApp, appIcon: ImageView) { fusedAPIInterface.getApplication(searchApp, appIcon) private fun installApplication(searchApp: FusedApp) { applicationInstaller.installApplication(searchApp) } private fun cancelDownload(searchApp: FusedApp) { fusedAPIInterface.cancelDownload(searchApp) applicationInstaller.cancelDownload(searchApp) } override fun onDetachedFromRecyclerView(recyclerView: RecyclerView) { Loading app/src/main/java/foundation/e/apps/ui/home/HomeFragment.kt +4 −5 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ package foundation.e.apps.ui.home import android.os.Bundle import android.view.View import android.widget.ImageView import androidx.appcompat.app.AlertDialog import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels Loading @@ -32,7 +31,7 @@ import dagger.hilt.android.AndroidEntryPoint import foundation.e.apps.R import foundation.e.apps.data.ResultSupreme import foundation.e.apps.data.enums.Status import foundation.e.apps.data.fused.FusedAPIInterface import foundation.e.apps.data.fused.ApplicationInstaller import foundation.e.apps.data.fused.data.FusedApp import foundation.e.apps.data.fused.data.FusedHome import foundation.e.apps.data.login.AuthObject Loading @@ -53,7 +52,7 @@ import kotlinx.coroutines.launch import javax.inject.Inject @AndroidEntryPoint class HomeFragment : TimeoutFragment(R.layout.fragment_home), FusedAPIInterface { class HomeFragment : TimeoutFragment(R.layout.fragment_home), ApplicationInstaller { /* * Make adapter nullable to avoid memory leaks. Loading Loading @@ -134,7 +133,7 @@ class HomeFragment : TimeoutFragment(R.layout.fragment_home), FusedAPIInterface ), positiveButtonText = getString(R.string.dialog_confirm), positiveButtonAction = { getApplication(fusedApp) installApplication(fusedApp) }, cancelButtonText = getString(R.string.dialog_cancel), ).show(childFragmentManager, "HomeFragment") Loading Loading @@ -284,7 +283,7 @@ class HomeFragment : TimeoutFragment(R.layout.fragment_home), FusedAPIInterface homeParentRVAdapter = null } override fun getApplication(app: FusedApp, appIcon: ImageView?) { override fun installApplication(app: FusedApp) { mainActivityViewModel.getApplication(app) } Loading app/src/main/java/foundation/e/apps/ui/home/model/HomeChildRVAdapter.kt +9 −10 Original line number Diff line number Diff line Loading @@ -21,7 +21,6 @@ package foundation.e.apps.ui.home.model import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView import androidx.core.content.ContextCompat import androidx.lifecycle.LifecycleOwner import androidx.navigation.findNavController Loading @@ -37,7 +36,7 @@ import foundation.e.apps.data.cleanapk.CleanApkRetrofit import foundation.e.apps.data.enums.Origin import foundation.e.apps.data.enums.Status import foundation.e.apps.data.enums.User import foundation.e.apps.data.fused.FusedAPIInterface import foundation.e.apps.data.fused.ApplicationInstaller import foundation.e.apps.data.fused.data.FusedApp import foundation.e.apps.databinding.HomeChildListItemBinding import foundation.e.apps.ui.AppInfoFetchViewModel Loading @@ -47,7 +46,7 @@ import foundation.e.apps.utils.disableInstallButton import foundation.e.apps.utils.enableInstallButton class HomeChildRVAdapter( private var fusedAPIInterface: FusedAPIInterface?, private var applicationInstaller: ApplicationInstaller?, private val appInfoFetchViewModel: AppInfoFetchViewModel, private val mainActivityViewModel: MainActivityViewModel, private var lifecycleOwner: LifecycleOwner?, Loading Loading @@ -136,7 +135,7 @@ class HomeChildRVAdapter( enableInstallButton() text = context.getString(R.string.retry) setOnClickListener { installApplication(homeApp, appIcon) installApplication(homeApp) } } progressBarInstall.visibility = View.GONE Loading Loading @@ -201,7 +200,7 @@ class HomeChildRVAdapter( if (homeApp.isFree) { disableInstallButton() text = context.getString(R.string.cancel) installApplication(homeApp, appIcon) installApplication(homeApp) } else { paidAppHandler?.invoke(homeApp) } Loading @@ -221,7 +220,7 @@ class HomeChildRVAdapter( if (mainActivityViewModel.checkUnsupportedApplication(homeApp, context)) { return@setOnClickListener } installApplication(homeApp, appIcon) installApplication(homeApp) } } progressBarInstall.visibility = View.GONE Loading Loading @@ -283,18 +282,18 @@ class HomeChildRVAdapter( this.submitList(newList.map { it.copy() }) } private fun installApplication(homeApp: FusedApp, appIcon: ImageView) { fusedAPIInterface?.getApplication(homeApp, appIcon) private fun installApplication(homeApp: FusedApp) { applicationInstaller?.installApplication(homeApp) } private fun cancelDownload(homeApp: FusedApp) { fusedAPIInterface?.cancelDownload(homeApp) applicationInstaller?.cancelDownload(homeApp) } override fun onDetachedFromRecyclerView(recyclerView: RecyclerView) { super.onDetachedFromRecyclerView(recyclerView) lifecycleOwner = null paidAppHandler = null fusedAPIInterface = null applicationInstaller = null } } Loading
app/src/main/java/foundation/e/apps/data/fused/FusedAPIInterface.kt→app/src/main/java/foundation/e/apps/data/fused/ApplicationInstaller.kt +2 −6 Original line number Diff line number Diff line Loading @@ -18,15 +18,11 @@ package foundation.e.apps.data.fused import android.widget.ImageView import foundation.e.apps.data.fused.data.FusedApp /** * FusedAPIInterface to allow adapter classes to install applications easily */ interface FusedAPIInterface { interface ApplicationInstaller { fun getApplication(app: FusedApp, appIcon: ImageView? = null) fun installApplication(app: FusedApp) fun cancelDownload(app: FusedApp) }
app/src/main/java/foundation/e/apps/ui/applicationlist/ApplicationListFragment.kt +4 −5 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ package foundation.e.apps.ui.applicationlist import android.os.Bundle import android.view.View import android.widget.ImageView import androidx.appcompat.app.AlertDialog import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels Loading @@ -34,7 +33,7 @@ import dagger.hilt.android.AndroidEntryPoint import foundation.e.apps.R import foundation.e.apps.data.ResultSupreme import foundation.e.apps.data.enums.Status import foundation.e.apps.data.fused.FusedAPIInterface import foundation.e.apps.data.fused.ApplicationInstaller import foundation.e.apps.data.fused.data.FusedApp import foundation.e.apps.data.login.AuthObject import foundation.e.apps.data.login.exceptions.GPlayLoginException Loading @@ -54,7 +53,7 @@ import javax.inject.Inject @AndroidEntryPoint class ApplicationListFragment : TimeoutFragment(R.layout.fragment_application_list), FusedAPIInterface { ApplicationInstaller { // protected to avoid SyntheticAccessor protected val args: ApplicationListFragmentArgs by navArgs() Loading Loading @@ -196,7 +195,7 @@ class ApplicationListFragment : ), positiveButtonText = getString(R.string.dialog_confirm), positiveButtonAction = { getApplication(fusedApp) installApplication(fusedApp) }, cancelButtonText = getString(R.string.dialog_cancel), ).show(childFragmentManager, "HomeFragment") Loading Loading @@ -333,7 +332,7 @@ class ApplicationListFragment : super.onPause() } override fun getApplication(app: FusedApp, appIcon: ImageView?) { override fun installApplication(app: FusedApp) { mainActivityViewModel.getApplication(app) } Loading
app/src/main/java/foundation/e/apps/ui/applicationlist/ApplicationListRVAdapter.kt +8 −9 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ package foundation.e.apps.ui.applicationlist import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView import androidx.core.content.ContextCompat import androidx.core.view.children import androidx.lifecycle.LifecycleOwner Loading @@ -40,7 +39,7 @@ import foundation.e.apps.data.cleanapk.CleanApkRetrofit import foundation.e.apps.data.enums.Origin import foundation.e.apps.data.enums.Status import foundation.e.apps.data.enums.User import foundation.e.apps.data.fused.FusedAPIInterface import foundation.e.apps.data.fused.ApplicationInstaller import foundation.e.apps.data.fused.data.FusedApp import foundation.e.apps.databinding.ApplicationListItemBinding import foundation.e.apps.install.pkg.InstallerService Loading @@ -56,7 +55,7 @@ import javax.inject.Singleton @Singleton class ApplicationListRVAdapter( private val fusedAPIInterface: FusedAPIInterface, private val applicationInstaller: ApplicationInstaller, private val privacyInfoViewModel: PrivacyInfoViewModel, private val appInfoFetchViewModel: AppInfoFetchViewModel, private val mainActivityViewModel: MainActivityViewModel, Loading Loading @@ -326,7 +325,7 @@ class ApplicationListRVAdapter( backgroundTintList = ContextCompat.getColorStateList(view.context, android.R.color.transparent) setOnClickListener { installApplication(searchApp, appIcon) installApplication(searchApp) } } } Loading Loading @@ -447,7 +446,7 @@ class ApplicationListRVAdapter( if (searchApp.isFree || searchApp.isPurchased) { disableInstallButton() text = context.getText(R.string.cancel) installApplication(searchApp, appIcon) installApplication(searchApp) } else { paidAppHandler?.invoke(searchApp) } Loading Loading @@ -504,7 +503,7 @@ class ApplicationListRVAdapter( if (mainActivityViewModel.checkUnsupportedApplication(searchApp, context)) { return@setOnClickListener } installApplication(searchApp, appIcon) installApplication(searchApp) } } progressBarInstall.visibility = View.GONE Loading Loading @@ -543,12 +542,12 @@ class ApplicationListRVAdapter( this.submitList(newList.map { it.copy() }) } private fun installApplication(searchApp: FusedApp, appIcon: ImageView) { fusedAPIInterface.getApplication(searchApp, appIcon) private fun installApplication(searchApp: FusedApp) { applicationInstaller.installApplication(searchApp) } private fun cancelDownload(searchApp: FusedApp) { fusedAPIInterface.cancelDownload(searchApp) applicationInstaller.cancelDownload(searchApp) } override fun onDetachedFromRecyclerView(recyclerView: RecyclerView) { Loading
app/src/main/java/foundation/e/apps/ui/home/HomeFragment.kt +4 −5 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ package foundation.e.apps.ui.home import android.os.Bundle import android.view.View import android.widget.ImageView import androidx.appcompat.app.AlertDialog import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels Loading @@ -32,7 +31,7 @@ import dagger.hilt.android.AndroidEntryPoint import foundation.e.apps.R import foundation.e.apps.data.ResultSupreme import foundation.e.apps.data.enums.Status import foundation.e.apps.data.fused.FusedAPIInterface import foundation.e.apps.data.fused.ApplicationInstaller import foundation.e.apps.data.fused.data.FusedApp import foundation.e.apps.data.fused.data.FusedHome import foundation.e.apps.data.login.AuthObject Loading @@ -53,7 +52,7 @@ import kotlinx.coroutines.launch import javax.inject.Inject @AndroidEntryPoint class HomeFragment : TimeoutFragment(R.layout.fragment_home), FusedAPIInterface { class HomeFragment : TimeoutFragment(R.layout.fragment_home), ApplicationInstaller { /* * Make adapter nullable to avoid memory leaks. Loading Loading @@ -134,7 +133,7 @@ class HomeFragment : TimeoutFragment(R.layout.fragment_home), FusedAPIInterface ), positiveButtonText = getString(R.string.dialog_confirm), positiveButtonAction = { getApplication(fusedApp) installApplication(fusedApp) }, cancelButtonText = getString(R.string.dialog_cancel), ).show(childFragmentManager, "HomeFragment") Loading Loading @@ -284,7 +283,7 @@ class HomeFragment : TimeoutFragment(R.layout.fragment_home), FusedAPIInterface homeParentRVAdapter = null } override fun getApplication(app: FusedApp, appIcon: ImageView?) { override fun installApplication(app: FusedApp) { mainActivityViewModel.getApplication(app) } Loading
app/src/main/java/foundation/e/apps/ui/home/model/HomeChildRVAdapter.kt +9 −10 Original line number Diff line number Diff line Loading @@ -21,7 +21,6 @@ package foundation.e.apps.ui.home.model import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView import androidx.core.content.ContextCompat import androidx.lifecycle.LifecycleOwner import androidx.navigation.findNavController Loading @@ -37,7 +36,7 @@ import foundation.e.apps.data.cleanapk.CleanApkRetrofit import foundation.e.apps.data.enums.Origin import foundation.e.apps.data.enums.Status import foundation.e.apps.data.enums.User import foundation.e.apps.data.fused.FusedAPIInterface import foundation.e.apps.data.fused.ApplicationInstaller import foundation.e.apps.data.fused.data.FusedApp import foundation.e.apps.databinding.HomeChildListItemBinding import foundation.e.apps.ui.AppInfoFetchViewModel Loading @@ -47,7 +46,7 @@ import foundation.e.apps.utils.disableInstallButton import foundation.e.apps.utils.enableInstallButton class HomeChildRVAdapter( private var fusedAPIInterface: FusedAPIInterface?, private var applicationInstaller: ApplicationInstaller?, private val appInfoFetchViewModel: AppInfoFetchViewModel, private val mainActivityViewModel: MainActivityViewModel, private var lifecycleOwner: LifecycleOwner?, Loading Loading @@ -136,7 +135,7 @@ class HomeChildRVAdapter( enableInstallButton() text = context.getString(R.string.retry) setOnClickListener { installApplication(homeApp, appIcon) installApplication(homeApp) } } progressBarInstall.visibility = View.GONE Loading Loading @@ -201,7 +200,7 @@ class HomeChildRVAdapter( if (homeApp.isFree) { disableInstallButton() text = context.getString(R.string.cancel) installApplication(homeApp, appIcon) installApplication(homeApp) } else { paidAppHandler?.invoke(homeApp) } Loading @@ -221,7 +220,7 @@ class HomeChildRVAdapter( if (mainActivityViewModel.checkUnsupportedApplication(homeApp, context)) { return@setOnClickListener } installApplication(homeApp, appIcon) installApplication(homeApp) } } progressBarInstall.visibility = View.GONE Loading Loading @@ -283,18 +282,18 @@ class HomeChildRVAdapter( this.submitList(newList.map { it.copy() }) } private fun installApplication(homeApp: FusedApp, appIcon: ImageView) { fusedAPIInterface?.getApplication(homeApp, appIcon) private fun installApplication(homeApp: FusedApp) { applicationInstaller?.installApplication(homeApp) } private fun cancelDownload(homeApp: FusedApp) { fusedAPIInterface?.cancelDownload(homeApp) applicationInstaller?.cancelDownload(homeApp) } override fun onDetachedFromRecyclerView(recyclerView: RecyclerView) { super.onDetachedFromRecyclerView(recyclerView) lifecycleOwner = null paidAppHandler = null fusedAPIInterface = null applicationInstaller = null } }