diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5adf95d9e43ea955db299341e0cc44516c76f8ea..8b1b2ec5359f2941460d1d1a7d55c64a1ea0f6f0 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -100,11 +100,6 @@
android:foregroundServiceType="dataSync">
-
-
-
diff --git a/app/src/main/java/foundation/e/apps/data/application/ApplicationDataManager.kt b/app/src/main/java/foundation/e/apps/data/application/ApplicationDataManager.kt
index bdcbe1fedfcdec659758aa8e3e4d399e4a99cd3b..96290fd68c36f7b33bee3a1b85e40c13a6d4e224 100644
--- a/app/src/main/java/foundation/e/apps/data/application/ApplicationDataManager.kt
+++ b/app/src/main/java/foundation/e/apps/data/application/ApplicationDataManager.kt
@@ -58,7 +58,7 @@ class ApplicationDataManager @Inject constructor(
application.package_name.isBlank() -> FilterLevel.UNKNOWN
!application.isFree && application.price.isBlank() -> FilterLevel.UI
application.source == Source.PWA || application.source == Source.OPEN_SOURCE -> FilterLevel.NONE
- application.source == Source.SYSTEM_APP || application.source == Source.LOCAL_PWA -> FilterLevel.NONE
+ application.source == Source.SYSTEM_APP -> FilterLevel.NONE
!isRestricted(application) -> FilterLevel.NONE
application.originalSize == 0L -> FilterLevel.UI
else -> FilterLevel.NONE
diff --git a/app/src/main/java/foundation/e/apps/data/application/downloadInfo/DownloadInfoApiImpl.kt b/app/src/main/java/foundation/e/apps/data/application/downloadInfo/DownloadInfoApiImpl.kt
index 94d111f83861c2555be810b4f78c1f41f4c73057..8e6ca6d84b71ecfa13fa96d3bad6ebac7eff973d 100644
--- a/app/src/main/java/foundation/e/apps/data/application/downloadInfo/DownloadInfoApiImpl.kt
+++ b/app/src/main/java/foundation/e/apps/data/application/downloadInfo/DownloadInfoApiImpl.kt
@@ -73,7 +73,7 @@ class DownloadInfoApiImpl @Inject constructor(
updateDownloadInfoFromGplay(appInstall, list)
}
- Source.SYSTEM_APP, Source.LOCAL_PWA -> {
+ Source.SYSTEM_APP -> {
return // nothing to do as downloadURLList is already set
}
}
diff --git a/app/src/main/java/foundation/e/apps/data/application/home/HomeApiImpl.kt b/app/src/main/java/foundation/e/apps/data/application/home/HomeApiImpl.kt
index bca60285a43a9af3bbf68936f03b637db7a97e05..e82c70db871f22b06e065f3c2d04bd5f060932fe 100644
--- a/app/src/main/java/foundation/e/apps/data/application/home/HomeApiImpl.kt
+++ b/app/src/main/java/foundation/e/apps/data/application/home/HomeApiImpl.kt
@@ -93,7 +93,7 @@ class HomeApiImpl @Inject constructor(
Source.PLAY_STORE -> ("GPlay home loading error\n" + apiStatus.message).trim()
Source.SYSTEM_APP -> ("Gitlab home not allowed\n" + apiStatus.message).trim()
Source.OPEN_SOURCE -> ("Open Source home loading error\n" + apiStatus.message).trim()
- Source.PWA, Source.LOCAL_PWA -> ("PWA home loading error\n" + apiStatus.message).trim()
+ Source.PWA -> ("PWA home loading error\n" + apiStatus.message).trim()
}
}
}
diff --git a/app/src/main/java/foundation/e/apps/data/enums/Source.kt b/app/src/main/java/foundation/e/apps/data/enums/Source.kt
index c5142b463af66ad93283a3b6b807de0e3863736a..6bafbc435030942645650388f5de72498313ceac 100644
--- a/app/src/main/java/foundation/e/apps/data/enums/Source.kt
+++ b/app/src/main/java/foundation/e/apps/data/enums/Source.kt
@@ -19,7 +19,6 @@ package foundation.e.apps.data.enums
enum class Source {
OPEN_SOURCE,
- LOCAL_PWA,
PWA,
SYSTEM_APP,
PLAY_STORE;
@@ -38,7 +37,6 @@ enum class Source {
return when (source) {
"Open Source" -> OPEN_SOURCE
"PWA" -> PWA
- "Local PWA" -> LOCAL_PWA
"SYSTEM_APP" -> SYSTEM_APP
else -> PLAY_STORE
}
diff --git a/app/src/main/java/foundation/e/apps/install/pkg/PwaManager.kt b/app/src/main/java/foundation/e/apps/install/pkg/PwaManager.kt
index 065da3d581e6247a18f9c5a470e12c06f015be87..b1ea00b57efa1d0e304d4eb5db118b0dad21ad95 100644
--- a/app/src/main/java/foundation/e/apps/install/pkg/PwaManager.kt
+++ b/app/src/main/java/foundation/e/apps/install/pkg/PwaManager.kt
@@ -7,9 +7,7 @@ import android.content.Intent
import android.database.Cursor
import android.graphics.Bitmap
import android.graphics.BitmapFactory
-import android.graphics.drawable.BitmapDrawable
import android.net.Uri
-import androidx.core.content.ContextCompat
import androidx.core.content.pm.ShortcutInfoCompat
import androidx.core.content.pm.ShortcutManagerCompat
import androidx.core.graphics.drawable.IconCompat
@@ -26,7 +24,6 @@ import java.io.IOException
import java.net.URL
import javax.inject.Inject
import javax.inject.Singleton
-import foundation.e.apps.data.enums.Source
@Singleton
@OpenForTesting
@@ -44,7 +41,7 @@ class PwaManager @Inject constructor(
private const val PWA_NAME = "PWA_NAME"
private const val PWA_ID = "PWA_ID"
- const val PWA_PLAYER = "content://foundation.e.pwaplayer.provider/pwa"
+ private const val PWA_PLAYER = "content://foundation.e.pwaplayer.provider/pwa"
private const val VIEW_PWA = "foundation.e.blisslauncher.VIEW_PWA"
private const val DELAY_100 = 100L
@@ -120,12 +117,7 @@ class PwaManager @Inject constructor(
appInstallRepository.updateDownload(appInstall)
// Get bitmap and byteArray for icon
- val iconBitmap = if (appInstall.source != Source.LOCAL_PWA) {
- getIconImageBitmap(appInstall.getAppIconUrl())
- } else {
- val resourceId = appInstall.getAppIconUrl().toInt()
- getIconImageBitmapFromDrawable(context, resourceId)
- }
+ val iconBitmap = getIconImageBitmap(appInstall.getAppIconUrl())
if (iconBitmap == null) {
appInstall.status = Status.INSTALLATION_ISSUE
@@ -158,15 +150,6 @@ class PwaManager @Inject constructor(
}
}
- fun getIconImageBitmapFromDrawable(context: Context, resourceId: Int): Bitmap? {
- val drawable = ContextCompat.getDrawable(context, resourceId)
- if (drawable is BitmapDrawable) {
- return drawable.bitmap
- }
-
- return null
- }
-
fun Bitmap.toByteArray(): ByteArray {
val byteArrayOS = ByteArrayOutputStream()
this.compress(Bitmap.CompressFormat.PNG, BITMAP_QUALITY, byteArrayOS)
diff --git a/app/src/main/java/foundation/e/apps/install/updates/UpdatesBroadcastReceiver.kt b/app/src/main/java/foundation/e/apps/install/updates/UpdatesBroadcastReceiver.kt
index 65c4bc7c49eb13eb63e38220b64b4a4f9e08e47c..36e89a2470e0a022e1e25620028d31cdcaf156aa 100644
--- a/app/src/main/java/foundation/e/apps/install/updates/UpdatesBroadcastReceiver.kt
+++ b/app/src/main/java/foundation/e/apps/install/updates/UpdatesBroadcastReceiver.kt
@@ -20,10 +20,8 @@ package foundation.e.apps.install.updates
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
-import androidx.core.content.ContextCompat
import androidx.work.ExistingPeriodicWorkPolicy
import foundation.e.apps.data.preference.AppLoungePreference
-import foundation.e.apps.utils.LocalPWAInstaller
import timber.log.Timber
class UpdatesBroadcastReceiver : BroadcastReceiver() {
@@ -34,9 +32,6 @@ class UpdatesBroadcastReceiver : BroadcastReceiver() {
val appLoungePreference = AppLoungePreference(context)
val interval = appLoungePreference.getUpdateInterval()
UpdatesWorkManager.enqueueWork(context, interval, ExistingPeriodicWorkPolicy.REPLACE)
-
- val serviceIntent = Intent(context, LocalPWAInstaller::class.java)
- ContextCompat.startForegroundService(context, serviceIntent)
}
}
}
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 5aade84fb38b30cecaa084af08c420149b31d377..58cc4ca8196a592b58b406374a3504d1ec6e89fb 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
@@ -100,8 +100,7 @@ class AppInstallProcessor @Inject constructor(
it.contentRating = application.contentRating
}
- if (appInstall.type == Type.PWA || application.source == Source.SYSTEM_APP
- || appInstall.source == Source.LOCAL_PWA) {
+ if (appInstall.type == Type.PWA || application.source == Source.SYSTEM_APP) {
appInstall.downloadURLList = mutableListOf(application.url)
}
diff --git a/app/src/main/java/foundation/e/apps/ui/application/model/ApplicationScreenshotsRVAdapter.kt b/app/src/main/java/foundation/e/apps/ui/application/model/ApplicationScreenshotsRVAdapter.kt
index ff2d791904b9a5b1d3e150e4bfbda27e08435045..6119dfb12a89d9748a9b8087b3fdedf38199730b 100644
--- a/app/src/main/java/foundation/e/apps/ui/application/model/ApplicationScreenshotsRVAdapter.kt
+++ b/app/src/main/java/foundation/e/apps/ui/application/model/ApplicationScreenshotsRVAdapter.kt
@@ -61,7 +61,7 @@ class ApplicationScreenshotsRVAdapter(
Source.PLAY_STORE -> {
imageView.load(oldList[position])
}
- Source.SYSTEM_APP, Source.LOCAL_PWA -> {
+ Source.SYSTEM_APP -> {
// no operation
}
}
diff --git a/app/src/main/java/foundation/e/apps/ui/applicationlist/ApplicationListRVAdapter.kt b/app/src/main/java/foundation/e/apps/ui/applicationlist/ApplicationListRVAdapter.kt
index b17ac96af18afe42feafbbdccb7f40b920f63c7a..b782362a4e4d344d96891e29424a3282c4cbb5d4 100644
--- a/app/src/main/java/foundation/e/apps/ui/applicationlist/ApplicationListRVAdapter.kt
+++ b/app/src/main/java/foundation/e/apps/ui/applicationlist/ApplicationListRVAdapter.kt
@@ -188,9 +188,6 @@ class ApplicationListRVAdapter(
placeholder(shimmerDrawable)
}
}
- Source.LOCAL_PWA -> {
- // Do nothing
- }
}
}
diff --git a/app/src/main/java/foundation/e/apps/utils/LocalPWAInstaller.kt b/app/src/main/java/foundation/e/apps/utils/LocalPWAInstaller.kt
deleted file mode 100644
index 4824592624915f19abcb0d1804eb1e6f69347006..0000000000000000000000000000000000000000
--- a/app/src/main/java/foundation/e/apps/utils/LocalPWAInstaller.kt
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (C) 2025 e Foundation
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package foundation.e.apps.utils
-
-import android.app.NotificationChannel
-import android.app.NotificationManager
-import android.app.Service
-import android.content.Context
-import android.content.Intent
-import android.content.pm.ServiceInfo
-import android.os.IBinder
-import androidx.core.app.NotificationCompat
-import androidx.core.net.toUri
-import dagger.hilt.android.AndroidEntryPoint
-import foundation.e.apps.R
-import foundation.e.apps.data.enums.Source
-import foundation.e.apps.data.enums.Status
-import foundation.e.apps.data.install.models.AppInstall
-import foundation.e.apps.install.pkg.PwaManager
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.delay
-import kotlinx.coroutines.launch
-import timber.log.Timber
-import java.util.UUID
-import javax.inject.Inject
-import androidx.core.content.edit
-import foundation.e.apps.install.pkg.PwaManager.Companion.PWA_PLAYER
-
-
-@AndroidEntryPoint
-class LocalPWAInstaller : Service() {
- @Inject
- lateinit var pwaManager: PwaManager
-
- override fun onCreate() {
- super.onCreate()
- getSystemService(NotificationManager::class.java).createNotificationChannel(
- NotificationChannel(CHANNEL_ID, getString(R.string.pwa),
- NotificationManager.IMPORTANCE_LOW)
- )
- }
-
- override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
- // Ensure the service is in the foreground
- // It is required to install PWA
- startForeground(NOTIFICATION_ID, createNotification(), ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC)
-
- CoroutineScope(Dispatchers.IO).launch {
- // Add a short delay to allow foreground state to settle
- delay(DELAY_BEFORE_INSTALL_MS)
- installPWA()
- }
-
- return START_NOT_STICKY
- }
-
- private fun createNotification() = NotificationCompat.Builder(this, CHANNEL_ID)
- .setContentTitle(getString(R.string.pwa))
- .setContentText(getString(R.string.installing))
- .setSmallIcon(R.drawable.app_lounge_notification_icon)
- .setPriority(NotificationCompat.PRIORITY_LOW)
- .build()
-
- private suspend fun installPWA() {
- val preferences = getSharedPreferences(PREFERENCES_FILE_NAME, Context.MODE_PRIVATE)
-
- // Pwa info
- val pwaUrl = "https://accounts.murena.io/auth"
- val pwaName = "Workspace"
-
- val localPwa = AppInstall(
- id = UUID.randomUUID().toString(),
- source = Source.LOCAL_PWA,
- name = pwaName,
- downloadURLList = mutableListOf(pwaUrl),
- iconImageUrl = (R.drawable.murena_pwa_logo).toString()
- )
-
- val wasInstalledBefore = preferences.getBoolean(pwaUrl, false)
- if (getPwaStatus(localPwa) != Status.INSTALLED && !wasInstalledBefore) {
- pwaManager.installPWAApp(localPwa)
- Timber.d("Installed PWA: ${localPwa.name}")
-
- // Mark as installed
- preferences.edit {
- putBoolean(pwaUrl, true)
- }
- } else {
- Timber.d("PWA already installed: ${localPwa.name}")
- }
-
- stopSelf()
- }
-
- private fun getPwaStatus(app: AppInstall): Status {
- val urlToCheck = app.downloadURLList.firstOrNull() ?: return Status.UNAVAILABLE
-
- val isInstalled = contentResolver.query(
- PWA_PLAYER.toUri(),
- arrayOf("url"),
- null, null, null
- )?.use { cursor ->
- generateSequence { if (cursor.moveToNext()) cursor else null }
- .any { it.getString(it.getColumnIndexOrThrow("url")) == urlToCheck }
- } ?: false
-
- return if (isInstalled) Status.INSTALLED else Status.UNAVAILABLE
- }
-
- override fun onBind(intent: Intent?): IBinder? = null
-
- companion object {
- private const val CHANNEL_ID = "PWA_INSTALLATION_CHANNEL"
- private const val PREFERENCES_FILE_NAME = "local_pwa_list"
- private const val NOTIFICATION_ID = 1
- private const val DELAY_BEFORE_INSTALL_MS = 1000L
- }
-}
diff --git a/app/src/main/res/drawable-nodpi/murena_pwa_logo.webp b/app/src/main/res/drawable-nodpi/murena_pwa_logo.webp
deleted file mode 100644
index a21d79ab51458677f81b61cf0e90854aa0c20b52..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/drawable-nodpi/murena_pwa_logo.webp and /dev/null differ