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

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

App Lounge: strategy changed of showing progress in homepage

parent 78f87b83
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.widget.ImageView
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import androidx.navigation.findNavController
import androidx.recyclerview.widget.LinearLayoutManager
import dagger.hilt.android.AndroidEntryPoint
+9 −40
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
package foundation.e.apps.home.model

import android.graphics.Color
import android.util.Log
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.ImageView
@@ -70,7 +71,12 @@ class HomeChildRVAdapter(
            lifecycleRegistry.currentState = Lifecycle.State.INITIALIZED
        }

        fun onCreated() {
            lifecycleRegistry.currentState = Lifecycle.State.CREATED
        }

        fun onAppear() {
            lifecycleRegistry.currentState = Lifecycle.State.STARTED
            lifecycleRegistry.currentState = Lifecycle.State.RESUMED
        }

@@ -83,38 +89,15 @@ class HomeChildRVAdapter(
        }
    }

    override fun onViewAttachedToWindow(holder: HomeChildRVAdapter.ViewHolder) {
        super.onViewAttachedToWindow(holder)
        holder.onAppear()
    }

    override fun onViewDetachedFromWindow(holder: HomeChildRVAdapter.ViewHolder) {
        holder.onDisappear()
        super.onViewDetachedFromWindow(holder)
    }

    override fun onDetachedFromRecyclerView(recyclerView: RecyclerView) {
        for (i in 0..recyclerView.childCount) {
            val view = recyclerView.getChildAt(i)
            if (view != null) {
                val holder = recyclerView.getChildViewHolder(view)
                holder?.let {
                    appProgressViewModel.downloadProgress.removeObservers(holder as LifecycleOwner)
                    (holder as HomeChildRVAdapter.ViewHolder).onDisappear()
                }
            }
        }
        super.onDetachedFromRecyclerView(recyclerView)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        return ViewHolder(
        val viewHolder = ViewHolder(
            HomeChildListItemBinding.inflate(
                LayoutInflater.from(parent.context),
                parent,
                false
            )
        )
        return viewHolder
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
@@ -141,9 +124,9 @@ class HomeChildRVAdapter(
                )
                holder.itemView.findNavController().navigate(action)
            }

            when (homeApp.status) {
                Status.INSTALLED -> {
                    appProgressViewModel.downloadProgress.removeObservers(holder)
                    installButton.apply {
                        isEnabled = true
                        text = context.getString(R.string.open)
@@ -158,7 +141,6 @@ class HomeChildRVAdapter(
                    }
                }
                Status.UPDATABLE -> {
                    appProgressViewModel.downloadProgress.removeObservers(holder)
                    installButton.apply {
                        text = context.getString(R.string.update)
                        setTextColor(Color.WHITE)
@@ -172,7 +154,6 @@ class HomeChildRVAdapter(
                    }
                }
                Status.UNAVAILABLE -> {
                    appProgressViewModel.downloadProgress.removeObservers(holder)
                    installButton.apply {
                        text = context.getString(R.string.install)
                        setTextColor(context.getColor(R.color.colorAccent))
@@ -198,22 +179,12 @@ class HomeChildRVAdapter(
                        strokeColor =
                            ContextCompat.getColorStateList(view.context, R.color.colorAccent)

                        appProgressViewModel.downloadProgress.observe(holder) {
                            appProgressViewModel.viewModelScope.launch {
                                val progress = appProgressViewModel.calculateProgress(homeApp, it)
                                if (progress.second > 0 && progress.second <= progress.first) {
                                    text = "${((progress.second / progress.first.toDouble()) * 100).toInt()}%"
                                }
                            }
                        }

                        setOnClickListener {
                            cancelDownload(homeApp)
                        }
                    }
                }
                Status.INSTALLING, Status.UNINSTALLING -> {
                    appProgressViewModel.downloadProgress.removeObservers(holder)
                    installButton.apply {
                        isEnabled = false
                        setTextColor(context.getColor(R.color.light_grey))
@@ -226,7 +197,6 @@ class HomeChildRVAdapter(
                    }
                }
                Status.BLOCKED -> {
                    appProgressViewModel.downloadProgress.removeObservers(holder)
                    installButton.setOnClickListener {
                        val errorMsg = when (user) {
                            User.ANONYMOUS,
@@ -239,7 +209,6 @@ class HomeChildRVAdapter(
                    }
                }
                Status.INSTALLATION_ISSUE -> {
                    appProgressViewModel.downloadProgress.removeObservers(holder)
                    installButton.apply {
                        text = view.context.getString(R.string.retry)
                        setTextColor(context.getColor(R.color.colorAccent))
+26 −1
Original line number Diff line number Diff line
@@ -18,9 +18,11 @@

package foundation.e.apps.home.model

import android.util.Log
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.viewModelScope
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
@@ -32,7 +34,9 @@ import foundation.e.apps.api.fused.data.FusedHome
import foundation.e.apps.databinding.HomeParentListItemBinding
import foundation.e.apps.manager.database.fusedDownload.FusedDownload
import foundation.e.apps.manager.pkg.PkgManagerModule
import foundation.e.apps.utils.enums.Status
import foundation.e.apps.utils.enums.User
import kotlinx.coroutines.launch

class HomeParentRVAdapter(
    private val fusedAPIInterface: FusedAPIInterface,
@@ -56,7 +60,8 @@ class HomeParentRVAdapter(

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val fusedHome = getItem(position)
        val homeChildRVAdapter = HomeChildRVAdapter(fusedAPIInterface, pkgManagerModule, user, appProgressViewModel)
        val homeChildRVAdapter =
            HomeChildRVAdapter(fusedAPIInterface, pkgManagerModule, user, appProgressViewModel)
        homeChildRVAdapter.setData(fusedHome.list)

        holder.binding.titleTV.text = fusedHome.title
@@ -71,6 +76,26 @@ class HomeParentRVAdapter(
                )
            setRecycledViewPool(viewPool)
        }

        appProgressViewModel.downloadProgress.observe(lifecycleOwner) {
            val childRV = holder.binding.childRV
            val adapter = childRV.adapter as HomeChildRVAdapter
            appProgressViewModel.viewModelScope.launch {
                adapter.currentList.forEach { fusedApp ->
                    if(fusedApp.status == Status.DOWNLOADING) {
                        val progress = appProgressViewModel.calculateProgress(fusedApp, it)
                        val downloadProgress =
                            ((progress.second / progress.first.toDouble()) * 100).toInt()
                        Log.d("HomeParentAdapter", "download progress of ===> ${fusedApp.name} : $downloadProgress")
                        val viewHolder = childRV.findViewHolderForAdapterPosition(adapter.currentList.indexOf(fusedApp))
                        viewHolder?.let {
                            (viewHolder as HomeChildRVAdapter.ViewHolder).binding.installButton.text = "$downloadProgress%"
                        }
                    }
                }

            }
        }
        observeAppInstall(fusedHome, homeChildRVAdapter)
    }

+0 −1
Original line number Diff line number Diff line
@@ -14,7 +14,6 @@ import javax.inject.Inject
import javax.inject.Singleton
import kotlin.coroutines.CoroutineContext

@Singleton
class DownloadProgressLD @Inject constructor(
    private val downloadManager: DownloadManager,
    private val downloadManagerQuery: DownloadManager.Query,