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

Commit b7279ded authored by Hasib Prince's avatar Hasib Prince
Browse files

refactor: homepage

parent c012a3d0
Loading
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -135,11 +135,6 @@ class FusedAPIRepository @Inject constructor(private val fusedAPIImpl: FusedApi)
        return fusedAPIImpl.getFusedAppInstallationStatus(fusedApp)
    }

    fun isHomeDataUpdated(
        newHomeData: List<FusedHome>,
        oldHomeData: List<FusedHome>
    ) = fusedAPIImpl.isHomeDataUpdated(newHomeData, oldHomeData)

    fun isAnyFusedAppUpdated(
        newFusedApps: List<FusedApp>,
        oldFusedApps: List<FusedApp>
+0 −8
Original line number Diff line number Diff line
@@ -141,14 +141,6 @@ interface FusedApi {
     */
    fun getFusedAppInstallationStatus(fusedApp: FusedApp): Status

    /**
     * @return true, if any change is found, otherwise false
     */
    fun isHomeDataUpdated(
        newHomeData: List<FusedHome>,
        oldHomeData: List<FusedHome>
    ): Boolean

    /**
     * @return returns true if there is changes in data, otherwise false
     */
+1 −41
Original line number Diff line number Diff line
@@ -34,7 +34,6 @@ import dagger.hilt.android.qualifiers.ApplicationContext
import foundation.e.apps.R
import foundation.e.apps.data.ResultSupreme
import foundation.e.apps.data.cleanapk.CleanApkDownloadInfoFetcher
import foundation.e.apps.data.cleanapk.CleanApkRetrofit
import foundation.e.apps.data.cleanapk.data.app.Application
import foundation.e.apps.data.cleanapk.data.categories.Categories
import foundation.e.apps.data.cleanapk.data.home.Home
@@ -59,9 +58,9 @@ import foundation.e.apps.data.fused.data.Ratings
import foundation.e.apps.data.fused.utils.CategoryType
import foundation.e.apps.data.fused.utils.CategoryUtils
import foundation.e.apps.data.fusedDownload.models.FusedDownload
import foundation.e.apps.data.playstore.PlayStoreRepository
import foundation.e.apps.data.handleNetworkResult
import foundation.e.apps.data.login.AuthObject
import foundation.e.apps.data.playstore.PlayStoreRepository
import foundation.e.apps.data.preference.PreferenceManagerModule
import foundation.e.apps.install.pkg.PWAManagerModule
import foundation.e.apps.install.pkg.PkgManagerModule
@@ -1285,45 +1284,6 @@ class FusedApiImpl @Inject constructor(
        return list
    }

    /**
     * @return true, if any change is found, otherwise false
     */
    override fun isHomeDataUpdated(
        newHomeData: List<FusedHome>,
        oldHomeData: List<FusedHome>
    ): Boolean {
        if (newHomeData.size != oldHomeData.size) {
            return true
        }

        oldHomeData.forEach {
            val fusedHome = newHomeData[oldHomeData.indexOf(it)]
            if (!it.title.contentEquals(fusedHome.title) || areFusedAppsUpdated(it, fusedHome)) {
                return true
            }
        }
        return false
    }

    private fun areFusedAppsUpdated(
        oldFusedHome: FusedHome,
        newFusedHome: FusedHome,
    ): Boolean {
        val fusedAppDiffUtil = HomeChildFusedAppDiffUtil()
        if (oldFusedHome.list.size != newFusedHome.list.size) {
            return true
        }

        oldFusedHome.list.forEach { oldFusedApp ->
            val indexOfOldFusedApp = oldFusedHome.list.indexOf(oldFusedApp)
            val fusedApp = newFusedHome.list[indexOfOldFusedApp]
            if (!fusedAppDiffUtil.areContentsTheSame(oldFusedApp, fusedApp)) {
                return true
            }
        }
        return false
    }

    /**
     * @return returns true if there is changes in data, otherwise false
     */
+0 −10
Original line number Diff line number Diff line
@@ -94,10 +94,6 @@ class HomeFragment : TimeoutFragment(R.layout.fragment_home), FusedAPIInterface
                return@observe
            }

            if (!isHomeDataUpdated(it)) {
                return@observe
            }

            homeParentRVAdapter?.setData(it.data!!)
        }
    }
