From 3bf7227a55bf426d24d8de37fa5344af1b2db069 Mon Sep 17 00:00:00 2001 From: Egor Date: Fri, 13 Feb 2026 11:59:06 -0800 Subject: [PATCH] fix app deletion --- .../java/app/lonecloud/prism/Distributor.kt | 7 +++++ .../prism/activities/MainViewModel.kt | 26 ++++++++++++------- .../prism/activities/ui/MainScreen.kt | 5 +++- .../prism/services/PrismInternalService.kt | 7 ----- 4 files changed, 28 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/app/lonecloud/prism/Distributor.kt b/app/src/main/java/app/lonecloud/prism/Distributor.kt index ffa9942..754f000 100644 --- a/app/src/main/java/app/lonecloud/prism/Distributor.kt +++ b/app/src/main/java/app/lonecloud/prism/Distributor.kt @@ -39,6 +39,13 @@ object Distributor : UnifiedPushDistributor() { ) = backendRegisterNewChannelId(context, packageName, channelId, title, vapid, description) override fun backendUnregisterChannelId(context: Context, channelId: String) { + val db = getDb(context) + val app = db.listApps().find { it.connectorToken == channelId } + if (app?.description?.startsWith("target:") == true) { + val appName = app.title ?: app.packageName + PrismServerClient.deleteApp(context, appName) + } + MessageSender.send( context, ClientMessage.Unregister( diff --git a/app/src/main/java/app/lonecloud/prism/activities/MainViewModel.kt b/app/src/main/java/app/lonecloud/prism/activities/MainViewModel.kt index 6ced2a8..917b0ed 100644 --- a/app/src/main/java/app/lonecloud/prism/activities/MainViewModel.kt +++ b/app/src/main/java/app/lonecloud/prism/activities/MainViewModel.kt @@ -82,15 +82,23 @@ class MainViewModel( fun deleteSelection() { viewModelScope.launch { - val state = registrationsViewModel.state - val tokenList = state.list.filter { it.selected }.map { it.token } - messenger?.sendIMessage(InternalOpcode.REG_DELETE, "regs" to tokenList) - registrationsViewModel.state = RegistrationListState( - list = state.list.filter { - !it.selected - }, - selectionCount = 0 - ) + Log.d(TAG, "deleteSelection called") + application?.let { app -> + val selectedTokens = registrationsViewModel.state.list + .filter { it.selected } + .map { it.token } + + Log.d(TAG, "Deleting ${selectedTokens.size} apps: $selectedTokens") + + selectedTokens.forEach { token -> + val intent = android.content.Intent("org.unifiedpush.android.distributor.UNREGISTER") + intent.setPackage(app.packageName) + intent.putExtra("token", token) + app.sendBroadcast(intent) + } + + registrationsViewModel.unselectAll() + } } } diff --git a/app/src/main/java/app/lonecloud/prism/activities/ui/MainScreen.kt b/app/src/main/java/app/lonecloud/prism/activities/ui/MainScreen.kt index 32f678e..90a6388 100644 --- a/app/src/main/java/app/lonecloud/prism/activities/ui/MainScreen.kt +++ b/app/src/main/java/app/lonecloud/prism/activities/ui/MainScreen.kt @@ -44,7 +44,10 @@ fun MainAppBarOrSelection(viewModel: MainViewModel, onGoToSettings: () -> Unit) val registrationsState = viewModel.registrationsViewModel.state if (registrationsState.selectionCount > 0) { UnregisterBarUi( - viewModel = viewModel.registrationsViewModel + viewModel = viewModel.registrationsViewModel, + onDelete = { + viewModel.deleteSelection() + } ) } else { MainAppBar( diff --git a/app/src/main/java/app/lonecloud/prism/services/PrismInternalService.kt b/app/src/main/java/app/lonecloud/prism/services/PrismInternalService.kt index b494609..ce2d6cb 100644 --- a/app/src/main/java/app/lonecloud/prism/services/PrismInternalService.kt +++ b/app/src/main/java/app/lonecloud/prism/services/PrismInternalService.kt @@ -65,13 +65,6 @@ class PrismInternalService : InternalService() { override fun registrations() = object : IRegistrations { override fun delete(registrations: List) { registrations.forEach { token -> - // Prism's custom logic: delete from Prism server if it's a "target:" app - val dbApp = db.listApps().find { it.connectorToken == token } - if (dbApp?.description?.startsWith("target:") == true) { - val appName = dbApp.title ?: dbApp.packageName - PrismServerClient.deleteApp(context, appName) - } - distributor.deleteApp(context, token) } }