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

Commit 3ee98b94 authored by Hasib Prince's avatar Hasib Prince
Browse files

Merge branch 'main' into 6607-gplayapi_auth_error

parents c9951aa8 12ed556b
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -53,15 +53,14 @@ import foundation.e.apps.utils.enums.Type
import foundation.e.apps.utils.enums.User
import foundation.e.apps.utils.enums.isInitialized
import foundation.e.apps.utils.enums.isUnFiltered
import foundation.e.apps.utils.modules.CommonUtilsModule
import foundation.e.apps.utils.modules.DataStoreModule
import foundation.e.apps.utils.modules.PWAManagerModule
import java.io.ByteArrayOutputStream
import javax.inject.Inject
import kotlinx.coroutines.channels.ProducerScope
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.launch
import java.io.ByteArrayOutputStream
import javax.inject.Inject

@HiltViewModel
class MainActivityViewModel @Inject constructor(
@@ -394,9 +393,9 @@ class MainActivityViewModel @Inject constructor(
        val capabilities = connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)

        val hasInternet =
            capabilities != null
                    && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                    && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
            capabilities != null &&
                capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) &&
                capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)

        trySend(hasInternet)
    }
+38 −14
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ package foundation.e.apps.api.fused
import android.content.Context
import android.text.format.Formatter
import androidx.lifecycle.LiveData
import androidx.lifecycle.LiveDataScope
import androidx.lifecycle.liveData
import androidx.lifecycle.map
import com.aurora.gplayapi.Constants
@@ -68,12 +67,17 @@ import foundation.e.apps.utils.eventBus.AppEvent
import foundation.e.apps.utils.eventBus.EventBus
import foundation.e.apps.utils.modules.PWAManagerModule
import foundation.e.apps.utils.modules.PreferenceManagerModule
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.TimeoutCancellationException
import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.withTimeout
import timber.log.Timber
import javax.inject.Inject
import javax.inject.Singleton

typealias FusedHomeDeferred = Deferred<ResultSupreme<List<FusedHome>>>

@Singleton
class FusedAPIImpl @Inject constructor(
    private val cleanAPKRepository: CleanAPKRepository,
@@ -129,18 +133,34 @@ class FusedAPIImpl @Inject constructor(
    ): LiveData<ResultSupreme<List<FusedHome>>> {

        val list = mutableListOf<FusedHome>()
        var resultGplay: FusedHomeDeferred? = null
        var resultOpenSource: FusedHomeDeferred? = null
        var resultPWA: FusedHomeDeferred? = null

        return liveData {
            coroutineScope {

                if (preferenceManagerModule.isGplaySelected()) {
                loadHomeData(list, Source.GPLAY, authData, this)
                    resultGplay = async { loadHomeData(list, Source.GPLAY, authData) }
                }

                if (preferenceManagerModule.isOpenSourceSelected()) {
                loadHomeData(list, Source.OPEN, authData, this)
                    resultOpenSource = async { loadHomeData(list, Source.OPEN, authData) }
                }

                if (preferenceManagerModule.isPWASelected()) {
                loadHomeData(list, Source.PWA, authData, this)
                    resultPWA = async { loadHomeData(list, Source.PWA, authData) }
                }

                resultGplay?.await()?.let {
                    emit(it)
                }
                resultOpenSource?.await()?.let {
                    emit(it)
                }
                resultPWA?.await()?.let {
                    emit(it)
                }
            }
        }
    }
@@ -149,11 +169,9 @@ class FusedAPIImpl @Inject constructor(
        priorList: MutableList<FusedHome>,
        source: Source,
        authData: AuthData,
        scope: LiveDataScope<ResultSupreme<List<FusedHome>>>,
    ) {
    ): ResultSupreme<List<FusedHome>> {

        val apiStatus = when (source) {

            Source.GPLAY -> runCodeBlockWithTimeout({
                priorList.addAll(fetchGPlayHome(it ?: authData))
            })
@@ -180,8 +198,14 @@ class FusedAPIImpl @Inject constructor(
        }

        setHomeErrorMessage(apiStatus, source)

        scope.emit(ResultSupreme.create(apiStatus, priorList))
        priorList.sortByDescending {
            when (it.source) {
                APP_TYPE_OPEN -> 2
                APP_TYPE_PWA -> 1
                else -> 3
            }
        }
        return ResultSupreme.create(apiStatus, priorList)
    }

    private fun setHomeErrorMessage(apiStatus: ResultStatus, source: Source) {
+9 −6
Original line number Diff line number Diff line
@@ -99,14 +99,17 @@ abstract class TimeoutFragment(@LayoutRes layoutId: Int) : Fragment(layoutId) {
     * is disconnected and reconnected multiple times.
     */
    private fun LiveData<Boolean>.loadDataOnce(lifecycleOwner: LifecycleOwner, observer: Observer<Boolean>) {
        observe(lifecycleOwner, object : Observer<Boolean> {
        observe(
            lifecycleOwner,
            object : Observer<Boolean> {
                override fun onChanged(t: Boolean) {
                    observer.onChanged(t)
                    if (t) {
                        removeObserver(this)
                    }
                }
        })
            }
        )
    }

    /**