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

Commit fc24e261 authored by Aayush Gupta's avatar Aayush Gupta
Browse files

App Lounge: Support multiple apk installation

parent a9504376
Loading
Loading
Loading
Loading
+16 −6
Original line number Diff line number Diff line
@@ -120,18 +120,28 @@ class MainActivity : AppCompatActivity() {
        }

        // Observe and handle downloads
        viewModel.downloadList.observe(this) {
            val installInProgress = it.any { app ->
                app.status == Status.DOWNLOADING || app.status == Status.INSTALLING
        viewModel.downloadList.observe(this) { list ->
            val shouldDownload = list.any {
                it.status == Status.INSTALLING || it.status == Status.DOWNLOADING
            }
            if (!installInProgress && it.isNotEmpty()) {
                for (item in it) {
            if (!shouldDownload && list.isNotEmpty()) {
                for (item in list) {
                    if (item.status == Status.QUEUED) {
                        viewModel.downloadAndInstallApp(item)
                        viewModel.downloadApp(item)
                        break
                    }
                }
            }
            list.forEach { app ->
                if (app.status == Status.INSTALLING && !viewModel.installInProgress) {
                    if (app.downloadIdMap.all { it.value }) {
                        viewModel.installInProgress = true
                        viewModel.installApp(app)
                    }
                } else if (app.status == Status.INSTALLED) {
                    viewModel.installInProgress = false
                }
            }
        }
    }
}
+28 −20
Original line number Diff line number Diff line
@@ -60,8 +60,8 @@ class MainActivityViewModel @Inject constructor(
    var authRequestRunning = false

    // Downloads
    val downloadList = fusedManagerRepository.getDownloadList()
    var isInstallInProgress = false
    val downloadList = fusedManagerRepository.getDownloadLiveList()
    var installInProgress = false

    /*
     * Authentication related functions
@@ -108,17 +108,20 @@ class MainActivityViewModel @Inject constructor(
     * Download and cancellation functions
     */

    fun downloadAndInstallApp(fusedDownload: FusedDownload) {
        isInstallInProgress = true
    fun downloadApp(fusedDownload: FusedDownload) {
        viewModelScope.launch {
            fusedManagerRepository.downloadAndInstallApp(fusedDownload)
            fusedManagerRepository.downloadApp(fusedDownload)
        }
    }

    fun installApp(fusedDownload: FusedDownload) {
        fusedManagerRepository.installApp(fusedDownload)
    }

    fun getApplication(app: FusedApp, imageView: ImageView?) {
        viewModelScope.launch {
            val appIcon = imageView?.let { getImageBase64(it) } ?: ""
            val downloadLink = getAppDownloadLink(app)
            val downloadList = getAppDownloadLink(app).toMutableList()

            val fusedDownload = FusedDownload(
                app._id,
@@ -126,8 +129,8 @@ class MainActivityViewModel @Inject constructor(
                app.status,
                app.name,
                app.package_name,
                downloadLink,
                0,
                downloadList,
                mutableMapOf(),
                app.status,
                app.type,
                appIcon
@@ -138,15 +141,19 @@ class MainActivityViewModel @Inject constructor(

    fun cancelDownload(app: FusedApp) {
        viewModelScope.launch {
            fusedManagerRepository.cancelDownload(app.package_name)
            val fusedDownload =
                fusedManagerRepository.getFusedDownload(packageName = app.package_name)
            fusedManagerRepository.cancelDownload(fusedDownload)
        }
    }

    private suspend fun getAppDownloadLink(app: FusedApp): String {
    private suspend fun getAppDownloadLink(app: FusedApp): List<String> {
        val downloadList = mutableListOf<String>()
        authData.value?.let {
            return if (app.type == Type.PWA) {
                app.url
            if (app.type == Type.PWA) {
                downloadList.add(app.url)
            } else {
                downloadList.addAll(
                    fusedAPIRepository.getDownloadLink(
                        app._id,
                        app.package_name,
@@ -155,9 +162,10 @@ class MainActivityViewModel @Inject constructor(
                        it,
                        app.origin
                    )
                )
            }
        }
        return String()
        return downloadList
    }

    private fun getImageBase64(imageView: ImageView): String {
+10 −5
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import com.aurora.gplayapi.data.models.App
import com.aurora.gplayapi.data.models.Artwork
import com.aurora.gplayapi.data.models.AuthData
import com.aurora.gplayapi.data.models.Category
import com.aurora.gplayapi.data.models.File
import com.aurora.gplayapi.helpers.TopChartsHelper
import dagger.hilt.android.qualifiers.ApplicationContext
import foundation.e.apps.R
@@ -158,12 +159,12 @@ class FusedAPIImpl @Inject constructor(
        offerType: Int,
        authData: AuthData,
        origin: Origin
    ): String {
        var downloadLink = String()
    ): List<String> {
        val list = mutableListOf<String>()
        when (origin) {
            Origin.CLEANAPK -> {
                val downloadInfo = cleanAPKRepository.getDownloadInfo(id).body()
                downloadInfo?.download_data?.download_link?.let { downloadLink = it }
                downloadInfo?.download_data?.download_link?.let { list.add(it) }
            }
            Origin.GPLAY -> {
                val downloadList = gPlayAPIRepository.getDownloadInfo(
@@ -173,12 +174,16 @@ class FusedAPIImpl @Inject constructor(
                    authData
                )
                // TODO: DEAL WITH MULTIPLE PACKAGES
                downloadLink = downloadList[0].url
                downloadList.forEach {
                    if (it.type == File.FileType.BASE || it.type == File.FileType.SPLIT) {
                        list.add(it.url)
                    }
                }
            }
            Origin.GITLAB -> {
            }
        }
        return downloadLink
        return list
    }

    suspend fun listApps(category: String, browseUrl: String, authData: AuthData): List<FusedApp>? {
+1 −1
Original line number Diff line number Diff line
@@ -64,7 +64,7 @@ class FusedAPIRepository @Inject constructor(
        offerType: Int,
        authData: AuthData,
        origin: Origin
    ): String {
    ): List<String> {
        return fusedAPIImpl.getDownloadLink(
            id,
            packageName,
+3 −7
Original line number Diff line number Diff line
@@ -13,16 +13,12 @@ class DatabaseRepository @Inject constructor(
        return fusedDatabase.fusedDao().addDownload(fusedDownload)
    }

    fun getDownloadList(): LiveData<List<FusedDownload>> {
    suspend fun getDownloadList(): List<FusedDownload> {
        return fusedDatabase.fusedDao().getDownloadList()
    }

    suspend fun getDownloadById(downloadId: Long): List<FusedDownload> {
        return fusedDatabase.fusedDao().getDownloadByID(downloadId)
    }

    suspend fun getDownloadByPkg(packageName: String): List<FusedDownload> {
        return fusedDatabase.fusedDao().getDownloadByPkg(packageName)
    fun getDownloadLiveList(): LiveData<List<FusedDownload>> {
        return fusedDatabase.fusedDao().getDownloadLiveList()
    }

    suspend fun updateDownload(fusedDownload: FusedDownload) {
Loading