Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 013eb082 authored by Aayush Gupta's avatar Aayush Gupta
Browse files

App Lounge: Disable paid apps installation

parent 2744c669
Loading
Loading
Loading
Loading
+35 −10
Original line number Diff line number Diff line
@@ -40,8 +40,10 @@ import foundation.e.apps.api.fused.data.Ratings
import foundation.e.apps.api.fused.utils.CategoryUtils
import foundation.e.apps.api.gplay.GPlayAPIRepository
import foundation.e.apps.manager.pkg.PkgManagerModule
import foundation.e.apps.utils.DataStoreModule
import foundation.e.apps.utils.PreferenceManagerModule
import foundation.e.apps.utils.enums.Origin
import foundation.e.apps.utils.enums.Status
import javax.inject.Inject
import javax.inject.Named
import javax.inject.Singleton
@@ -52,6 +54,7 @@ class FusedAPIImpl @Inject constructor(
    private val gPlayAPIRepository: GPlayAPIRepository,
    private val pkgManagerModule: PkgManagerModule,
    private val preferenceManagerModule: PreferenceManagerModule,
    private val dataStoreModule: DataStoreModule,
    @ApplicationContext private val context: Context,
    @Named("cacheDir") private val cacheDir: String
) {
@@ -205,8 +208,11 @@ class FusedAPIImpl @Inject constructor(
    suspend fun getPWAApps(category: String): List<FusedApp>? {
        val response = getPWAAppsResponse(category)
        response?.apps?.forEach {
            it.status =
            it.status = if (it.isFree) {
                pkgManagerModule.getPackageStatus(it.package_name, it.latest_version_code)
            } else {
                Status.BLOCKED
            }
        }
        return response?.apps
    }
@@ -214,8 +220,11 @@ class FusedAPIImpl @Inject constructor(
    suspend fun getOpenSourceApps(category: String): List<FusedApp>? {
        val response = getOpenSourceAppsResponse(category)
        response?.apps?.forEach {
            it.status =
            it.status = if (it.isFree) {
                pkgManagerModule.getPackageStatus(it.package_name, it.latest_version_code)
            } else {
                Status.BLOCKED
            }
        }
        return response?.apps
    }
@@ -250,10 +259,14 @@ class FusedAPIImpl @Inject constructor(
            }
        }
        response.forEach { fusedApp ->
            fusedApp.status = pkgManagerModule.getPackageStatus(
            fusedApp.status = if (fusedApp.isFree) {
                pkgManagerModule.getPackageStatus(
                    fusedApp.package_name,
                    fusedApp.latest_version_code
                )
            } else {
                Status.BLOCKED
            }
            list.add(fusedApp)
        }
        return list
@@ -272,7 +285,11 @@ class FusedAPIImpl @Inject constructor(
            app?.transformToFusedApp()
        }
        response?.let {
            it.status = pkgManagerModule.getPackageStatus(it.package_name, it.latest_version_code)
            it.status = if (it.isFree) {
                pkgManagerModule.getPackageStatus(it.package_name, it.latest_version_code)
            } else {
                Status.BLOCKED
            }
        }
        return response ?: FusedApp()
    }
@@ -481,7 +498,11 @@ class FusedAPIImpl @Inject constructor(
            cleanAPKRepository.searchApps(keyword, source, type, nres, page, by).body()?.apps

        response?.forEach {
            it.status = pkgManagerModule.getPackageStatus(it.package_name, it.latest_version_code)
            it.status = if (it.isFree) {
                pkgManagerModule.getPackageStatus(it.package_name, it.latest_version_code)
            } else {
                Status.BLOCKED
            }
            it.source =
                if (source.contentEquals(CleanAPKInterface.APP_SOURCE_FOSS)) "Open Source" else "PWA"
            list.add(it)
@@ -601,10 +622,14 @@ class FusedAPIImpl @Inject constructor(
                usageQualityScore = if (this.labeledRating.isNotEmpty()) this.labeledRating.toDouble() else -1.0
            ),
            offer_type = this.offerType,
            status = pkgManagerModule.getPackageStatus(this.packageName, this.versionCode),
            status = if (this.isFree) pkgManagerModule.getPackageStatus(
                this.packageName,
                this.versionCode
            ) else Status.BLOCKED,
            origin = Origin.GPLAY,
            shareUrl = this.shareUrl,
            appSize = Formatter.formatFileSize(context, this.size)
            appSize = Formatter.formatFileSize(context, this.size),
            isFree = this.isFree
        )
    }

+2 −1
Original line number Diff line number Diff line
@@ -42,5 +42,6 @@ data class FusedApp(
    var origin: Origin = Origin.CLEANAPK,
    val shareUrl: String = String(),
    val appSize: String = String(),
    var source: String = String()
    var source: String = String(),
    val isFree: Boolean = true
)
+18 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import androidx.recyclerview.widget.LinearLayoutManager
import coil.load
import com.google.android.material.snackbar.Snackbar
import dagger.hilt.android.AndroidEntryPoint
import foundation.e.apps.MainActivityViewModel
import foundation.e.apps.R
@@ -43,6 +44,7 @@ import foundation.e.apps.databinding.FragmentApplicationBinding
import foundation.e.apps.manager.pkg.PkgManagerModule
import foundation.e.apps.utils.enums.Origin
import foundation.e.apps.utils.enums.Status
import foundation.e.apps.utils.enums.User
import javax.inject.Inject

@AndroidEntryPoint
@@ -181,6 +183,22 @@ class ApplicationFragment : Fragment(R.layout.fragment_application) {
                    downloadPB.visibility = View.GONE
                    appSize.visibility = View.VISIBLE
                }
                Status.BLOCKED -> {
                    installButton.setOnClickListener {
                        val errorMsg = when (
                            User.valueOf(
                                mainActivityViewModel.userType.value ?: User.UNAVAILABLE.name
                            )
                        ) {
                            User.ANONYMOUS -> getString(R.string.install_blocked_anonymous)
                            User.GOOGLE -> getString(R.string.install_blocked_google)
                            User.UNAVAILABLE -> String()
                        }
                        if (errorMsg.isNotBlank()) {
                            Snackbar.make(view, errorMsg, Snackbar.LENGTH_SHORT).show()
                        }
                    }
                }
                else -> {
                    Log.d(TAG, "Unknown status: $status")
                }
+3 −1
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import foundation.e.apps.api.fused.data.FusedApp
import foundation.e.apps.applicationlist.model.ApplicationListRVAdapter
import foundation.e.apps.databinding.FragmentApplicationListBinding
import foundation.e.apps.manager.pkg.PkgManagerModule
import foundation.e.apps.utils.enums.User
import javax.inject.Inject

@AndroidEntryPoint
@@ -77,7 +78,8 @@ class ApplicationListFragment : Fragment(R.layout.fragment_application_list), Fu
                ApplicationListRVAdapter(
                    this,
                    it,
                    pkgManagerModule
                    pkgManagerModule,
                    User.valueOf(mainActivityViewModel.userType.value ?: User.UNAVAILABLE.name)
                )
            }
        recyclerView.apply {
+16 −1
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import coil.load
import com.facebook.shimmer.Shimmer
import com.facebook.shimmer.Shimmer.Direction.LEFT_TO_RIGHT
import com.facebook.shimmer.ShimmerDrawable
import com.google.android.material.snackbar.Snackbar
import foundation.e.apps.R
import foundation.e.apps.api.cleanapk.CleanAPKInterface
import foundation.e.apps.api.fused.FusedAPIInterface
@@ -42,13 +43,15 @@ import foundation.e.apps.search.SearchFragmentDirections
import foundation.e.apps.updates.UpdatesFragmentDirections
import foundation.e.apps.utils.enums.Origin
import foundation.e.apps.utils.enums.Status
import foundation.e.apps.utils.enums.User
import javax.inject.Singleton

@Singleton
class ApplicationListRVAdapter(
    private val fusedAPIInterface: FusedAPIInterface,
    private val currentDestinationId: Int,
    private val pkgManagerModule: PkgManagerModule
    private val pkgManagerModule: PkgManagerModule,
    private val user: User
) :
    RecyclerView.Adapter<ApplicationListRVAdapter.ViewHolder>() {

@@ -183,6 +186,18 @@ class ApplicationListRVAdapter(
                Status.INSTALLING, Status.UNINSTALLING -> {
                    installButton.isEnabled = false
                }
                Status.BLOCKED -> {
                    installButton.setOnClickListener {
                        val errorMsg = when (user) {
                            User.ANONYMOUS -> view.context.getString(R.string.install_blocked_anonymous)
                            User.GOOGLE -> view.context.getString(R.string.install_blocked_google)
                            User.UNAVAILABLE -> String()
                        }
                        if (errorMsg.isNotBlank()) {
                            Snackbar.make(view, errorMsg, Snackbar.LENGTH_SHORT).show()
                        }
                    }
                }
            }
        }
    }
Loading