@@ -140,12 +136,6 @@ class HomeFragment : TimeoutFragment(R.layout.fragment_home), FusedAPIInterface
        ).show(childFragmentManager, "HomeFragment")
    }

    private fun isHomeDataUpdated(homeScreenResult: ResultSupreme<List<FusedHome>>) =
        homeParentRVAdapter?.currentList?.isEmpty() == true || homeViewModel.isHomeDataUpdated(
            homeScreenResult.data!!,
            homeParentRVAdapter?.currentList as List<FusedHome>
        )

    override fun onTimeout(
        exception: Exception,
        predefinedDialog: AlertDialog.Builder
+51 −6
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@

package foundation.e.apps.ui.home

import androidx.annotation.VisibleForTesting
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
@@ -30,6 +31,7 @@ import foundation.e.apps.data.fused.data.FusedHome
import foundation.e.apps.data.login.AuthObject
import foundation.e.apps.data.login.exceptions.CleanApkException
import foundation.e.apps.data.login.exceptions.GPlayException
import foundation.e.apps.ui.home.model.HomeChildFusedAppDiffUtil
import foundation.e.apps.ui.parentFragment.LoadingViewModel
import kotlinx.coroutines.launch
import javax.inject.Inject
@@ -47,6 +49,8 @@ class HomeViewModel @Inject constructor(
     */
    var homeScreenData: MutableLiveData<ResultSupreme<List<FusedHome>>> = MutableLiveData()

    var currentHomes: List<FusedHome>? = null

    fun loadData(
        authObjectList: List<AuthObject>,
        lifecycleOwner: LifecycleOwner,
@@ -72,9 +76,17 @@ class HomeViewModel @Inject constructor(
    ) {
        viewModelScope.launch {
            fusedAPIRepository.getHomeScreenData(authData).observe(lifecycleOwner) {
                homeScreenData.postValue(it)

                if (it.isSuccess()) return@observe
                if (it.isSuccess() && !hasAnyChange(it.data!!)) {
                    this@HomeViewModel.currentHomes = it.data
                    homeScreenData.postValue(ResultSupreme.Error("No change is found!"))
                    return@observe
                }

                homeScreenData.postValue(it)
                if (it.isSuccess()) {
                    return@observe
                }

                val exception =
                    if (authData.aasToken.isNotBlank() || authData.authToken.isNotBlank())
@@ -93,10 +105,43 @@ class HomeViewModel @Inject constructor(
        }
    }

    fun isHomeDataUpdated(
        newHomeData: List<FusedHome>,
        oldHomeData: List<FusedHome>
    ) = fusedAPIRepository.isHomeDataUpdated(newHomeData, oldHomeData)
    @VisibleForTesting
    fun hasAnyChange(
        newHomes: List<FusedHome>,
    ) = currentHomes.isNullOrEmpty() || newHomes.size != currentHomes!!.size || compareWithNewData(newHomes)

    private fun compareWithNewData(newHomes: List<FusedHome>): Boolean {
        currentHomes!!.forEach {
            val fusedHome = newHomes[currentHomes!!.indexOf(it)]
            if (!it.title.contentEquals(fusedHome.title) || areFusedAppsUpdated(it, fusedHome)) {
                return true
            }
        }

        return false
    }

    private fun areFusedAppsUpdated(
        oldHome: FusedHome,
        newHome: FusedHome,
    ) = oldHome.list.size != newHome.list.size || hasAppListsAnyChange(oldHome, newHome)

    private fun hasAppListsAnyChange(
        oldHome: FusedHome,
        newHome: FusedHome,
    ): Boolean {
        val fusedAppDiffUtil = HomeChildFusedAppDiffUtil()

        oldHome.list.forEach { oldFusedApp ->
            val indexOfOldFusedApp = oldHome.list.indexOf(oldFusedApp)
            val fusedApp = newHome.list[indexOfOldFusedApp]
            if (!fusedAppDiffUtil.areContentsTheSame(oldFusedApp, fusedApp)) {
                return true
            }
        }

        return false
    }

    fun isAnyAppInstallStatusChanged(currentList: List<FusedHome>?): Boolean {
        if (currentList == null) {
Loading