From c8d72279f509b1a7b61a0d18c74802f6dae8b471 Mon Sep 17 00:00:00 2001 From: Hasib Prince Date: Thu, 17 Aug 2023 11:51:53 +0600 Subject: [PATCH 1/4] test code for sentry --- .../main/java/foundation/e/apps/AppLoungeApplication.kt | 2 +- app/src/main/java/foundation/e/apps/ui/MainActivity.kt | 3 ++- .../foundation/e/apps/ui/setup/signin/SignInFragment.kt | 7 ++++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/AppLoungeApplication.kt b/app/src/main/java/foundation/e/apps/AppLoungeApplication.kt index 913c23a06..ff7a93a7a 100644 --- a/app/src/main/java/foundation/e/apps/AppLoungeApplication.kt +++ b/app/src/main/java/foundation/e/apps/AppLoungeApplication.kt @@ -71,7 +71,7 @@ class AppLoungeApplication : Application(), Configuration.Provider { } } - if (BuildConfig.DEBUG) { + if (false) { plant(Timber.DebugTree()) } else { // Allow enabling telemetry only for release builds. diff --git a/app/src/main/java/foundation/e/apps/ui/MainActivity.kt b/app/src/main/java/foundation/e/apps/ui/MainActivity.kt index 5d302687e..accc855c7 100644 --- a/app/src/main/java/foundation/e/apps/ui/MainActivity.kt +++ b/app/src/main/java/foundation/e/apps/ui/MainActivity.kt @@ -56,6 +56,7 @@ import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filter import kotlinx.coroutines.launch +import timber.log.Timber @AndroidEntryPoint class MainActivity : AppCompatActivity() { @@ -67,7 +68,7 @@ class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - + Timber.e("Main 7 ") binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) diff --git a/app/src/main/java/foundation/e/apps/ui/setup/signin/SignInFragment.kt b/app/src/main/java/foundation/e/apps/ui/setup/signin/SignInFragment.kt index 213e84148..04f050b4b 100644 --- a/app/src/main/java/foundation/e/apps/ui/setup/signin/SignInFragment.kt +++ b/app/src/main/java/foundation/e/apps/ui/setup/signin/SignInFragment.kt @@ -11,6 +11,9 @@ import foundation.e.apps.data.login.LoginViewModel import foundation.e.apps.databinding.FragmentSignInBinding import foundation.e.apps.di.CommonUtilsModule.safeNavigate import foundation.e.apps.utils.showGoogleSignInAlertDialog +import foundation.e.lib.telemetry.Telemetry +import timber.log.Timber +import java.lang.Exception @AndroidEntryPoint class SignInFragment : Fragment(R.layout.fragment_sign_in) { @@ -24,7 +27,9 @@ class SignInFragment : Fragment(R.layout.fragment_sign_in) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) _binding = FragmentSignInBinding.bind(view) - + Timber.e("Reporting sentry logs...") + Telemetry.reportMessage("As AS aS") + Telemetry.reportException(Exception("Huge Exception!")) binding.googleBT.setOnClickListener { context?.showGoogleSignInAlertDialog( { navigateToGoogleSignInFragment() }, -- GitLab From e75cf31b3ca83bdd287d2ae36fd3fbd5ff1511e8 Mon Sep 17 00:00:00 2001 From: Hasib Prince Date: Sat, 19 Aug 2023 19:55:23 +0600 Subject: [PATCH 2/4] Added messages for sentry --- app/build.gradle | 2 +- .../foundation/e/apps/data/DownloadManager.kt | 30 +++++++++++++++++-- .../install/download/DownloadManagerUtils.kt | 20 +++++++++---- .../e/apps/install/pkg/InstallerService.kt | 2 ++ .../e/apps/install/pkg/PkgManagerModule.kt | 2 ++ .../e/apps/install/updates/UpdatesWorker.kt | 5 ++++ .../workmanager/AppInstallProcessor.kt | 20 +++++++++---- 7 files changed, 65 insertions(+), 16 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ce11c6234..887ab94b6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -150,7 +150,7 @@ dependencies { // TODO: Add splitinstall-lib to a repo https://gitlab.e.foundation/e/os/backlog/-/issues/628 api files('libs/splitinstall-lib.jar') - implementation 'foundation.e.lib:telemetry:0.0.9-alpha' + implementation 'foundation.e.lib:telemetry:0.0.11-alpha' implementation 'foundation.e:gplayapi:3.0.1-2' implementation 'androidx.core:core-ktx:1.9.0' implementation 'androidx.appcompat:appcompat:1.6.1' diff --git a/app/src/main/java/foundation/e/apps/data/DownloadManager.kt b/app/src/main/java/foundation/e/apps/data/DownloadManager.kt index 1d54cdf9d..f88327454 100644 --- a/app/src/main/java/foundation/e/apps/data/DownloadManager.kt +++ b/app/src/main/java/foundation/e/apps/data/DownloadManager.kt @@ -24,6 +24,7 @@ import android.os.Environment import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.apps.OpenForTesting import foundation.e.apps.R +import foundation.e.lib.telemetry.Telemetry import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay @@ -167,19 +168,42 @@ class DownloadManager @Inject constructor( } private fun getDownloadStatus(downloadId: Long): Int { + var status: Int = -1 + var reason: Int = -1 try { downloadManager.query(downloadManagerQuery.setFilterById(downloadId)) .use { cursor -> if (cursor.moveToFirst()) { - val status = + status = cursor.getInt(cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_STATUS)) + reason = + cursor.getInt(cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_REASON)) Timber.d("Download Status: downloadId: $downloadId $status") - return status } } } catch (e: Exception) { Timber.e(e) } - return DownloadManager.STATUS_FAILED + + if (status != DownloadManager.STATUS_SUCCESSFUL) { + Timber.e("Download Issue: $downloadId status: $status reason: $reason") + } + return status + } + + fun getDownloadReason(downloadId: Long): Int { + var reason = -1 + try { + downloadManager.query(downloadManagerQuery.setFilterById(downloadId)) + .use { cursor -> + if (cursor.moveToFirst()) { + reason = + cursor.getInt(cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_REASON)) + } + } + } catch (e: Exception) { + Timber.e(e) + } + return reason } } diff --git a/app/src/main/java/foundation/e/apps/install/download/DownloadManagerUtils.kt b/app/src/main/java/foundation/e/apps/install/download/DownloadManagerUtils.kt index b6c1493ab..61c3fae7b 100644 --- a/app/src/main/java/foundation/e/apps/install/download/DownloadManagerUtils.kt +++ b/app/src/main/java/foundation/e/apps/install/download/DownloadManagerUtils.kt @@ -25,6 +25,7 @@ import foundation.e.apps.data.enums.Origin import foundation.e.apps.data.enums.Status import foundation.e.apps.data.fusedDownload.FusedManagerRepository import foundation.e.apps.data.fusedDownload.models.FusedDownload +import foundation.e.lib.telemetry.Telemetry import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.delay @@ -65,6 +66,13 @@ class DownloadManagerUtils @Inject constructor( if (downloadManager.hasDownloadFailed(downloadId)) { handleDownloadFailed(fusedDownload) + Telemetry.reportMessage( + "Download failed for ${fusedDownload.packageName}, reason: ${ + downloadManager.getDownloadReason( + downloadId + ) + }" + ) return@launch } @@ -86,7 +94,7 @@ class DownloadManagerUtils @Inject constructor( private suspend fun handleDownloadFailed(fusedDownload: FusedDownload) { fusedManagerRepository.installationIssue(fusedDownload) fusedManagerRepository.cancelDownload(fusedDownload) - Timber.i("===> Download failed: ${fusedDownload.name} ${fusedDownload.status}") + Timber.w("===> Download failed: ${fusedDownload.name} ${fusedDownload.status}") } private suspend fun validateDownload( @@ -94,16 +102,16 @@ class DownloadManagerUtils @Inject constructor( fusedDownload: FusedDownload, downloadId: Long ) = downloadManager.isDownloadSuccessful(downloadId) && - areAllFilesDownloaded( - numberOfDownloadedItems, - fusedDownload - ) && checkCleanApkSignatureOK(fusedDownload) + areAllFilesDownloaded( + numberOfDownloadedItems, + fusedDownload + ) && checkCleanApkSignatureOK(fusedDownload) private fun areAllFilesDownloaded( numberOfDownloadedItems: Int, fusedDownload: FusedDownload ) = numberOfDownloadedItems == fusedDownload.downloadIdMap.size && - numberOfDownloadedItems == fusedDownload.downloadURLList.size + numberOfDownloadedItems == fusedDownload.downloadURLList.size private suspend fun updateDownloadIdMap( fusedDownload: FusedDownload, diff --git a/app/src/main/java/foundation/e/apps/install/pkg/InstallerService.kt b/app/src/main/java/foundation/e/apps/install/pkg/InstallerService.kt index dcad5d9e2..7fe200655 100644 --- a/app/src/main/java/foundation/e/apps/install/pkg/InstallerService.kt +++ b/app/src/main/java/foundation/e/apps/install/pkg/InstallerService.kt @@ -28,6 +28,7 @@ import foundation.e.apps.data.fused.UpdatesDao import foundation.e.apps.data.fusedDownload.FusedManagerRepository import foundation.e.apps.utils.eventBus.AppEvent import foundation.e.apps.utils.eventBus.EventBus +import foundation.e.lib.telemetry.Telemetry import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.MainScope @@ -77,6 +78,7 @@ class InstallerService : Service() { return } + Telemetry.reportMessage("App install is failed for: $packageName status: $status extra: $extra") updateInstallationIssue(packageName ?: "") if (status == PackageInstaller.STATUS_FAILURE_CONFLICT && extra?.contains( INSTALL_FAILED_UPDATE_INCOMPATIBLE diff --git a/app/src/main/java/foundation/e/apps/install/pkg/PkgManagerModule.kt b/app/src/main/java/foundation/e/apps/install/pkg/PkgManagerModule.kt index 2afb071e9..b0f0f2385 100644 --- a/app/src/main/java/foundation/e/apps/install/pkg/PkgManagerModule.kt +++ b/app/src/main/java/foundation/e/apps/install/pkg/PkgManagerModule.kt @@ -36,6 +36,7 @@ import foundation.e.apps.data.enums.Status import foundation.e.apps.data.enums.Type import foundation.e.apps.data.fused.FusedApi import foundation.e.apps.data.fusedDownload.models.FusedDownload +import foundation.e.lib.telemetry.Telemetry import kotlinx.coroutines.DelicateCoroutinesApi import timber.log.Timber import java.io.File @@ -190,6 +191,7 @@ class PkgManagerModule @Inject constructor( session.commit(servicePendingIntent.intentSender) } catch (e: Exception) { Timber.e("$packageName: \n${e.stackTraceToString()}") + Telemetry.reportMessage("Initiating Install Failed for $packageName exception: ${e.localizedMessage}") val pendingIntent = PendingIntent.getBroadcast( context, sessionId, diff --git a/app/src/main/java/foundation/e/apps/install/updates/UpdatesWorker.kt b/app/src/main/java/foundation/e/apps/install/updates/UpdatesWorker.kt index d1b136736..762291892 100644 --- a/app/src/main/java/foundation/e/apps/install/updates/UpdatesWorker.kt +++ b/app/src/main/java/foundation/e/apps/install/updates/UpdatesWorker.kt @@ -27,6 +27,7 @@ import foundation.e.apps.data.updates.UpdatesManagerRepository import foundation.e.apps.install.workmanager.AppInstallProcessor import foundation.e.apps.utils.eventBus.AppEvent import foundation.e.apps.utils.eventBus.EventBus +import foundation.e.lib.telemetry.Telemetry import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.withContext @@ -126,6 +127,7 @@ class UpdatesWorker @AssistedInject constructor( * If user in UNAVAILABLE, don't do anything. */ Timber.w("User is not available! User is required during update!") + Telemetry.reportMessage("Update is aborted for unavailable user!") return } Timber.i("Updates found: ${appsNeededToUpdate.size}; $resultStatus") @@ -168,6 +170,9 @@ class UpdatesWorker @AssistedInject constructor( delay(DELAY_FOR_RETRY) checkForUpdates() } else { + val message = "Update is aborted after trying for $MAX_RETRY_COUNT times!" + Timber.w(message) + Telemetry.reportMessage(message) EventBus.invokeEvent(AppEvent.UpdateEvent(ResultSupreme.WorkError(ResultStatus.UNKNOWN))) } } diff --git a/app/src/main/java/foundation/e/apps/install/workmanager/AppInstallProcessor.kt b/app/src/main/java/foundation/e/apps/install/workmanager/AppInstallProcessor.kt index 604365df4..cefca9d52 100644 --- a/app/src/main/java/foundation/e/apps/install/workmanager/AppInstallProcessor.kt +++ b/app/src/main/java/foundation/e/apps/install/workmanager/AppInstallProcessor.kt @@ -41,6 +41,7 @@ import foundation.e.apps.install.updates.UpdatesNotifier import foundation.e.apps.utils.eventBus.AppEvent import foundation.e.apps.utils.eventBus.EventBus import foundation.e.apps.utils.getFormattedString +import foundation.e.lib.telemetry.Telemetry import kotlinx.coroutines.flow.transformWhile import timber.log.Timber import java.text.NumberFormat @@ -139,6 +140,8 @@ class AppInstallProcessor @Inject constructor( InstallWorkManager.enqueueWork(fusedDownload, isAnUpdate) } catch (e: Exception) { Timber.e(e) + Telemetry.reportMessage("Enqueuing App install work is failed for ${fusedDownload.packageName} exception: ${e.localizedMessage}") + fusedManagerRepository.installationIssue(fusedDownload) } } @@ -152,6 +155,7 @@ class AppInstallProcessor @Inject constructor( return false } catch (e: Exception) { Timber.e(e) + Telemetry.reportMessage("Updating download Urls failed for ${fusedDownload.packageName} exception: ${e.localizedMessage}") EventBus.invokeEvent( AppEvent.UpdateEvent( ResultSupreme.WorkError( @@ -216,7 +220,7 @@ class AppInstallProcessor @Inject constructor( fusedDownload?.let { this.isItUpdateWork = isItUpdateWork && - fusedManagerRepository.isFusedDownloadInstalled(fusedDownload) + fusedManagerRepository.isFusedDownloadInstalled(fusedDownload) if (!fusedDownload.isAppInstalling()) { Timber.d("!!! returned") @@ -240,6 +244,7 @@ class AppInstallProcessor @Inject constructor( } } catch (e: Exception) { Timber.e("doWork: Failed: ${e.stackTraceToString()}") + Telemetry.reportMessage("Install worker is failed for ${fusedDownload?.packageName} exception: ${e.localizedMessage}") fusedDownload?.let { fusedManagerRepository.cancelDownload(fusedDownload) } @@ -251,10 +256,10 @@ class AppInstallProcessor @Inject constructor( private fun areFilesDownloadedButNotInstalled(fusedDownload: FusedDownload) = fusedDownload.areFilesDownloaded() && ( - !fusedManagerRepository.isFusedDownloadInstalled( - fusedDownload - ) || fusedDownload.status == Status.INSTALLING - ) + !fusedManagerRepository.isFusedDownloadInstalled( + fusedDownload + ) || fusedDownload.status == Status.INSTALLING + ) private suspend fun checkUpdateWork( fusedDownload: FusedDownload? @@ -348,7 +353,10 @@ class AppInstallProcessor @Inject constructor( try { handleFusedDownloadStatus(download) } catch (e: Exception) { - Timber.e(TAG, "observeDownload: ", e) + val message = + "Handling install status is failed for ${download.packageName} exception: ${e.localizedMessage}" + Timber.e(e, message) + Telemetry.reportMessage(message) fusedManagerRepository.installationIssue(download) finishInstallation(download) } -- GitLab From 4acee27f16973fc74e540e2f5856f843397f6efb Mon Sep 17 00:00:00 2001 From: Hasib Prince Date: Sun, 20 Aug 2023 14:16:22 +0600 Subject: [PATCH 3/4] fixed: lint issues --- .../foundation/e/apps/AppLoungeApplication.kt | 2 +- .../foundation/e/apps/data/DownloadManager.kt | 1 - .../install/download/DownloadManagerUtils.kt | 17 +++++++---------- .../install/workmanager/AppInstallProcessor.kt | 10 +++++----- .../java/foundation/e/apps/ui/MainActivity.kt | 3 +-- .../e/apps/ui/setup/signin/SignInFragment.kt | 7 +------ 6 files changed, 15 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/AppLoungeApplication.kt b/app/src/main/java/foundation/e/apps/AppLoungeApplication.kt index ff7a93a7a..913c23a06 100644 --- a/app/src/main/java/foundation/e/apps/AppLoungeApplication.kt +++ b/app/src/main/java/foundation/e/apps/AppLoungeApplication.kt @@ -71,7 +71,7 @@ class AppLoungeApplication : Application(), Configuration.Provider { } } - if (false) { + if (BuildConfig.DEBUG) { plant(Timber.DebugTree()) } else { // Allow enabling telemetry only for release builds. diff --git a/app/src/main/java/foundation/e/apps/data/DownloadManager.kt b/app/src/main/java/foundation/e/apps/data/DownloadManager.kt index f88327454..bb9819152 100644 --- a/app/src/main/java/foundation/e/apps/data/DownloadManager.kt +++ b/app/src/main/java/foundation/e/apps/data/DownloadManager.kt @@ -24,7 +24,6 @@ import android.os.Environment import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.apps.OpenForTesting import foundation.e.apps.R -import foundation.e.lib.telemetry.Telemetry import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay diff --git a/app/src/main/java/foundation/e/apps/install/download/DownloadManagerUtils.kt b/app/src/main/java/foundation/e/apps/install/download/DownloadManagerUtils.kt index 61c3fae7b..5d7502124 100644 --- a/app/src/main/java/foundation/e/apps/install/download/DownloadManagerUtils.kt +++ b/app/src/main/java/foundation/e/apps/install/download/DownloadManagerUtils.kt @@ -67,11 +67,8 @@ class DownloadManagerUtils @Inject constructor( if (downloadManager.hasDownloadFailed(downloadId)) { handleDownloadFailed(fusedDownload) Telemetry.reportMessage( - "Download failed for ${fusedDownload.packageName}, reason: ${ - downloadManager.getDownloadReason( - downloadId - ) - }" + "Download failed for ${fusedDownload.packageName}, " + + "reason: ${downloadManager.getDownloadReason(downloadId)}" ) return@launch } @@ -102,16 +99,16 @@ class DownloadManagerUtils @Inject constructor( fusedDownload: FusedDownload, downloadId: Long ) = downloadManager.isDownloadSuccessful(downloadId) && - areAllFilesDownloaded( - numberOfDownloadedItems, - fusedDownload - ) && checkCleanApkSignatureOK(fusedDownload) + areAllFilesDownloaded( + numberOfDownloadedItems, + fusedDownload + ) && checkCleanApkSignatureOK(fusedDownload) private fun areAllFilesDownloaded( numberOfDownloadedItems: Int, fusedDownload: FusedDownload ) = numberOfDownloadedItems == fusedDownload.downloadIdMap.size && - numberOfDownloadedItems == fusedDownload.downloadURLList.size + numberOfDownloadedItems == fusedDownload.downloadURLList.size private suspend fun updateDownloadIdMap( fusedDownload: FusedDownload, diff --git a/app/src/main/java/foundation/e/apps/install/workmanager/AppInstallProcessor.kt b/app/src/main/java/foundation/e/apps/install/workmanager/AppInstallProcessor.kt index cefca9d52..e3c71276c 100644 --- a/app/src/main/java/foundation/e/apps/install/workmanager/AppInstallProcessor.kt +++ b/app/src/main/java/foundation/e/apps/install/workmanager/AppInstallProcessor.kt @@ -220,7 +220,7 @@ class AppInstallProcessor @Inject constructor( fusedDownload?.let { this.isItUpdateWork = isItUpdateWork && - fusedManagerRepository.isFusedDownloadInstalled(fusedDownload) + fusedManagerRepository.isFusedDownloadInstalled(fusedDownload) if (!fusedDownload.isAppInstalling()) { Timber.d("!!! returned") @@ -256,10 +256,10 @@ class AppInstallProcessor @Inject constructor( private fun areFilesDownloadedButNotInstalled(fusedDownload: FusedDownload) = fusedDownload.areFilesDownloaded() && ( - !fusedManagerRepository.isFusedDownloadInstalled( - fusedDownload - ) || fusedDownload.status == Status.INSTALLING - ) + !fusedManagerRepository.isFusedDownloadInstalled( + fusedDownload + ) || fusedDownload.status == Status.INSTALLING + ) private suspend fun checkUpdateWork( fusedDownload: FusedDownload? diff --git a/app/src/main/java/foundation/e/apps/ui/MainActivity.kt b/app/src/main/java/foundation/e/apps/ui/MainActivity.kt index accc855c7..5d302687e 100644 --- a/app/src/main/java/foundation/e/apps/ui/MainActivity.kt +++ b/app/src/main/java/foundation/e/apps/ui/MainActivity.kt @@ -56,7 +56,6 @@ import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filter import kotlinx.coroutines.launch -import timber.log.Timber @AndroidEntryPoint class MainActivity : AppCompatActivity() { @@ -68,7 +67,7 @@ class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - Timber.e("Main 7 ") + binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) diff --git a/app/src/main/java/foundation/e/apps/ui/setup/signin/SignInFragment.kt b/app/src/main/java/foundation/e/apps/ui/setup/signin/SignInFragment.kt index 04f050b4b..213e84148 100644 --- a/app/src/main/java/foundation/e/apps/ui/setup/signin/SignInFragment.kt +++ b/app/src/main/java/foundation/e/apps/ui/setup/signin/SignInFragment.kt @@ -11,9 +11,6 @@ import foundation.e.apps.data.login.LoginViewModel import foundation.e.apps.databinding.FragmentSignInBinding import foundation.e.apps.di.CommonUtilsModule.safeNavigate import foundation.e.apps.utils.showGoogleSignInAlertDialog -import foundation.e.lib.telemetry.Telemetry -import timber.log.Timber -import java.lang.Exception @AndroidEntryPoint class SignInFragment : Fragment(R.layout.fragment_sign_in) { @@ -27,9 +24,7 @@ class SignInFragment : Fragment(R.layout.fragment_sign_in) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) _binding = FragmentSignInBinding.bind(view) - Timber.e("Reporting sentry logs...") - Telemetry.reportMessage("As AS aS") - Telemetry.reportException(Exception("Huge Exception!")) + binding.googleBT.setOnClickListener { context?.showGoogleSignInAlertDialog( { navigateToGoogleSignInFragment() }, -- GitLab From 703b871b4d50c78488fe113808f5305d880f699e Mon Sep 17 00:00:00 2001 From: Hasib Prince Date: Tue, 22 Aug 2023 15:29:05 +0600 Subject: [PATCH 4/4] refactor: refactored telemetry reporting --- .../java/foundation/e/apps/data/DownloadManager.kt | 6 +++--- .../e/apps/data/blockedApps/BlockedAppRepository.kt | 4 +--- .../e/apps/install/download/DownloadManagerUtils.kt | 5 ++--- .../e/apps/install/pkg/InstallerService.kt | 3 +-- .../e/apps/install/pkg/PkgManagerModule.kt | 4 +--- .../e/apps/install/updates/UpdatesWorker.kt | 7 ++----- .../apps/install/workmanager/AppInstallProcessor.kt | 13 ++++--------- 7 files changed, 14 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/data/DownloadManager.kt b/app/src/main/java/foundation/e/apps/data/DownloadManager.kt index bb9819152..3806bfb8e 100644 --- a/app/src/main/java/foundation/e/apps/data/DownloadManager.kt +++ b/app/src/main/java/foundation/e/apps/data/DownloadManager.kt @@ -167,8 +167,8 @@ class DownloadManager @Inject constructor( } private fun getDownloadStatus(downloadId: Long): Int { - var status: Int = -1 - var reason: Int = -1 + var status = -1 + var reason = -1 try { downloadManager.query(downloadManagerQuery.setFilterById(downloadId)) .use { cursor -> @@ -190,7 +190,7 @@ class DownloadManager @Inject constructor( return status } - fun getDownloadReason(downloadId: Long): Int { + fun getDownloadFailureReason(downloadId: Long): Int { var reason = -1 try { downloadManager.query(downloadManagerQuery.setFilterById(downloadId)) diff --git a/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt b/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt index be1151dae..2814752a8 100644 --- a/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt +++ b/app/src/main/java/foundation/e/apps/data/blockedApps/BlockedAppRepository.kt @@ -20,7 +20,6 @@ package foundation.e.apps.data.blockedApps import com.google.gson.Gson import foundation.e.apps.data.DownloadManager import foundation.e.apps.data.fusedDownload.FileManager -import foundation.e.lib.telemetry.Telemetry import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import timber.log.Timber @@ -71,8 +70,7 @@ class BlockedAppRepository @Inject constructor( Timber.i("Blocked list file contents: $blockedAppInfoJson") gson.fromJson(blockedAppInfoJson, AppWarningInfo::class.java) } catch (exception: Exception) { - exception.printStackTrace() - Telemetry.reportException(exception) + Timber.e(exception.localizedMessage ?: "", exception) AppWarningInfo(listOf()) } } diff --git a/app/src/main/java/foundation/e/apps/install/download/DownloadManagerUtils.kt b/app/src/main/java/foundation/e/apps/install/download/DownloadManagerUtils.kt index 5d7502124..f263fc012 100644 --- a/app/src/main/java/foundation/e/apps/install/download/DownloadManagerUtils.kt +++ b/app/src/main/java/foundation/e/apps/install/download/DownloadManagerUtils.kt @@ -25,7 +25,6 @@ import foundation.e.apps.data.enums.Origin import foundation.e.apps.data.enums.Status import foundation.e.apps.data.fusedDownload.FusedManagerRepository import foundation.e.apps.data.fusedDownload.models.FusedDownload -import foundation.e.lib.telemetry.Telemetry import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.delay @@ -66,9 +65,9 @@ class DownloadManagerUtils @Inject constructor( if (downloadManager.hasDownloadFailed(downloadId)) { handleDownloadFailed(fusedDownload) - Telemetry.reportMessage( + Timber.e( "Download failed for ${fusedDownload.packageName}, " + - "reason: ${downloadManager.getDownloadReason(downloadId)}" + "reason: ${downloadManager.getDownloadFailureReason(downloadId)}" ) return@launch } diff --git a/app/src/main/java/foundation/e/apps/install/pkg/InstallerService.kt b/app/src/main/java/foundation/e/apps/install/pkg/InstallerService.kt index 7fe200655..d898c4e7a 100644 --- a/app/src/main/java/foundation/e/apps/install/pkg/InstallerService.kt +++ b/app/src/main/java/foundation/e/apps/install/pkg/InstallerService.kt @@ -28,7 +28,6 @@ import foundation.e.apps.data.fused.UpdatesDao import foundation.e.apps.data.fusedDownload.FusedManagerRepository import foundation.e.apps.utils.eventBus.AppEvent import foundation.e.apps.utils.eventBus.EventBus -import foundation.e.lib.telemetry.Telemetry import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.MainScope @@ -78,7 +77,7 @@ class InstallerService : Service() { return } - Telemetry.reportMessage("App install is failed for: $packageName status: $status extra: $extra") + Timber.e("App install is failed for: $packageName status: $status extra: $extra") updateInstallationIssue(packageName ?: "") if (status == PackageInstaller.STATUS_FAILURE_CONFLICT && extra?.contains( INSTALL_FAILED_UPDATE_INCOMPATIBLE diff --git a/app/src/main/java/foundation/e/apps/install/pkg/PkgManagerModule.kt b/app/src/main/java/foundation/e/apps/install/pkg/PkgManagerModule.kt index b0f0f2385..91e0d10d1 100644 --- a/app/src/main/java/foundation/e/apps/install/pkg/PkgManagerModule.kt +++ b/app/src/main/java/foundation/e/apps/install/pkg/PkgManagerModule.kt @@ -36,7 +36,6 @@ import foundation.e.apps.data.enums.Status import foundation.e.apps.data.enums.Type import foundation.e.apps.data.fused.FusedApi import foundation.e.apps.data.fusedDownload.models.FusedDownload -import foundation.e.lib.telemetry.Telemetry import kotlinx.coroutines.DelicateCoroutinesApi import timber.log.Timber import java.io.File @@ -190,8 +189,7 @@ class PkgManagerModule @Inject constructor( ) session.commit(servicePendingIntent.intentSender) } catch (e: Exception) { - Timber.e("$packageName: \n${e.stackTraceToString()}") - Telemetry.reportMessage("Initiating Install Failed for $packageName exception: ${e.localizedMessage}") + Timber.e("Initiating Install Failed for $packageName exception: ${e.localizedMessage}", e) val pendingIntent = PendingIntent.getBroadcast( context, sessionId, diff --git a/app/src/main/java/foundation/e/apps/install/updates/UpdatesWorker.kt b/app/src/main/java/foundation/e/apps/install/updates/UpdatesWorker.kt index 762291892..0f647e8ac 100644 --- a/app/src/main/java/foundation/e/apps/install/updates/UpdatesWorker.kt +++ b/app/src/main/java/foundation/e/apps/install/updates/UpdatesWorker.kt @@ -27,7 +27,6 @@ import foundation.e.apps.data.updates.UpdatesManagerRepository import foundation.e.apps.install.workmanager.AppInstallProcessor import foundation.e.apps.utils.eventBus.AppEvent import foundation.e.apps.utils.eventBus.EventBus -import foundation.e.lib.telemetry.Telemetry import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.withContext @@ -126,8 +125,7 @@ class UpdatesWorker @AssistedInject constructor( /* * If user in UNAVAILABLE, don't do anything. */ - Timber.w("User is not available! User is required during update!") - Telemetry.reportMessage("Update is aborted for unavailable user!") + Timber.e("Update is aborted for unavailable user!") return } Timber.i("Updates found: ${appsNeededToUpdate.size}; $resultStatus") @@ -171,8 +169,7 @@ class UpdatesWorker @AssistedInject constructor( checkForUpdates() } else { val message = "Update is aborted after trying for $MAX_RETRY_COUNT times!" - Timber.w(message) - Telemetry.reportMessage(message) + Timber.e(message) EventBus.invokeEvent(AppEvent.UpdateEvent(ResultSupreme.WorkError(ResultStatus.UNKNOWN))) } } diff --git a/app/src/main/java/foundation/e/apps/install/workmanager/AppInstallProcessor.kt b/app/src/main/java/foundation/e/apps/install/workmanager/AppInstallProcessor.kt index e3c71276c..08425d32f 100644 --- a/app/src/main/java/foundation/e/apps/install/workmanager/AppInstallProcessor.kt +++ b/app/src/main/java/foundation/e/apps/install/workmanager/AppInstallProcessor.kt @@ -41,7 +41,6 @@ import foundation.e.apps.install.updates.UpdatesNotifier import foundation.e.apps.utils.eventBus.AppEvent import foundation.e.apps.utils.eventBus.EventBus import foundation.e.apps.utils.getFormattedString -import foundation.e.lib.telemetry.Telemetry import kotlinx.coroutines.flow.transformWhile import timber.log.Timber import java.text.NumberFormat @@ -139,8 +138,7 @@ class AppInstallProcessor @Inject constructor( fusedManagerRepository.updateAwaiting(fusedDownload) InstallWorkManager.enqueueWork(fusedDownload, isAnUpdate) } catch (e: Exception) { - Timber.e(e) - Telemetry.reportMessage("Enqueuing App install work is failed for ${fusedDownload.packageName} exception: ${e.localizedMessage}") + Timber.e("Enqueuing App install work is failed for ${fusedDownload.packageName} exception: ${e.localizedMessage}", e) fusedManagerRepository.installationIssue(fusedDownload) } } @@ -154,8 +152,7 @@ class AppInstallProcessor @Inject constructor( EventBus.invokeEvent(AppEvent.AppPurchaseEvent(fusedDownload)) return false } catch (e: Exception) { - Timber.e(e) - Telemetry.reportMessage("Updating download Urls failed for ${fusedDownload.packageName} exception: ${e.localizedMessage}") + Timber.e("Updating download Urls failed for ${fusedDownload.packageName} exception: ${e.localizedMessage}", e) EventBus.invokeEvent( AppEvent.UpdateEvent( ResultSupreme.WorkError( @@ -243,8 +240,7 @@ class AppInstallProcessor @Inject constructor( startAppInstallationProcess(it) } } catch (e: Exception) { - Timber.e("doWork: Failed: ${e.stackTraceToString()}") - Telemetry.reportMessage("Install worker is failed for ${fusedDownload?.packageName} exception: ${e.localizedMessage}") + Timber.e("Install worker is failed for ${fusedDownload?.packageName} exception: ${e.localizedMessage}", e) fusedDownload?.let { fusedManagerRepository.cancelDownload(fusedDownload) } @@ -355,8 +351,7 @@ class AppInstallProcessor @Inject constructor( } catch (e: Exception) { val message = "Handling install status is failed for ${download.packageName} exception: ${e.localizedMessage}" - Timber.e(e, message) - Telemetry.reportMessage(message) + Timber.e(message, e) fusedManagerRepository.installationIssue(download) finishInstallation(download) } -- GitLab