From 9751a8185c0b7819658e32c50d5ec97bb1d79b47 Mon Sep 17 00:00:00 2001 From: hasibprince Date: Thu, 15 Jun 2023 17:27:42 +0600 Subject: [PATCH 1/7] removed image icon from database --- app/build.gradle | 2 -- .../e/apps/data/fusedDownload/models/FusedDownload.kt | 2 +- .../e/apps/install/updates/UpdatesWorker.kt | 4 +--- .../main/java/foundation/e/apps/ui/MainActivity.kt | 2 +- .../foundation/e/apps/ui/MainActivityViewModel.kt | 11 ++++------- .../e/apps/ui/application/ApplicationFragment.kt | 8 ++++---- .../ui/applicationlist/ApplicationListFragment.kt | 2 +- .../java/foundation/e/apps/ui/home/HomeFragment.kt | 2 +- .../foundation/e/apps/ui/search/SearchFragment.kt | 2 +- .../foundation/e/apps/ui/updates/UpdatesFragment.kt | 2 +- 10 files changed, 15 insertions(+), 22 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 953dda657..b722effa7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -90,8 +90,6 @@ android { buildTypes { debug { - versionNameSuffix ".debug" - applicationIdSuffix ".debug" signingConfig signingConfigs.debugConfig proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } diff --git a/app/src/main/java/foundation/e/apps/data/fusedDownload/models/FusedDownload.kt b/app/src/main/java/foundation/e/apps/data/fusedDownload/models/FusedDownload.kt index 148de9d88..96e47c3ec 100644 --- a/app/src/main/java/foundation/e/apps/data/fusedDownload/models/FusedDownload.kt +++ b/app/src/main/java/foundation/e/apps/data/fusedDownload/models/FusedDownload.kt @@ -18,7 +18,7 @@ data class FusedDownload( var downloadIdMap: MutableMap = mutableMapOf(), val orgStatus: Status = Status.UNAVAILABLE, val type: Type = Type.NATIVE, - val iconByteArray: String = String(), + val iconImagePath: String = String(), val versionCode: Int = 1, val offerType: Int = -1, val isFree: Boolean = true, 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 d2399e4cf..cb34ae59f 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 @@ -228,8 +228,6 @@ class UpdatesWorker @AssistedInject constructor( return@forEach } - val iconBase64 = getIconImageToBase64(fusedApp) - val fusedDownload = FusedDownload( fusedApp._id, fusedApp.origin, @@ -240,7 +238,7 @@ class UpdatesWorker @AssistedInject constructor( mutableMapOf(), fusedApp.status, fusedApp.type, - iconBase64, + fusedApp.icon_image_path, fusedApp.latest_version_code, fusedApp.offer_type, fusedApp.isFree, 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 fb76120bd..9516b42d5 100644 --- a/app/src/main/java/foundation/e/apps/ui/MainActivity.kt +++ b/app/src/main/java/foundation/e/apps/ui/MainActivity.kt @@ -74,7 +74,7 @@ class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - + Timber.d("===> code updated 115") binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) diff --git a/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt b/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt index 07ccbacc0..4b648409b 100644 --- a/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt +++ b/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt @@ -196,7 +196,7 @@ class MainActivityViewModel @Inject constructor( } } - fun getApplication(app: FusedApp, imageView: ImageView?) { + fun getApplication(app: FusedApp) { if (shouldShowPaidAppsSnackBar(app)) { return } @@ -204,7 +204,6 @@ class MainActivityViewModel @Inject constructor( viewModelScope.launch { val fusedDownload: FusedDownload try { - val appIcon = imageView?.let { getImageBase64(it) } ?: "" fusedDownload = FusedDownload( app._id, app.origin, @@ -215,7 +214,7 @@ class MainActivityViewModel @Inject constructor( mutableMapOf(), app.status, app.type, - appIcon, + app.icon_image_path, app.latest_version_code, app.offer_type, app.isFree, @@ -224,7 +223,7 @@ class MainActivityViewModel @Inject constructor( updateFusedDownloadWithAppDownloadLink(app, fusedDownload) } catch (e: Exception) { if (e is ApiException.AppNotPurchased) { - handleAppNotPurchased(imageView, app) + handleAppNotPurchased(app) return@launch } _errorMessage.value = e @@ -239,10 +238,8 @@ class MainActivityViewModel @Inject constructor( } private fun handleAppNotPurchased( - imageView: ImageView?, app: FusedApp ) { - val appIcon = imageView?.let { getImageBase64(it) } ?: "" val fusedDownload = FusedDownload( app._id, app.origin, @@ -253,7 +250,7 @@ class MainActivityViewModel @Inject constructor( mutableMapOf(), app.status, app.type, - appIcon, + app.icon_image_path, app.latest_version_code, app.offer_type, app.isFree, diff --git a/app/src/main/java/foundation/e/apps/ui/application/ApplicationFragment.kt b/app/src/main/java/foundation/e/apps/ui/application/ApplicationFragment.kt index 5c40b3b2f..1c75ecfc8 100644 --- a/app/src/main/java/foundation/e/apps/ui/application/ApplicationFragment.kt +++ b/app/src/main/java/foundation/e/apps/ui/application/ApplicationFragment.kt @@ -521,7 +521,7 @@ class ApplicationFragment : TimeoutFragment(R.layout.fragment_application) { enableInstallButton(R.string.retry) setOnClickListener { applicationIcon?.let { - mainActivityViewModel.getApplication(fusedApp, it) + mainActivityViewModel.getApplication(fusedApp) } } } @@ -669,11 +669,11 @@ class ApplicationFragment : TimeoutFragment(R.layout.fragment_application) { message = getString(R.string.may_not_work_warning_message), positiveButtonText = getString(R.string.install_anyway), positiveButtonAction = { - mainActivityViewModel.getApplication(fusedApp, it) + mainActivityViewModel.getApplication(fusedApp) } ).show(childFragmentManager, "ApplicationFragment") } else { - mainActivityViewModel.getApplication(fusedApp, it) + mainActivityViewModel.getApplication(fusedApp) } } @@ -697,7 +697,7 @@ class ApplicationFragment : TimeoutFragment(R.layout.fragment_application) { return@setOnClickListener } applicationIcon?.let { - mainActivityViewModel.getApplication(fusedApp, it) + mainActivityViewModel.getApplication(fusedApp) } } } diff --git a/app/src/main/java/foundation/e/apps/ui/applicationlist/ApplicationListFragment.kt b/app/src/main/java/foundation/e/apps/ui/applicationlist/ApplicationListFragment.kt index 3d607d137..bd8c32c9e 100644 --- a/app/src/main/java/foundation/e/apps/ui/applicationlist/ApplicationListFragment.kt +++ b/app/src/main/java/foundation/e/apps/ui/applicationlist/ApplicationListFragment.kt @@ -338,7 +338,7 @@ class ApplicationListFragment : } override fun getApplication(app: FusedApp, appIcon: ImageView?) { - mainActivityViewModel.getApplication(app, appIcon) + mainActivityViewModel.getApplication(app) } override fun cancelDownload(app: FusedApp) { diff --git a/app/src/main/java/foundation/e/apps/ui/home/HomeFragment.kt b/app/src/main/java/foundation/e/apps/ui/home/HomeFragment.kt index e77176ba2..d7f8aa7bb 100644 --- a/app/src/main/java/foundation/e/apps/ui/home/HomeFragment.kt +++ b/app/src/main/java/foundation/e/apps/ui/home/HomeFragment.kt @@ -285,7 +285,7 @@ class HomeFragment : TimeoutFragment(R.layout.fragment_home), FusedAPIInterface } override fun getApplication(app: FusedApp, appIcon: ImageView?) { - mainActivityViewModel.getApplication(app, appIcon) + mainActivityViewModel.getApplication(app) } override fun cancelDownload(app: FusedApp) { diff --git a/app/src/main/java/foundation/e/apps/ui/search/SearchFragment.kt b/app/src/main/java/foundation/e/apps/ui/search/SearchFragment.kt index f97ec131c..39a946790 100644 --- a/app/src/main/java/foundation/e/apps/ui/search/SearchFragment.kt +++ b/app/src/main/java/foundation/e/apps/ui/search/SearchFragment.kt @@ -447,7 +447,7 @@ class SearchFragment : } override fun getApplication(app: FusedApp, appIcon: ImageView?) { - mainActivityViewModel.getApplication(app, appIcon) + mainActivityViewModel.getApplication(app) } override fun cancelDownload(app: FusedApp) { diff --git a/app/src/main/java/foundation/e/apps/ui/updates/UpdatesFragment.kt b/app/src/main/java/foundation/e/apps/ui/updates/UpdatesFragment.kt index 4baf3adbf..41a6214c3 100644 --- a/app/src/main/java/foundation/e/apps/ui/updates/UpdatesFragment.kt +++ b/app/src/main/java/foundation/e/apps/ui/updates/UpdatesFragment.kt @@ -376,7 +376,7 @@ class UpdatesFragment : TimeoutFragment(R.layout.fragment_updates), FusedAPIInte } override fun getApplication(app: FusedApp, appIcon: ImageView?) { - mainActivityViewModel.getApplication(app, appIcon) + mainActivityViewModel.getApplication(app) } override fun cancelDownload(app: FusedApp) { -- GitLab From 6891383b1edaa76b741e05ff810cf081f30132c2 Mon Sep 17 00:00:00 2001 From: hasibprince Date: Thu, 15 Jun 2023 23:42:45 +0600 Subject: [PATCH 2/7] appiconurl is added to the database --- .../database/fusedDownload/FusedDatabase.kt | 6 ++++- .../fusedDownload/models/FusedDownload.kt | 17 ++++++++++-- .../e/apps/install/pkg/PWAManagerModule.kt | 4 ++- .../java/foundation/e/apps/ui/MainActivity.kt | 2 +- .../e/apps/ui/MainActivityViewModel.kt | 1 + .../e/apps/utils/CommonUtilsFunctions.kt | 26 +++++++++++++++++++ 6 files changed, 51 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/data/database/fusedDownload/FusedDatabase.kt b/app/src/main/java/foundation/e/apps/data/database/fusedDownload/FusedDatabase.kt index 88df8af12..c5f809a4f 100644 --- a/app/src/main/java/foundation/e/apps/data/database/fusedDownload/FusedDatabase.kt +++ b/app/src/main/java/foundation/e/apps/data/database/fusedDownload/FusedDatabase.kt @@ -2,14 +2,18 @@ package foundation.e.apps.data.database.fusedDownload import android.content.Context import androidx.room.Database +import androidx.room.DeleteColumn import androidx.room.Room import androidx.room.RoomDatabase import androidx.room.TypeConverters +import androidx.room.migration.AutoMigrationSpec +import androidx.room.migration.Migration +import androidx.sqlite.db.SupportSQLiteDatabase import foundation.e.apps.data.database.AppDatabase import foundation.e.apps.data.fusedDownload.FusedDownloadDAO import foundation.e.apps.data.fusedDownload.models.FusedDownload -@Database(entities = [FusedDownload::class], version = 3, exportSchema = false) +@Database(entities = [FusedDownload::class], version = 4, exportSchema = false) @TypeConverters(FusedConverter::class) abstract class FusedDatabase : RoomDatabase() { abstract fun fusedDownloadDao(): FusedDownloadDAO diff --git a/app/src/main/java/foundation/e/apps/data/fusedDownload/models/FusedDownload.kt b/app/src/main/java/foundation/e/apps/data/fusedDownload/models/FusedDownload.kt index 96e47c3ec..9bbe50fb7 100644 --- a/app/src/main/java/foundation/e/apps/data/fusedDownload/models/FusedDownload.kt +++ b/app/src/main/java/foundation/e/apps/data/fusedDownload/models/FusedDownload.kt @@ -3,6 +3,7 @@ package foundation.e.apps.data.fusedDownload.models import androidx.room.Entity import androidx.room.PrimaryKey import com.aurora.gplayapi.data.models.File +import foundation.e.apps.data.cleanapk.CleanApkRetrofit import foundation.e.apps.data.enums.Origin import foundation.e.apps.data.enums.Status import foundation.e.apps.data.enums.Type @@ -18,7 +19,7 @@ data class FusedDownload( var downloadIdMap: MutableMap = mutableMapOf(), val orgStatus: Status = Status.UNAVAILABLE, val type: Type = Type.NATIVE, - val iconImagePath: String = String(), + val iconImageUrl: String = String(), val versionCode: Int = 1, val offerType: Int = -1, val isFree: Boolean = true, @@ -26,9 +27,21 @@ data class FusedDownload( var files: List = mutableListOf(), var signature: String = String() ) { - fun isAppInstalling() = listOf(Status.AWAITING, Status.DOWNLOADING, Status.DOWNLOADED, Status.INSTALLING).contains(status) + fun isAppInstalling() = listOf( + Status.AWAITING, + Status.DOWNLOADING, + Status.DOWNLOADED, + Status.INSTALLING + ).contains(status) fun isAwaiting() = status == Status.AWAITING fun areFilesDownloaded() = downloadIdMap.isNotEmpty() && !downloadIdMap.values.contains(false) + + fun getAppIconUrl(): String { + if (this.origin == Origin.CLEANAPK) { + return "${CleanApkRetrofit.ASSET_URL}${this.iconImageUrl}" + } + return this.iconImageUrl + } } diff --git a/app/src/main/java/foundation/e/apps/install/pkg/PWAManagerModule.kt b/app/src/main/java/foundation/e/apps/install/pkg/PWAManagerModule.kt index 628ad0df1..6888fa5fb 100644 --- a/app/src/main/java/foundation/e/apps/install/pkg/PWAManagerModule.kt +++ b/app/src/main/java/foundation/e/apps/install/pkg/PWAManagerModule.kt @@ -17,6 +17,7 @@ import foundation.e.apps.data.enums.Status import foundation.e.apps.data.fused.data.FusedApp import foundation.e.apps.data.fusedDownload.FusedDownloadRepository import foundation.e.apps.data.fusedDownload.models.FusedDownload +import foundation.e.apps.utils.CommonUtilsFunctions import kotlinx.coroutines.delay import javax.inject.Inject import javax.inject.Singleton @@ -100,7 +101,8 @@ class PWAManagerModule @Inject constructor( fusedDownloadRepository.updateDownload(fusedDownload) // Get bitmap and byteArray for icon - val iconByteArray = Base64.decode(fusedDownload.iconByteArray, Base64.DEFAULT) + val base64AppIcon = CommonUtilsFunctions.getIconImageToBase64(fusedDownload.getAppIconUrl()) + val iconByteArray = Base64.decode(base64AppIcon, Base64.DEFAULT) val iconBitmap = BitmapFactory.decodeByteArray(iconByteArray, 0, iconByteArray.size) val values = ContentValues() 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 9516b42d5..704fbc8af 100644 --- a/app/src/main/java/foundation/e/apps/ui/MainActivity.kt +++ b/app/src/main/java/foundation/e/apps/ui/MainActivity.kt @@ -74,7 +74,7 @@ class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - Timber.d("===> code updated 115") + Timber.d("===> code updated 117") binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) diff --git a/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt b/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt index 4b648409b..520d0b3f8 100644 --- a/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt +++ b/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt @@ -323,6 +323,7 @@ class MainActivityViewModel @Inject constructor( app.origin, fusedDownload ) + } } } diff --git a/app/src/main/java/foundation/e/apps/utils/CommonUtilsFunctions.kt b/app/src/main/java/foundation/e/apps/utils/CommonUtilsFunctions.kt index f3f93b989..43e4454aa 100644 --- a/app/src/main/java/foundation/e/apps/utils/CommonUtilsFunctions.kt +++ b/app/src/main/java/foundation/e/apps/utils/CommonUtilsFunctions.kt @@ -20,9 +20,19 @@ package foundation.e.apps.utils import android.annotation.SuppressLint import android.content.ClipData import android.content.ClipboardManager +import android.graphics.Bitmap +import android.graphics.BitmapFactory import android.os.Build +import android.util.Base64 import foundation.e.apps.BuildConfig +import foundation.e.apps.data.cleanapk.CleanApkRetrofit +import foundation.e.apps.data.enums.Origin +import foundation.e.apps.data.fused.data.FusedApp import org.json.JSONObject +import timber.log.Timber +import java.io.ByteArrayOutputStream +import java.io.IOException +import java.net.URL object CommonUtilsFunctions { @@ -63,4 +73,20 @@ object CommonUtilsFunctions { } return descriptionJson.toString() } + + fun getIconImageToBase64(url: String): String? { + return try { + val stream = URL(url).openStream() + val bitmap = BitmapFactory.decodeStream(stream) + val byteArrayOS = ByteArrayOutputStream() + bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOS) + Base64.encodeToString(byteArrayOS.toByteArray(), Base64.DEFAULT) + } catch (e: IOException) { + Timber.e(e) + null + } catch (e: Exception) { + Timber.e(e) + null + } + } } -- GitLab From 796306373ffb9c8100bd4384d8874ec4c9095fca Mon Sep 17 00:00:00 2001 From: hasibprince Date: Fri, 16 Jun 2023 07:29:13 +0600 Subject: [PATCH 3/7] updated managing app icon for PWA --- app/build.gradle | 2 ++ .../apps/data/database/fusedDownload/FusedDatabase.kt | 4 ---- .../foundation/e/apps/install/updates/UpdatesWorker.kt | 10 ---------- app/src/main/java/foundation/e/apps/ui/MainActivity.kt | 2 +- .../java/foundation/e/apps/ui/MainActivityViewModel.kt | 7 ------- .../foundation/e/apps/utils/CommonUtilsFunctions.kt | 7 ------- 6 files changed, 3 insertions(+), 29 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b722effa7..953dda657 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -90,6 +90,8 @@ android { buildTypes { debug { + versionNameSuffix ".debug" + applicationIdSuffix ".debug" signingConfig signingConfigs.debugConfig proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } diff --git a/app/src/main/java/foundation/e/apps/data/database/fusedDownload/FusedDatabase.kt b/app/src/main/java/foundation/e/apps/data/database/fusedDownload/FusedDatabase.kt index c5f809a4f..4c0a35b77 100644 --- a/app/src/main/java/foundation/e/apps/data/database/fusedDownload/FusedDatabase.kt +++ b/app/src/main/java/foundation/e/apps/data/database/fusedDownload/FusedDatabase.kt @@ -2,13 +2,9 @@ package foundation.e.apps.data.database.fusedDownload import android.content.Context import androidx.room.Database -import androidx.room.DeleteColumn import androidx.room.Room import androidx.room.RoomDatabase import androidx.room.TypeConverters -import androidx.room.migration.AutoMigrationSpec -import androidx.room.migration.Migration -import androidx.sqlite.db.SupportSQLiteDatabase import foundation.e.apps.data.database.AppDatabase import foundation.e.apps.data.fusedDownload.FusedDownloadDAO import foundation.e.apps.data.fusedDownload.models.FusedDownload 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 cb34ae59f..e52500c72 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 @@ -314,16 +314,6 @@ class UpdatesWorker @AssistedInject constructor( } } - private fun getIconImageToBase64(fusedApp: FusedApp): String { - val url = - if (fusedApp.origin == Origin.CLEANAPK) "${CleanApkRetrofit.ASSET_URL}${fusedApp.icon_image_path}" else fusedApp.icon_image_path - val stream = URL(url).openStream() - val bitmap = BitmapFactory.decodeStream(stream) - val byteArrayOS = ByteArrayOutputStream() - bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOS) - return Base64.encodeToString(byteArrayOS.toByteArray(), Base64.DEFAULT) - } - /* * Checks if the device is connected to a metered connection or not * @param context current Context 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 704fbc8af..fb76120bd 100644 --- a/app/src/main/java/foundation/e/apps/ui/MainActivity.kt +++ b/app/src/main/java/foundation/e/apps/ui/MainActivity.kt @@ -74,7 +74,7 @@ class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - Timber.d("===> code updated 117") + binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) diff --git a/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt b/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt index 520d0b3f8..76c4bc35f 100644 --- a/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt +++ b/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt @@ -328,13 +328,6 @@ class MainActivityViewModel @Inject constructor( } } - private fun getImageBase64(imageView: ImageView): String { - val byteArrayOS = ByteArrayOutputStream() - val bitmap = imageView.drawable.toBitmap() - bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOS) - return Base64.encodeToString(byteArrayOS.toByteArray(), Base64.DEFAULT) - } - fun setupConnectivityManager(context: Context) { connectivityManager = context.getSystemService(ConnectivityManager::class.java) as ConnectivityManager diff --git a/app/src/main/java/foundation/e/apps/utils/CommonUtilsFunctions.kt b/app/src/main/java/foundation/e/apps/utils/CommonUtilsFunctions.kt index 43e4454aa..f9699b2e6 100644 --- a/app/src/main/java/foundation/e/apps/utils/CommonUtilsFunctions.kt +++ b/app/src/main/java/foundation/e/apps/utils/CommonUtilsFunctions.kt @@ -25,13 +25,9 @@ import android.graphics.BitmapFactory import android.os.Build import android.util.Base64 import foundation.e.apps.BuildConfig -import foundation.e.apps.data.cleanapk.CleanApkRetrofit -import foundation.e.apps.data.enums.Origin -import foundation.e.apps.data.fused.data.FusedApp import org.json.JSONObject import timber.log.Timber import java.io.ByteArrayOutputStream -import java.io.IOException import java.net.URL object CommonUtilsFunctions { @@ -81,9 +77,6 @@ object CommonUtilsFunctions { val byteArrayOS = ByteArrayOutputStream() bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOS) Base64.encodeToString(byteArrayOS.toByteArray(), Base64.DEFAULT) - } catch (e: IOException) { - Timber.e(e) - null } catch (e: Exception) { Timber.e(e) null -- GitLab From 071bc3f42810d2d5f5c42fdc4d4d3318307d7c84 Mon Sep 17 00:00:00 2001 From: hasibprince Date: Fri, 16 Jun 2023 07:50:56 +0600 Subject: [PATCH 4/7] ktlintFormat --- .../foundation/e/apps/install/updates/UpdatesWorker.kt | 7 ------- .../java/foundation/e/apps/ui/MainActivityViewModel.kt | 6 ------ 2 files changed, 13 deletions(-) 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 e52500c72..543fca6f3 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 @@ -3,11 +3,8 @@ package foundation.e.apps.install.updates import android.Manifest import android.content.Context import android.content.pm.PackageManager -import android.graphics.Bitmap -import android.graphics.BitmapFactory import android.net.ConnectivityManager import android.net.NetworkCapabilities -import android.util.Base64 import androidx.hilt.work.HiltWorker import androidx.preference.PreferenceManager import androidx.work.CoroutineWorker @@ -20,8 +17,6 @@ import dagger.assisted.Assisted import dagger.assisted.AssistedInject import foundation.e.apps.R import foundation.e.apps.data.ResultSupreme -import foundation.e.apps.data.cleanapk.CleanApkRetrofit -import foundation.e.apps.data.enums.Origin import foundation.e.apps.data.enums.ResultStatus import foundation.e.apps.data.enums.Type import foundation.e.apps.data.enums.User @@ -39,8 +34,6 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.withContext import timber.log.Timber -import java.io.ByteArrayOutputStream -import java.net.URL @HiltWorker class UpdatesWorker @AssistedInject constructor( diff --git a/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt b/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt index 76c4bc35f..762937476 100644 --- a/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt +++ b/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt @@ -20,17 +20,13 @@ package foundation.e.apps.ui import android.content.Context import android.content.Intent -import android.graphics.Bitmap import android.net.ConnectivityManager import android.net.Network import android.net.NetworkCapabilities import android.net.NetworkRequest import android.os.Build -import android.util.Base64 -import android.widget.ImageView import androidx.annotation.RequiresApi import androidx.appcompat.app.AlertDialog -import androidx.core.graphics.drawable.toBitmap import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel @@ -60,7 +56,6 @@ import kotlinx.coroutines.channels.ProducerScope import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.callbackFlow import kotlinx.coroutines.launch -import java.io.ByteArrayOutputStream import javax.inject.Inject @HiltViewModel @@ -323,7 +318,6 @@ class MainActivityViewModel @Inject constructor( app.origin, fusedDownload ) - } } } -- GitLab From f84b4a2a8bb0ed19b68906e6c34ab6407f80915b Mon Sep 17 00:00:00 2001 From: hasibprince Date: Fri, 16 Jun 2023 08:16:42 +0600 Subject: [PATCH 5/7] Prevent sending warn logs to sentry --- app/src/main/java/foundation/e/apps/AppLoungeApplication.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/foundation/e/apps/AppLoungeApplication.kt b/app/src/main/java/foundation/e/apps/AppLoungeApplication.kt index 1ffcfd057..913c23a06 100644 --- a/app/src/main/java/foundation/e/apps/AppLoungeApplication.kt +++ b/app/src/main/java/foundation/e/apps/AppLoungeApplication.kt @@ -78,7 +78,7 @@ class AppLoungeApplication : Application(), Configuration.Provider { Telemetry.init(BuildConfig.SENTRY_DSN, this) plant(object : Timber.Tree() { override fun log(priority: Int, tag: String?, message: String, t: Throwable?) { - if (priority < Log.WARN) { + if (priority <= Log.WARN) { return } Log.println(priority, tag, message) -- GitLab From 3ee8ab553aa0bfc4d514f8257038e441969f1568 Mon Sep 17 00:00:00 2001 From: hasibprince Date: Fri, 16 Jun 2023 12:59:33 +0600 Subject: [PATCH 6/7] refactor: FusedDownload --- .../e/apps/data/fusedDownload/models/FusedDownload.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/foundation/e/apps/data/fusedDownload/models/FusedDownload.kt b/app/src/main/java/foundation/e/apps/data/fusedDownload/models/FusedDownload.kt index 9bbe50fb7..0d9333021 100644 --- a/app/src/main/java/foundation/e/apps/data/fusedDownload/models/FusedDownload.kt +++ b/app/src/main/java/foundation/e/apps/data/fusedDownload/models/FusedDownload.kt @@ -1,6 +1,7 @@ package foundation.e.apps.data.fusedDownload.models import androidx.room.Entity +import androidx.room.Ignore import androidx.room.PrimaryKey import com.aurora.gplayapi.data.models.File import foundation.e.apps.data.cleanapk.CleanApkRetrofit @@ -27,12 +28,15 @@ data class FusedDownload( var files: List = mutableListOf(), var signature: String = String() ) { - fun isAppInstalling() = listOf( + @Ignore + private val installingStatusList = listOf( Status.AWAITING, Status.DOWNLOADING, Status.DOWNLOADED, Status.INSTALLING - ).contains(status) + ) + + fun isAppInstalling() = installingStatusList.contains(status) fun isAwaiting() = status == Status.AWAITING -- GitLab From 2c3fd9312e8ac9175d3f0a691449d2e956fd3fdc Mon Sep 17 00:00:00 2001 From: hasibprince Date: Mon, 19 Jun 2023 15:05:59 +0600 Subject: [PATCH 7/7] refactor: Commonutils methods --- .../apps/data/gplay/utils/GPlayHttpClient.kt | 4 +- .../e/apps/install/pkg/PWAManagerModule.kt | 41 +++++++++++++++---- .../java/foundation/e/apps/ui/MainActivity.kt | 4 +- .../e/apps/ui/settings/SettingsFragment.kt | 16 ++++++-- ...tilsFunctions.kt => SystemInfoProvider.kt} | 39 ++---------------- 5 files changed, 54 insertions(+), 50 deletions(-) rename app/src/main/java/foundation/e/apps/utils/{CommonUtilsFunctions.kt => SystemInfoProvider.kt} (56%) diff --git a/app/src/main/java/foundation/e/apps/data/gplay/utils/GPlayHttpClient.kt b/app/src/main/java/foundation/e/apps/data/gplay/utils/GPlayHttpClient.kt index 1ad5e201b..33a3b8370 100644 --- a/app/src/main/java/foundation/e/apps/data/gplay/utils/GPlayHttpClient.kt +++ b/app/src/main/java/foundation/e/apps/data/gplay/utils/GPlayHttpClient.kt @@ -22,7 +22,7 @@ package foundation.e.apps.data.gplay.utils import com.aurora.gplayapi.data.models.PlayResponse import com.aurora.gplayapi.network.IHttpClient import foundation.e.apps.data.login.AuthObject -import foundation.e.apps.utils.CommonUtilsFunctions +import foundation.e.apps.utils.SystemInfoProvider import foundation.e.apps.utils.eventBus.AppEvent import foundation.e.apps.utils.eventBus.EventBus import kotlinx.coroutines.MainScope @@ -88,7 +88,7 @@ class GPlayHttpClient @Inject constructor( override fun postAuth(url: String, body: ByteArray): PlayResponse { val requestBody = body.toRequestBody("application/json".toMediaType(), 0, body.size) val headers = mapOf( - "User-Agent" to CommonUtilsFunctions.getAppBuildInfo() + "User-Agent" to SystemInfoProvider.getAppBuildInfo() ) val request = Request.Builder() .headers(headers.toHeaders()) diff --git a/app/src/main/java/foundation/e/apps/install/pkg/PWAManagerModule.kt b/app/src/main/java/foundation/e/apps/install/pkg/PWAManagerModule.kt index 6888fa5fb..56e27c74f 100644 --- a/app/src/main/java/foundation/e/apps/install/pkg/PWAManagerModule.kt +++ b/app/src/main/java/foundation/e/apps/install/pkg/PWAManagerModule.kt @@ -7,7 +7,6 @@ import android.content.Intent import android.graphics.Bitmap import android.graphics.BitmapFactory import android.net.Uri -import android.util.Base64 import androidx.core.content.pm.ShortcutInfoCompat import androidx.core.content.pm.ShortcutManagerCompat import androidx.core.graphics.drawable.IconCompat @@ -17,8 +16,11 @@ import foundation.e.apps.data.enums.Status import foundation.e.apps.data.fused.data.FusedApp import foundation.e.apps.data.fusedDownload.FusedDownloadRepository import foundation.e.apps.data.fusedDownload.models.FusedDownload -import foundation.e.apps.utils.CommonUtilsFunctions import kotlinx.coroutines.delay +import timber.log.Timber +import java.io.ByteArrayOutputStream +import java.io.IOException +import java.net.URL import javax.inject.Inject import javax.inject.Singleton @@ -26,7 +28,7 @@ import javax.inject.Singleton @OpenForTesting class PWAManagerModule @Inject constructor( @ApplicationContext private val context: Context, - private val fusedDownloadRepository: FusedDownloadRepository + private val fusedDownloadRepository: FusedDownloadRepository, ) { companion object { @@ -101,10 +103,15 @@ class PWAManagerModule @Inject constructor( fusedDownloadRepository.updateDownload(fusedDownload) // Get bitmap and byteArray for icon - val base64AppIcon = CommonUtilsFunctions.getIconImageToBase64(fusedDownload.getAppIconUrl()) - val iconByteArray = Base64.decode(base64AppIcon, Base64.DEFAULT) - val iconBitmap = BitmapFactory.decodeByteArray(iconByteArray, 0, iconByteArray.size) + val iconBitmap = getIconImageBitmap(fusedDownload.getAppIconUrl()) + if (iconBitmap == null) { + fusedDownload.status = Status.INSTALLATION_ISSUE + fusedDownloadRepository.updateDownload(fusedDownload) + return + } + + val iconByteArray = iconBitmap.toByteArray() val values = ContentValues() values.apply { put(URL, fusedDownload.downloadURLList[0]) @@ -119,7 +126,27 @@ class PWAManagerModule @Inject constructor( } } - private suspend fun publishShortcut(fusedDownload: FusedDownload, bitmap: Bitmap, databaseID: Long) { + fun getIconImageBitmap(url: String): Bitmap? { + return try { + val stream = URL(url).openStream() + BitmapFactory.decodeStream(stream) + } catch (e: IOException) { + Timber.e(e) + null + } + } + + fun Bitmap.toByteArray(): ByteArray { + val byteArrayOS = ByteArrayOutputStream() + this.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOS) + return byteArrayOS.toByteArray() + } + + private suspend fun publishShortcut( + fusedDownload: FusedDownload, + bitmap: Bitmap, + databaseID: Long + ) { // Update status fusedDownload.status = Status.INSTALLING fusedDownloadRepository.updateDownload(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 fb76120bd..5854f40b5 100644 --- a/app/src/main/java/foundation/e/apps/ui/MainActivity.kt +++ b/app/src/main/java/foundation/e/apps/ui/MainActivity.kt @@ -53,7 +53,7 @@ import foundation.e.apps.ui.application.subFrags.ApplicationDialogFragment import foundation.e.apps.ui.purchase.AppPurchaseFragmentDirections import foundation.e.apps.ui.settings.SettingsFragment import foundation.e.apps.ui.setup.signin.SignInViewModel -import foundation.e.apps.utils.CommonUtilsFunctions +import foundation.e.apps.utils.SystemInfoProvider import foundation.e.apps.utils.eventBus.AppEvent import foundation.e.apps.utils.eventBus.EventBus import kotlinx.coroutines.flow.collectLatest @@ -134,7 +134,7 @@ class MainActivity : AppCompatActivity() { val email = otherPayload.toString() viewModel.uploadFaultyTokenToEcloud( email, - CommonUtilsFunctions.getAppBuildInfo() + SystemInfoProvider.getAppBuildInfo() ) } } diff --git a/app/src/main/java/foundation/e/apps/ui/settings/SettingsFragment.kt b/app/src/main/java/foundation/e/apps/ui/settings/SettingsFragment.kt index cdff64f52..07abaab9b 100644 --- a/app/src/main/java/foundation/e/apps/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/foundation/e/apps/ui/settings/SettingsFragment.kt @@ -18,6 +18,7 @@ package foundation.e.apps.ui.settings +import android.content.ClipData import android.content.ClipboardManager import android.content.Intent import android.os.Bundle @@ -45,7 +46,7 @@ import foundation.e.apps.databinding.CustomPreferenceBinding import foundation.e.apps.install.updates.UpdatesWorkManager import foundation.e.apps.ui.MainActivity import foundation.e.apps.ui.MainActivityViewModel -import foundation.e.apps.utils.CommonUtilsFunctions +import foundation.e.apps.utils.SystemInfoProvider import timber.log.Timber import javax.inject.Inject @@ -109,14 +110,14 @@ class SettingsFragment : PreferenceFragmentCompat() { summary = BuildConfig.VERSION_NAME setOnLongClickListener { - val osVersion = CommonUtilsFunctions.getSystemProperty("ro.lineage.version") + val osVersion = SystemInfoProvider.getSystemProperty(SystemInfoProvider.KEY_LINEAGE_VERSION) val appVersionLabel = getString(R.string.app_version_label) var contents = "$appVersionLabel: $summary" if (!osVersion.isNullOrBlank()) { contents += "\n${context.getString(R.string.os_version)}: $osVersion" } - CommonUtilsFunctions.copyTextToClipboard( + copyTextToClipboard( clipboardManager, appVersionLabel, contents @@ -279,6 +280,15 @@ class SettingsFragment : PreferenceFragmentCompat() { } } + private fun copyTextToClipboard( + clipboard: ClipboardManager, + label: String, + text: String, + ) { + val clip = ClipData.newPlainText(label, text) + clipboard.setPrimaryClip(clip) + } + override fun onDestroyView() { if (sourcesChangedFlag) { UpdatesDao.addItemsForUpdate(emptyList()) diff --git a/app/src/main/java/foundation/e/apps/utils/CommonUtilsFunctions.kt b/app/src/main/java/foundation/e/apps/utils/SystemInfoProvider.kt similarity index 56% rename from app/src/main/java/foundation/e/apps/utils/CommonUtilsFunctions.kt rename to app/src/main/java/foundation/e/apps/utils/SystemInfoProvider.kt index f9699b2e6..68b72945d 100644 --- a/app/src/main/java/foundation/e/apps/utils/CommonUtilsFunctions.kt +++ b/app/src/main/java/foundation/e/apps/utils/SystemInfoProvider.kt @@ -18,33 +18,13 @@ package foundation.e.apps.utils import android.annotation.SuppressLint -import android.content.ClipData -import android.content.ClipboardManager -import android.graphics.Bitmap -import android.graphics.BitmapFactory import android.os.Build -import android.util.Base64 import foundation.e.apps.BuildConfig import org.json.JSONObject -import timber.log.Timber -import java.io.ByteArrayOutputStream -import java.net.URL -object CommonUtilsFunctions { +object SystemInfoProvider { - /** - * Copy anything to system clipboard. - * Issue: https://gitlab.e.foundation/e/backlog/-/issues/5653 - */ - fun copyTextToClipboard( - clipboard: ClipboardManager, - label: String, - text: String, - ) { - // https://developer.android.com/guide/topics/text/copy-paste#Copying - val clip = ClipData.newPlainText(label, text) - clipboard.setPrimaryClip(clip) - } + const val KEY_LINEAGE_VERSION = "ro.lineage.version" @SuppressLint("PrivateApi") fun getSystemProperty(key: String?): String? { @@ -64,22 +44,9 @@ object CommonUtilsFunctions { put("version", BuildConfig.VERSION_NAME) put("device", Build.DEVICE) put("api", Build.VERSION.SDK_INT) - put("os_version", getSystemProperty("ro.lineage.version")) + put("os_version", getSystemProperty(KEY_LINEAGE_VERSION)) put("build_id", BuildConfig.BUILD_ID) } return descriptionJson.toString() } - - fun getIconImageToBase64(url: String): String? { - return try { - val stream = URL(url).openStream() - val bitmap = BitmapFactory.decodeStream(stream) - val byteArrayOS = ByteArrayOutputStream() - bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOS) - Base64.encodeToString(byteArrayOS.toByteArray(), Base64.DEFAULT) - } catch (e: Exception) { - Timber.e(e) - null - } - } } -- GitLab