Loading app/src/main/java/foundation/e/apps/home/HomeFragment.kt +1 −0 Original line number Diff line number Diff line Loading @@ -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 Loading app/src/main/java/foundation/e/apps/home/model/HomeChildRVAdapter.kt +9 −40 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 } Loading @@ -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) { Loading @@ -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) Loading @@ -158,7 +141,6 @@ class HomeChildRVAdapter( } } Status.UPDATABLE -> { appProgressViewModel.downloadProgress.removeObservers(holder) installButton.apply { text = context.getString(R.string.update) setTextColor(Color.WHITE) Loading @@ -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)) Loading @@ -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)) Loading @@ -226,7 +197,6 @@ class HomeChildRVAdapter( } } Status.BLOCKED -> { appProgressViewModel.downloadProgress.removeObservers(holder) installButton.setOnClickListener { val errorMsg = when (user) { User.ANONYMOUS, Loading @@ -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)) Loading app/src/main/java/foundation/e/apps/home/model/HomeParentRVAdapter.kt +26 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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, Loading @@ -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 Loading @@ -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) } Loading app/src/main/java/foundation/e/apps/manager/download/data/DownloadProgressLD.kt +0 −1 Original line number Diff line number Diff line Loading @@ -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, Loading Loading
app/src/main/java/foundation/e/apps/home/HomeFragment.kt +1 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
app/src/main/java/foundation/e/apps/home/model/HomeChildRVAdapter.kt +9 −40 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 } Loading @@ -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) { Loading @@ -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) Loading @@ -158,7 +141,6 @@ class HomeChildRVAdapter( } } Status.UPDATABLE -> { appProgressViewModel.downloadProgress.removeObservers(holder) installButton.apply { text = context.getString(R.string.update) setTextColor(Color.WHITE) Loading @@ -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)) Loading @@ -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)) Loading @@ -226,7 +197,6 @@ class HomeChildRVAdapter( } } Status.BLOCKED -> { appProgressViewModel.downloadProgress.removeObservers(holder) installButton.setOnClickListener { val errorMsg = when (user) { User.ANONYMOUS, Loading @@ -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)) Loading
app/src/main/java/foundation/e/apps/home/model/HomeParentRVAdapter.kt +26 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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, Loading @@ -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 Loading @@ -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) } Loading
app/src/main/java/foundation/e/apps/manager/download/data/DownloadProgressLD.kt +0 −1 Original line number Diff line number Diff line Loading @@ -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, Loading