Loading app/detekt-baseline.xml +0 −5 Original line number Original line Diff line number Diff line Loading @@ -106,11 +106,6 @@ <ID>MaxLineLength:UpdatesViewModel.kt$UpdatesViewModel$return updatesList.value?.first?.any { it.status == Status.UPDATABLE || it.status == Status.INSTALLATION_ISSUE } == true</ID> <ID>MaxLineLength:UpdatesViewModel.kt$UpdatesViewModel$return updatesList.value?.first?.any { it.status == Status.UPDATABLE || it.status == Status.INSTALLATION_ISSUE } == true</ID> <ID>MaxLineLength:UpdatesWorker.kt$UpdatesWorker$applicationContext.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED</ID> <ID>MaxLineLength:UpdatesWorker.kt$UpdatesWorker$applicationContext.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED</ID> <ID>MayBeConst:EcloudApiInterface.kt$EcloudApiInterface.Companion$val BASE_URL = "https://eu.gtoken.ecloud.global/"</ID> <ID>MayBeConst:EcloudApiInterface.kt$EcloudApiInterface.Companion$val BASE_URL = "https://eu.gtoken.ecloud.global/"</ID> <ID>NestedBlockDepth:ApplicationApiImpl.kt$ApplicationApiImpl$private suspend fun generateCleanAPKHome(home: CleanApkHome, appType: String): List<Home></ID> <ID>NestedBlockDepth:DownloadManager.kt$DownloadManager$fun checkDownloadProgress( downloadId: Long, filePath: String = "", downloadCompleted: ((Boolean, String) -> Unit)? )</ID> <ID>NestedBlockDepth:PWAManagerModule.kt$PWAManagerModule$fun getPwaStatus(application: Application): Status</ID> <ID>NestedBlockDepth:PkgManagerBR.kt$PkgManagerBR$override fun onReceive(context: Context?, intent: Intent?)</ID> <ID>NestedBlockDepth:SettingsFragment.kt$SettingsFragment$override fun onViewCreated(view: View, savedInstanceState: Bundle?)</ID> <ID>PrintStackTrace:CommonUtilsModule.kt$CommonUtilsModule$e</ID> <ID>PrintStackTrace:CommonUtilsModule.kt$CommonUtilsModule$e</ID> <ID>PrintStackTrace:EcloudRepository.kt$EcloudRepository$e</ID> <ID>PrintStackTrace:EcloudRepository.kt$EcloudRepository$e</ID> <ID>PrintStackTrace:InstallWorkManager.kt$InstallWorkManager$e</ID> <ID>PrintStackTrace:InstallWorkManager.kt$InstallWorkManager$e</ID> Loading app/src/main/java/foundation/e/apps/data/DownloadManager.kt +32 −24 Original line number Original line Diff line number Diff line Loading @@ -123,9 +123,22 @@ class DownloadManager @Inject constructor( downloadCompleted: ((Boolean, String) -> Unit)? downloadCompleted: ((Boolean, String) -> Unit)? ) { ) { try { try { downloadManager.query(downloadManagerQuery.setFilterById(downloadId)) downloadManager.query(downloadManagerQuery.setFilterById(downloadId)).use { cursor -> .use { cursor -> if (cursor.moveToFirst()) { if (cursor.moveToFirst()) { handleDownloadStatus(cursor, downloadId, filePath, downloadCompleted) } } } catch (e: Exception) { Timber.e(e) } } private fun handleDownloadStatus( cursor: Cursor, downloadId: Long, filePath: String, downloadCompleted: ((Boolean, String) -> Unit)? ) { var status = var status = cursor.getInt(cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_STATUS)) cursor.getInt(cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_STATUS)) val totalSizeBytes = val totalSizeBytes = Loading @@ -147,11 +160,6 @@ class DownloadManager @Inject constructor( downloadCompleted?.invoke(true, filePath) downloadCompleted?.invoke(true, filePath) } } } } } } catch (e: Exception) { Timber.e(e) } } private fun tickerFlow( private fun tickerFlow( downloadId: Long, downloadId: Long, Loading app/src/main/java/foundation/e/apps/install/pkg/PWAManagerModule.kt +23 −14 Original line number Original line Diff line number Diff line Loading @@ -4,6 +4,7 @@ import android.content.ContentUris import android.content.ContentValues import android.content.ContentValues import android.content.Context import android.content.Context import android.content.Intent import android.content.Intent import android.database.Cursor import android.graphics.Bitmap import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.BitmapFactory import android.net.Uri import android.net.Uri Loading Loading @@ -62,26 +63,34 @@ class PWAManagerModule @Inject constructor( Uri.parse(PWA_PLAYER), Uri.parse(PWA_PLAYER), null, null, null, null null, null, null, null )?.let { cursor -> )?.let { cursor -> if (cursor.count > 0) { cursor.moveToFirst() if (cursor.moveToFirst()) { while (!cursor.isAfterLast) { do { if (isPwaInstalled(cursor, application)) { return Status.INSTALLED } cursor.moveToNext() } cursor.close() } return Status.UNAVAILABLE } private fun isPwaInstalled( cursor: Cursor, application: Application ): Boolean { try { try { val pwaItemUrl = cursor.getString(cursor.columnNames.indexOf("url")) val pwaItemUrl = cursor.getString(cursor.columnNames.indexOf("url")) val pwaItemDbId = cursor.getLong(cursor.columnNames.indexOf("_id")) val pwaItemDbId = cursor.getLong(cursor.columnNames.indexOf("_id")) if (application.url == pwaItemUrl) { if (application.url == pwaItemUrl) { application.pwaPlayerDbId = pwaItemDbId application.pwaPlayerDbId = pwaItemDbId return Status.INSTALLED return true } } } catch (e: Exception) { } catch (e: Exception) { e.printStackTrace() Timber.w(e) } } while (cursor.moveToNext()) } } } cursor.close() return false } return Status.UNAVAILABLE } } /** /** Loading app/src/main/java/foundation/e/apps/install/pkg/PkgManagerBR.kt +26 −15 Original line number Original line Diff line number Diff line Loading @@ -63,16 +63,29 @@ open class PkgManagerBR : BroadcastReceiver() { Timber.d("onReceive: $packageName $action $extra $status") Timber.d("onReceive: $packageName $action $extra $status") packages?.let { pkgList -> packages?.let { pkgList -> handlePackageList(pkgList, action, isUpdating, extra) } } } private fun handlePackageList( pkgList: Array<out String>, action: String, isUpdating: Boolean, extra: String? ) { pkgList.forEach { pkgName -> pkgList.forEach { pkgName -> when (action) { when (action) { Intent.ACTION_PACKAGE_ADDED -> { Intent.ACTION_PACKAGE_ADDED -> { updateDownloadStatus(pkgName) updateDownloadStatus(pkgName) removeFaultyAppByPackageName(pkgName) removeFaultyAppByPackageName(pkgName) } } Intent.ACTION_PACKAGE_REMOVED -> { Intent.ACTION_PACKAGE_REMOVED -> { if (!isUpdating) deleteDownload(pkgName) if (!isUpdating) deleteDownload(pkgName) removeFaultyAppByPackageName(pkgName) removeFaultyAppByPackageName(pkgName) } } PkgManagerModule.ERROR_PACKAGE_INSTALL -> { PkgManagerModule.ERROR_PACKAGE_INSTALL -> { Timber.e("Installation failed due to error: $extra") Timber.e("Installation failed due to error: $extra") updateInstallationIssue(pkgName) updateInstallationIssue(pkgName) Loading @@ -80,8 +93,6 @@ open class PkgManagerBR : BroadcastReceiver() { } } } } } } } } private fun removeFaultyAppByPackageName(pkgName: String) { private fun removeFaultyAppByPackageName(pkgName: String) { coroutineScope.launch { coroutineScope.launch { Loading app/src/main/java/foundation/e/apps/ui/settings/SettingsFragment.kt +24 −17 Original line number Original line Diff line number Diff line Loading @@ -33,6 +33,7 @@ import androidx.preference.Preference.OnPreferenceChangeListener import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat import androidx.work.ExistingPeriodicWorkPolicy import androidx.work.ExistingPeriodicWorkPolicy import coil.load import coil.load import com.aurora.gplayapi.data.models.AuthData import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar import com.google.gson.Gson import com.google.gson.Gson import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint Loading Loading @@ -166,23 +167,7 @@ class SettingsFragment : PreferenceFragmentCompat() { mainActivityViewModel.gPlayAuthData.let { authData -> mainActivityViewModel.gPlayAuthData.let { authData -> mainActivityViewModel.getUser().name.let { user -> mainActivityViewModel.getUser().name.let { user -> when (user) { handleUser(user, authData) User.ANONYMOUS.name -> { binding.accountType.setText(R.string.user_anonymous) binding.email.isVisible = false } User.GOOGLE.name -> { if (!authData.isAnonymous) { binding.accountType.text = authData.userProfile?.name binding.email.text = mainActivityViewModel.getUserEmail() binding.avatar.load(authData.userProfile?.artwork?.url) } } User.NO_GOOGLE.name -> { binding.accountType.setText(R.string.logged_out) binding.email.isVisible = false } } } } } } Loading Loading @@ -230,6 +215,28 @@ class SettingsFragment : PreferenceFragmentCompat() { } } } } private fun handleUser(user: String, authData: AuthData) { when (user) { User.ANONYMOUS.name -> { binding.accountType.setText(R.string.user_anonymous) binding.email.isVisible = false } User.GOOGLE.name -> { if (!authData.isAnonymous) { binding.accountType.text = authData.userProfile?.name binding.email.text = mainActivityViewModel.getUserEmail() binding.avatar.load(authData.userProfile?.artwork?.url) } } User.NO_GOOGLE.name -> { binding.accountType.setText(R.string.logged_out) binding.email.isVisible = false } } } private fun fetchCheckboxPreference(id: Int): CheckBoxPreference? { private fun fetchCheckboxPreference(id: Int): CheckBoxPreference? { return findPreference(getString(id)) return findPreference(getString(id)) } } Loading Loading
app/detekt-baseline.xml +0 −5 Original line number Original line Diff line number Diff line Loading @@ -106,11 +106,6 @@ <ID>MaxLineLength:UpdatesViewModel.kt$UpdatesViewModel$return updatesList.value?.first?.any { it.status == Status.UPDATABLE || it.status == Status.INSTALLATION_ISSUE } == true</ID> <ID>MaxLineLength:UpdatesViewModel.kt$UpdatesViewModel$return updatesList.value?.first?.any { it.status == Status.UPDATABLE || it.status == Status.INSTALLATION_ISSUE } == true</ID> <ID>MaxLineLength:UpdatesWorker.kt$UpdatesWorker$applicationContext.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED</ID> <ID>MaxLineLength:UpdatesWorker.kt$UpdatesWorker$applicationContext.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED</ID> <ID>MayBeConst:EcloudApiInterface.kt$EcloudApiInterface.Companion$val BASE_URL = "https://eu.gtoken.ecloud.global/"</ID> <ID>MayBeConst:EcloudApiInterface.kt$EcloudApiInterface.Companion$val BASE_URL = "https://eu.gtoken.ecloud.global/"</ID> <ID>NestedBlockDepth:ApplicationApiImpl.kt$ApplicationApiImpl$private suspend fun generateCleanAPKHome(home: CleanApkHome, appType: String): List<Home></ID> <ID>NestedBlockDepth:DownloadManager.kt$DownloadManager$fun checkDownloadProgress( downloadId: Long, filePath: String = "", downloadCompleted: ((Boolean, String) -> Unit)? )</ID> <ID>NestedBlockDepth:PWAManagerModule.kt$PWAManagerModule$fun getPwaStatus(application: Application): Status</ID> <ID>NestedBlockDepth:PkgManagerBR.kt$PkgManagerBR$override fun onReceive(context: Context?, intent: Intent?)</ID> <ID>NestedBlockDepth:SettingsFragment.kt$SettingsFragment$override fun onViewCreated(view: View, savedInstanceState: Bundle?)</ID> <ID>PrintStackTrace:CommonUtilsModule.kt$CommonUtilsModule$e</ID> <ID>PrintStackTrace:CommonUtilsModule.kt$CommonUtilsModule$e</ID> <ID>PrintStackTrace:EcloudRepository.kt$EcloudRepository$e</ID> <ID>PrintStackTrace:EcloudRepository.kt$EcloudRepository$e</ID> <ID>PrintStackTrace:InstallWorkManager.kt$InstallWorkManager$e</ID> <ID>PrintStackTrace:InstallWorkManager.kt$InstallWorkManager$e</ID> Loading
app/src/main/java/foundation/e/apps/data/DownloadManager.kt +32 −24 Original line number Original line Diff line number Diff line Loading @@ -123,9 +123,22 @@ class DownloadManager @Inject constructor( downloadCompleted: ((Boolean, String) -> Unit)? downloadCompleted: ((Boolean, String) -> Unit)? ) { ) { try { try { downloadManager.query(downloadManagerQuery.setFilterById(downloadId)) downloadManager.query(downloadManagerQuery.setFilterById(downloadId)).use { cursor -> .use { cursor -> if (cursor.moveToFirst()) { if (cursor.moveToFirst()) { handleDownloadStatus(cursor, downloadId, filePath, downloadCompleted) } } } catch (e: Exception) { Timber.e(e) } } private fun handleDownloadStatus( cursor: Cursor, downloadId: Long, filePath: String, downloadCompleted: ((Boolean, String) -> Unit)? ) { var status = var status = cursor.getInt(cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_STATUS)) cursor.getInt(cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_STATUS)) val totalSizeBytes = val totalSizeBytes = Loading @@ -147,11 +160,6 @@ class DownloadManager @Inject constructor( downloadCompleted?.invoke(true, filePath) downloadCompleted?.invoke(true, filePath) } } } } } } catch (e: Exception) { Timber.e(e) } } private fun tickerFlow( private fun tickerFlow( downloadId: Long, downloadId: Long, Loading
app/src/main/java/foundation/e/apps/install/pkg/PWAManagerModule.kt +23 −14 Original line number Original line Diff line number Diff line Loading @@ -4,6 +4,7 @@ import android.content.ContentUris import android.content.ContentValues import android.content.ContentValues import android.content.Context import android.content.Context import android.content.Intent import android.content.Intent import android.database.Cursor import android.graphics.Bitmap import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.BitmapFactory import android.net.Uri import android.net.Uri Loading Loading @@ -62,26 +63,34 @@ class PWAManagerModule @Inject constructor( Uri.parse(PWA_PLAYER), Uri.parse(PWA_PLAYER), null, null, null, null null, null, null, null )?.let { cursor -> )?.let { cursor -> if (cursor.count > 0) { cursor.moveToFirst() if (cursor.moveToFirst()) { while (!cursor.isAfterLast) { do { if (isPwaInstalled(cursor, application)) { return Status.INSTALLED } cursor.moveToNext() } cursor.close() } return Status.UNAVAILABLE } private fun isPwaInstalled( cursor: Cursor, application: Application ): Boolean { try { try { val pwaItemUrl = cursor.getString(cursor.columnNames.indexOf("url")) val pwaItemUrl = cursor.getString(cursor.columnNames.indexOf("url")) val pwaItemDbId = cursor.getLong(cursor.columnNames.indexOf("_id")) val pwaItemDbId = cursor.getLong(cursor.columnNames.indexOf("_id")) if (application.url == pwaItemUrl) { if (application.url == pwaItemUrl) { application.pwaPlayerDbId = pwaItemDbId application.pwaPlayerDbId = pwaItemDbId return Status.INSTALLED return true } } } catch (e: Exception) { } catch (e: Exception) { e.printStackTrace() Timber.w(e) } } while (cursor.moveToNext()) } } } cursor.close() return false } return Status.UNAVAILABLE } } /** /** Loading
app/src/main/java/foundation/e/apps/install/pkg/PkgManagerBR.kt +26 −15 Original line number Original line Diff line number Diff line Loading @@ -63,16 +63,29 @@ open class PkgManagerBR : BroadcastReceiver() { Timber.d("onReceive: $packageName $action $extra $status") Timber.d("onReceive: $packageName $action $extra $status") packages?.let { pkgList -> packages?.let { pkgList -> handlePackageList(pkgList, action, isUpdating, extra) } } } private fun handlePackageList( pkgList: Array<out String>, action: String, isUpdating: Boolean, extra: String? ) { pkgList.forEach { pkgName -> pkgList.forEach { pkgName -> when (action) { when (action) { Intent.ACTION_PACKAGE_ADDED -> { Intent.ACTION_PACKAGE_ADDED -> { updateDownloadStatus(pkgName) updateDownloadStatus(pkgName) removeFaultyAppByPackageName(pkgName) removeFaultyAppByPackageName(pkgName) } } Intent.ACTION_PACKAGE_REMOVED -> { Intent.ACTION_PACKAGE_REMOVED -> { if (!isUpdating) deleteDownload(pkgName) if (!isUpdating) deleteDownload(pkgName) removeFaultyAppByPackageName(pkgName) removeFaultyAppByPackageName(pkgName) } } PkgManagerModule.ERROR_PACKAGE_INSTALL -> { PkgManagerModule.ERROR_PACKAGE_INSTALL -> { Timber.e("Installation failed due to error: $extra") Timber.e("Installation failed due to error: $extra") updateInstallationIssue(pkgName) updateInstallationIssue(pkgName) Loading @@ -80,8 +93,6 @@ open class PkgManagerBR : BroadcastReceiver() { } } } } } } } } private fun removeFaultyAppByPackageName(pkgName: String) { private fun removeFaultyAppByPackageName(pkgName: String) { coroutineScope.launch { coroutineScope.launch { Loading
app/src/main/java/foundation/e/apps/ui/settings/SettingsFragment.kt +24 −17 Original line number Original line Diff line number Diff line Loading @@ -33,6 +33,7 @@ import androidx.preference.Preference.OnPreferenceChangeListener import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat import androidx.work.ExistingPeriodicWorkPolicy import androidx.work.ExistingPeriodicWorkPolicy import coil.load import coil.load import com.aurora.gplayapi.data.models.AuthData import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar import com.google.gson.Gson import com.google.gson.Gson import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint Loading Loading @@ -166,23 +167,7 @@ class SettingsFragment : PreferenceFragmentCompat() { mainActivityViewModel.gPlayAuthData.let { authData -> mainActivityViewModel.gPlayAuthData.let { authData -> mainActivityViewModel.getUser().name.let { user -> mainActivityViewModel.getUser().name.let { user -> when (user) { handleUser(user, authData) User.ANONYMOUS.name -> { binding.accountType.setText(R.string.user_anonymous) binding.email.isVisible = false } User.GOOGLE.name -> { if (!authData.isAnonymous) { binding.accountType.text = authData.userProfile?.name binding.email.text = mainActivityViewModel.getUserEmail() binding.avatar.load(authData.userProfile?.artwork?.url) } } User.NO_GOOGLE.name -> { binding.accountType.setText(R.string.logged_out) binding.email.isVisible = false } } } } } } Loading Loading @@ -230,6 +215,28 @@ class SettingsFragment : PreferenceFragmentCompat() { } } } } private fun handleUser(user: String, authData: AuthData) { when (user) { User.ANONYMOUS.name -> { binding.accountType.setText(R.string.user_anonymous) binding.email.isVisible = false } User.GOOGLE.name -> { if (!authData.isAnonymous) { binding.accountType.text = authData.userProfile?.name binding.email.text = mainActivityViewModel.getUserEmail() binding.avatar.load(authData.userProfile?.artwork?.url) } } User.NO_GOOGLE.name -> { binding.accountType.setText(R.string.logged_out) binding.email.isVisible = false } } } private fun fetchCheckboxPreference(id: Int): CheckBoxPreference? { private fun fetchCheckboxPreference(id: Int): CheckBoxPreference? { return findPreference(getString(id)) return findPreference(getString(id)) } } Loading