Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2c3fd931 authored by Hasib Prince's avatar Hasib Prince
Browse files

refactor: Commonutils methods

parent 3ee8ab55
Loading
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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())
+34 −7
Original line number Diff line number Diff line
@@ -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)
+2 −2
Original line number Diff line number Diff line
@@ -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()
                    )
                }
            }
+13 −3
Original line number Diff line number Diff line
@@ -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())
+3 −36
Original line number Diff line number Diff line
@@ -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
        }
    }
}