Loading app/src/main/java/foundation/e/apps/manager/pkg/PkgManagerModule.kt +0 −1 Original line number Diff line number Diff line Loading @@ -241,7 +241,6 @@ class PkgManagerModule @Inject constructor( fun isGplay(packageName: String): Boolean { val installerPackageName = packageManager.getInstallerPackageName(packageName) Timber.d("===> installer package name for $packageName : $installerPackageName") return installerPackageName?.contains(FAKE_STORE_PACKAGE_NAME) == true } Loading app/src/main/java/foundation/e/apps/updates/UpdatesFragment.kt +15 −1 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import androidx.navigation.findNavController import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.work.WorkInfo import androidx.work.WorkManager import com.aurora.gplayapi.data.models.AuthData import dagger.hilt.android.AndroidEntryPoint Loading Loading @@ -199,7 +200,20 @@ class UpdatesFragment : TimeoutFragment(R.layout.fragment_updates), FusedAPIInte showLoadingUI() updatesViewModel.getUpdates(authData) binding.button.setOnClickListener { UpdatesWorkManager.startUpdateAllWork(requireContext().applicationContext) val id = UpdatesWorkManager.startUpdateAllWork(requireContext().applicationContext) WorkManager.getInstance(requireContext()) .getWorkInfosByTagLiveData(UpdatesWorkManager.UPDATES_WORK_NAME) .observe(viewLifecycleOwner) { val errorStates = listOf( WorkInfo.State.FAILED, WorkInfo.State.BLOCKED, WorkInfo.State.CANCELLED ) if (!it.isNullOrEmpty() && errorStates.contains(it.last().state)) { binding.button.isEnabled = true } } binding.button.isEnabled = false } } Loading app/src/main/java/foundation/e/apps/updates/UpdatesNotifier.kt +11 −7 Original line number Diff line number Diff line Loading @@ -29,13 +29,11 @@ import androidx.core.app.NotificationManagerCompat import foundation.e.apps.MainActivity import foundation.e.apps.R class UpdatesNotifier { companion object { object UpdatesNotifier { const val UPDATES_NOTIFICATION_CLICK_EXTRA = "updates_notification_click_extra" private const val UPDATES_NOTIFICATION_ID = 76 private const val UPDATES_NOTIFICATION_CHANNEL_ID = "updates_notification" private const val UPDATES_NOTIFICATION_CHANNEL_TITLE = "App updates" } fun getNotification( context: Context, Loading Loading @@ -133,4 +131,10 @@ class UpdatesNotifier { ) } } fun cancelNotification(context: Context) { val notificationManager: NotificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManager.cancel(UPDATES_NOTIFICATION_ID) } } app/src/main/java/foundation/e/apps/updates/manager/UpdatesManagerRepository.kt +2 −2 Original line number Diff line number Diff line Loading @@ -28,8 +28,8 @@ class UpdatesManagerRepository @Inject constructor( private val updatesManagerImpl: UpdatesManagerImpl ) { suspend fun getUpdates(authData: AuthData, isFromUpdateProcess: Boolean = false): Pair<List<FusedApp>, ResultStatus> { if (isFromUpdateProcess && MemoryDao.hasAnyAppsForUpdate()) { suspend fun getUpdates(authData: AuthData): Pair<List<FusedApp>, ResultStatus> { if (MemoryDao.hasAnyAppsForUpdate()) { return Pair(MemoryDao.appsAwaitingForUpdate, ResultStatus.OK) } return updatesManagerImpl.getUpdates(authData).run { Loading app/src/main/java/foundation/e/apps/updates/manager/UpdatesWorkManager.kt +6 −1 Original line number Diff line number Diff line Loading @@ -27,18 +27,21 @@ import androidx.work.NetworkType import androidx.work.OneTimeWorkRequest import androidx.work.PeriodicWorkRequest import androidx.work.WorkManager import java.util.UUID import java.util.concurrent.TimeUnit object UpdatesWorkManager { const val UPDATES_WORK_NAME = "updates_work" private const val TAG = "UpdatesManager" fun startUpdateAllWork(context: Context) { fun startUpdateAllWork(context: Context): UUID { val oneTimeWorkRequest = buildOneTimeWorkRequest() WorkManager.getInstance(context).enqueueUniqueWork( UPDATES_WORK_NAME, ExistingWorkPolicy.REPLACE, buildOneTimeWorkRequest() ) return oneTimeWorkRequest.id } private fun buildWorkerConstraints() = Constraints.Builder().apply { Loading @@ -53,12 +56,14 @@ object UpdatesWorkManager { TimeUnit.MINUTES ).apply { setConstraints(buildWorkerConstraints()) addTag(TAG) }.build() } private fun buildOneTimeWorkRequest(): OneTimeWorkRequest { return OneTimeWorkRequest.Builder(UpdatesWorker::class.java).apply { setConstraints(buildWorkerConstraints()) addTag(UPDATES_WORK_NAME) }.setInputData(Data.Builder().putBoolean(UpdatesWorker.IS_AUTO_UPDATE, false).build()) .build() } Loading Loading
app/src/main/java/foundation/e/apps/manager/pkg/PkgManagerModule.kt +0 −1 Original line number Diff line number Diff line Loading @@ -241,7 +241,6 @@ class PkgManagerModule @Inject constructor( fun isGplay(packageName: String): Boolean { val installerPackageName = packageManager.getInstallerPackageName(packageName) Timber.d("===> installer package name for $packageName : $installerPackageName") return installerPackageName?.contains(FAKE_STORE_PACKAGE_NAME) == true } Loading
app/src/main/java/foundation/e/apps/updates/UpdatesFragment.kt +15 −1 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import androidx.navigation.findNavController import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.work.WorkInfo import androidx.work.WorkManager import com.aurora.gplayapi.data.models.AuthData import dagger.hilt.android.AndroidEntryPoint Loading Loading @@ -199,7 +200,20 @@ class UpdatesFragment : TimeoutFragment(R.layout.fragment_updates), FusedAPIInte showLoadingUI() updatesViewModel.getUpdates(authData) binding.button.setOnClickListener { UpdatesWorkManager.startUpdateAllWork(requireContext().applicationContext) val id = UpdatesWorkManager.startUpdateAllWork(requireContext().applicationContext) WorkManager.getInstance(requireContext()) .getWorkInfosByTagLiveData(UpdatesWorkManager.UPDATES_WORK_NAME) .observe(viewLifecycleOwner) { val errorStates = listOf( WorkInfo.State.FAILED, WorkInfo.State.BLOCKED, WorkInfo.State.CANCELLED ) if (!it.isNullOrEmpty() && errorStates.contains(it.last().state)) { binding.button.isEnabled = true } } binding.button.isEnabled = false } } Loading
app/src/main/java/foundation/e/apps/updates/UpdatesNotifier.kt +11 −7 Original line number Diff line number Diff line Loading @@ -29,13 +29,11 @@ import androidx.core.app.NotificationManagerCompat import foundation.e.apps.MainActivity import foundation.e.apps.R class UpdatesNotifier { companion object { object UpdatesNotifier { const val UPDATES_NOTIFICATION_CLICK_EXTRA = "updates_notification_click_extra" private const val UPDATES_NOTIFICATION_ID = 76 private const val UPDATES_NOTIFICATION_CHANNEL_ID = "updates_notification" private const val UPDATES_NOTIFICATION_CHANNEL_TITLE = "App updates" } fun getNotification( context: Context, Loading Loading @@ -133,4 +131,10 @@ class UpdatesNotifier { ) } } fun cancelNotification(context: Context) { val notificationManager: NotificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManager.cancel(UPDATES_NOTIFICATION_ID) } }
app/src/main/java/foundation/e/apps/updates/manager/UpdatesManagerRepository.kt +2 −2 Original line number Diff line number Diff line Loading @@ -28,8 +28,8 @@ class UpdatesManagerRepository @Inject constructor( private val updatesManagerImpl: UpdatesManagerImpl ) { suspend fun getUpdates(authData: AuthData, isFromUpdateProcess: Boolean = false): Pair<List<FusedApp>, ResultStatus> { if (isFromUpdateProcess && MemoryDao.hasAnyAppsForUpdate()) { suspend fun getUpdates(authData: AuthData): Pair<List<FusedApp>, ResultStatus> { if (MemoryDao.hasAnyAppsForUpdate()) { return Pair(MemoryDao.appsAwaitingForUpdate, ResultStatus.OK) } return updatesManagerImpl.getUpdates(authData).run { Loading
app/src/main/java/foundation/e/apps/updates/manager/UpdatesWorkManager.kt +6 −1 Original line number Diff line number Diff line Loading @@ -27,18 +27,21 @@ import androidx.work.NetworkType import androidx.work.OneTimeWorkRequest import androidx.work.PeriodicWorkRequest import androidx.work.WorkManager import java.util.UUID import java.util.concurrent.TimeUnit object UpdatesWorkManager { const val UPDATES_WORK_NAME = "updates_work" private const val TAG = "UpdatesManager" fun startUpdateAllWork(context: Context) { fun startUpdateAllWork(context: Context): UUID { val oneTimeWorkRequest = buildOneTimeWorkRequest() WorkManager.getInstance(context).enqueueUniqueWork( UPDATES_WORK_NAME, ExistingWorkPolicy.REPLACE, buildOneTimeWorkRequest() ) return oneTimeWorkRequest.id } private fun buildWorkerConstraints() = Constraints.Builder().apply { Loading @@ -53,12 +56,14 @@ object UpdatesWorkManager { TimeUnit.MINUTES ).apply { setConstraints(buildWorkerConstraints()) addTag(TAG) }.build() } private fun buildOneTimeWorkRequest(): OneTimeWorkRequest { return OneTimeWorkRequest.Builder(UpdatesWorker::class.java).apply { setConstraints(buildWorkerConstraints()) addTag(UPDATES_WORK_NAME) }.setInputData(Data.Builder().putBoolean(UpdatesWorker.IS_AUTO_UPDATE, false).build()) .build() } Loading