diff --git a/app/src/main/java/com/aurora/store/ComposeActivity.kt b/app/src/main/java/com/aurora/store/ComposeActivity.kt index 5a47d37c9..85582482d 100644 --- a/app/src/main/java/com/aurora/store/ComposeActivity.kt +++ b/app/src/main/java/com/aurora/store/ComposeActivity.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ diff --git a/app/src/main/java/com/aurora/store/compose/composable/DownloadListItem.kt b/app/src/main/java/com/aurora/store/compose/composable/DownloadListItem.kt index 9fe4551a0..216004a32 100644 --- a/app/src/main/java/com/aurora/store/compose/composable/DownloadListItem.kt +++ b/app/src/main/java/com/aurora/store/compose/composable/DownloadListItem.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ diff --git a/app/src/main/java/com/aurora/store/compose/composable/Header.kt b/app/src/main/java/com/aurora/store/compose/composable/Header.kt index 9bda7ea90..1bf179455 100644 --- a/app/src/main/java/com/aurora/store/compose/composable/Header.kt +++ b/app/src/main/java/com/aurora/store/compose/composable/Header.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ diff --git a/app/src/main/java/com/aurora/store/compose/composable/Info.kt b/app/src/main/java/com/aurora/store/compose/composable/Info.kt index 0800f2df3..05ddee912 100644 --- a/app/src/main/java/com/aurora/store/compose/composable/Info.kt +++ b/app/src/main/java/com/aurora/store/compose/composable/Info.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ diff --git a/app/src/main/java/com/aurora/store/compose/composable/LinkListItem.kt b/app/src/main/java/com/aurora/store/compose/composable/LinkListItem.kt index 1b0455ed2..b6869af4c 100644 --- a/app/src/main/java/com/aurora/store/compose/composable/LinkListItem.kt +++ b/app/src/main/java/com/aurora/store/compose/composable/LinkListItem.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ diff --git a/app/src/main/java/com/aurora/store/compose/composable/MicroG.kt b/app/src/main/java/com/aurora/store/compose/composable/MicroG.kt index 887848043..cd5cb855a 100644 --- a/app/src/main/java/com/aurora/store/compose/composable/MicroG.kt +++ b/app/src/main/java/com/aurora/store/compose/composable/MicroG.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ diff --git a/app/src/main/java/com/aurora/store/compose/navigation/NavDisplay.kt b/app/src/main/java/com/aurora/store/compose/navigation/NavDisplay.kt index fb8c6d988..96ff65379 100644 --- a/app/src/main/java/com/aurora/store/compose/navigation/NavDisplay.kt +++ b/app/src/main/java/com/aurora/store/compose/navigation/NavDisplay.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ @@ -8,7 +9,10 @@ package com.aurora.store.compose.navigation import android.content.Intent import androidx.activity.compose.LocalActivity import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.platform.LocalContext +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.compose.LifecycleEventEffect import androidx.lifecycle.viewmodel.navigation3.rememberViewModelStoreNavEntryDecorator import androidx.navigation.NavDeepLinkBuilder import androidx.navigation3.runtime.NavKey @@ -16,6 +20,10 @@ import androidx.navigation3.runtime.entryProvider import androidx.navigation3.runtime.rememberNavBackStack import androidx.navigation3.runtime.rememberSaveableStateHolderNavEntryDecorator import androidx.navigation3.ui.NavDisplay +import com.aurora.Constants.PACKAGE_NAME_GMS +import com.aurora.extensions.toast +import com.aurora.store.AuroraApp +import com.aurora.store.ComposeActivity import com.aurora.store.MainActivity import com.aurora.store.R import com.aurora.store.compose.ui.about.AboutScreen @@ -33,6 +41,11 @@ import com.aurora.store.compose.ui.onboarding.OnboardingScreen import com.aurora.store.compose.ui.preferences.installation.InstallerScreen import com.aurora.store.compose.ui.search.SearchScreen import com.aurora.store.compose.ui.spoof.SpoofScreen +import com.aurora.store.data.event.InstallerEvent +import com.aurora.store.data.model.AccountType +import com.aurora.store.data.providers.AccountProvider +import com.aurora.store.util.PackageUtil +import com.aurora.store.util.Preferences /** * Navigation display for compose screens @@ -58,6 +71,36 @@ fun NavDisplay(startDestination: NavKey) { if (backstack.size == 1) activity?.finish() else backstack.removeLastOrNull() } + val context = LocalContext.current + + fun isMicroGAuthInvalidated(): Boolean = + Preferences.getBoolean(context, Preferences.PREFERENCE_AUTH_VIA_MICROG, false) && + AccountProvider.getAccountType(context) == AccountType.GOOGLE && + !PackageUtil.hasSupportedMicroGVariant(context) + + fun handleMicroGRemoved() { + context.toast(R.string.microg_removed_auth_warning) + AccountProvider.logout(context) + val intent = Intent(context, ComposeActivity::class.java).apply { + addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK) + } + context.startActivity(intent) + } + + // Check every time the screen resumes in case microG was removed while Aurora was in background. + LifecycleEventEffect(Lifecycle.Event.ON_RESUME) { + if (isMicroGAuthInvalidated()) handleMicroGRemoved() + } + + // Also react immediately if the GMS package is uninstalled while Aurora is in the foreground. + LaunchedEffect(Unit) { + AuroraApp.events.installerEvent.collect { event -> + if (event is InstallerEvent.Uninstalled && event.packageName == PACKAGE_NAME_GMS) { + if (isMicroGAuthInvalidated()) handleMicroGRemoved() + } + } + } + NavDisplay( backStack = backstack, entryDecorators = listOf( diff --git a/app/src/main/java/com/aurora/store/compose/theme/Theme.kt b/app/src/main/java/com/aurora/store/compose/theme/Theme.kt index 0f9efeebb..3f6365fda 100644 --- a/app/src/main/java/com/aurora/store/compose/theme/Theme.kt +++ b/app/src/main/java/com/aurora/store/compose/theme/Theme.kt @@ -1,14 +1,13 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2024-2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ package com.aurora.store.compose.theme -import android.app.Activity -import android.content.Context -import android.content.ContextWrapper import android.os.Build +import androidx.activity.compose.LocalActivity import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.material3.MaterialExpressiveTheme import androidx.compose.material3.MaterialTheme @@ -31,6 +30,7 @@ import com.aurora.store.util.Preferences @Composable fun AuroraTheme(content: @Composable () -> Unit) { val context = LocalContext.current + val themeStyle = Preferences.getInteger(context, Preferences.PREFERENCE_THEME_STYLE) val isDynamicColorSupported = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S @@ -63,10 +63,11 @@ fun AuroraTheme(content: @Composable () -> Unit) { * This is necessary on OEM devices that don't properly support dynamic theming and may have issues with light/dark status bar icons. */ val view = LocalView.current + val activity = LocalActivity.current if (!view.isInEditMode) { SideEffect { - val activity = view.context.findActivity() ?: return@SideEffect - val window = activity.window + val currentActivity = activity ?: return@SideEffect + val window = currentActivity.window // Transparent system bars window.statusBarColor = android.graphics.Color.TRANSPARENT @@ -84,9 +85,3 @@ fun AuroraTheme(content: @Composable () -> Unit) { MaterialExpressiveTheme(colorScheme = colorScheme, content = content) } - -tailrec fun Context.findActivity(): Activity? = when (this) { - is Activity -> this - is ContextWrapper -> baseContext.findActivity() - else -> null -} diff --git a/app/src/main/java/com/aurora/store/compose/ui/blacklist/BlacklistScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/blacklist/BlacklistScreen.kt index 47e4c0430..f82cb0e0b 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/blacklist/BlacklistScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/blacklist/BlacklistScreen.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ diff --git a/app/src/main/java/com/aurora/store/compose/ui/commons/PermissionRationaleScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/commons/PermissionRationaleScreen.kt index fa6b5d720..1a27bb5c6 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/commons/PermissionRationaleScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/commons/PermissionRationaleScreen.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ @@ -8,7 +9,7 @@ package com.aurora.store.compose.ui.commons import androidx.compose.foundation.layout.padding import androidx.compose.material3.Scaffold import androidx.compose.material3.adaptive.WindowAdaptiveInfo -import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo +import androidx.compose.material3.adaptive.currentWindowAdaptiveInfoV2 import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier @@ -57,7 +58,7 @@ private fun ScreenContent( permissions: List = emptyList(), onNavigateUp: () -> Unit = {}, onPermissionCallback: (type: PermissionType) -> Unit = {}, - windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo() + windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfoV2() ) { Scaffold( topBar = { diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/AppDetailsScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/details/AppDetailsScreen.kt index eded62a93..9dc8d23af 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/AppDetailsScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/AppDetailsScreen.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ @@ -23,7 +24,7 @@ import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material3.Icon import androidx.compose.material3.Scaffold import androidx.compose.material3.adaptive.WindowAdaptiveInfo -import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo +import androidx.compose.material3.adaptive.currentWindowAdaptiveInfoV2 import androidx.compose.material3.adaptive.layout.AdaptStrategy import androidx.compose.material3.adaptive.layout.AnimatedPane import androidx.compose.material3.adaptive.layout.PaneAdaptedValue @@ -241,7 +242,7 @@ private fun ScreenContentApp( onUninstall: () -> Unit = {}, onOpen: () -> Unit = {}, onTestingSubscriptionChange: (subscribe: Boolean) -> Unit = {}, - windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo(), + windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfoV2(), forceSinglePane: Boolean = false, onForceRestart: () -> Unit = {} ) { diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/ExodusScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/details/ExodusScreen.kt index 0ed8a1093..f85046245 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/ExodusScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/ExodusScreen.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ @@ -17,7 +18,7 @@ import androidx.compose.material3.Icon import androidx.compose.material3.Scaffold import androidx.compose.material3.Surface import androidx.compose.material3.adaptive.WindowAdaptiveInfo -import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo +import androidx.compose.material3.adaptive.currentWindowAdaptiveInfoV2 import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue @@ -58,7 +59,7 @@ fun ExodusScreen( onNavigateUp: () -> Unit, appDetailsViewModel: AppDetailsViewModel = hiltViewModel(key = packageName), exodusViewModel: ExodusViewModel = hiltViewModel(key = "$packageName/exodus"), - windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo() + windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfoV2() ) { val context = LocalContext.current @@ -103,7 +104,7 @@ private fun ScreenContentReport( trackers: List = emptyList(), onNavigateUp: () -> Unit = {}, onRequestAnalysis: () -> Unit = {}, - windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo() + windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfoV2() ) { val context = LocalContext.current @@ -175,7 +176,7 @@ private fun ScreenContentError( topAppBarTitle: String? = null, onNavigateUp: () -> Unit = {}, onRequestAnalysis: () -> Unit = {}, - windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo() + windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfoV2() ) { Scaffold( topBar = { diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/ManualDownloadScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/details/ManualDownloadScreen.kt index d99d7d589..81384ac1e 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/ManualDownloadScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/ManualDownloadScreen.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ @@ -25,7 +26,7 @@ import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Text import androidx.compose.material3.adaptive.WindowAdaptiveInfo -import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo +import androidx.compose.material3.adaptive.currentWindowAdaptiveInfoV2 import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue @@ -71,7 +72,7 @@ fun ManualDownloadScreen( onNavigateUp: () -> Unit, onRequestInstall: (requestedApp: App) -> Unit, viewModel: AppDetailsViewModel = hiltViewModel(key = packageName), - windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo() + windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfoV2() ) { val app by viewModel.app.collectAsStateWithLifecycle() val state by viewModel.state.collectAsStateWithLifecycle() @@ -106,7 +107,7 @@ private fun ScreenContent( currentVersionCode: Long = 0L, onNavigateUp: () -> Unit = {}, onRequestInstall: (versionCode: Long) -> Unit = {}, - windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo() + windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfoV2() ) { val coroutineScope = rememberCoroutineScope() val snackBarHostState = remember { SnackbarHostState() } diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/MicroGScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/details/MicroGScreen.kt index e043478cd..2b044cd26 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/MicroGScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/MicroGScreen.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ @@ -20,7 +21,7 @@ import androidx.compose.material3.Scaffold import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.material3.adaptive.WindowAdaptiveInfo -import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo +import androidx.compose.material3.adaptive.currentWindowAdaptiveInfoV2 import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment @@ -58,7 +59,7 @@ fun MicroGScreen( onIgnore: (Boolean) -> Unit, appDetailsViewModel: AppDetailsViewModel = hiltViewModel(key = packageName), viewModel: MicroGViewModel = hiltViewModel(), - windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo() + windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfoV2() ) { val app by appDetailsViewModel.app.collectAsStateWithLifecycle() val topAppBarTitle = when { @@ -84,7 +85,7 @@ private fun ScreenContent( onInstall: () -> Unit = {}, onRetry: () -> Unit = {}, onIgnore: (Boolean) -> Unit = {}, - windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo() + windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfoV2() ) { val context = LocalContext.current val listState = rememberLazyListState() diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/MoreScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/details/MoreScreen.kt index 93202195c..f9a66ccaa 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/MoreScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/MoreScreen.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ @@ -18,7 +19,7 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.adaptive.WindowAdaptiveInfo -import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo +import androidx.compose.material3.adaptive.currentWindowAdaptiveInfoV2 import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment @@ -78,7 +79,7 @@ private fun ScreenContent( dependencies: List? = null, onNavigateUp: () -> Unit = {}, onNavigateToAppDetails: (packageName: String) -> Unit = {}, - windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo() + windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfoV2() ) { val topAppBarTitle = when { windowAdaptiveInfo.isWindowCompact -> app.displayName diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/PermissionScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/details/PermissionScreen.kt index 4cb83a20e..d3d52194f 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/PermissionScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/PermissionScreen.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ @@ -15,7 +16,7 @@ import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material3.Scaffold import androidx.compose.material3.adaptive.WindowAdaptiveInfo -import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo +import androidx.compose.material3.adaptive.currentWindowAdaptiveInfoV2 import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment @@ -54,7 +55,7 @@ fun PermissionScreen( factory.create(appDetailsViewModel.app.value!!.permissions) } ), - windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo() + windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfoV2() ) { val app by appDetailsViewModel.app.collectAsStateWithLifecycle() val permissionsInfo by permissionViewModel.permissionsInfo.collectAsStateWithLifecycle() @@ -76,7 +77,7 @@ private fun ScreenContent( topAppBarTitle: String? = null, permissionsInfo: Map = emptyMap(), onNavigateUp: () -> Unit = {}, - windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo() + windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfoV2() ) { val packageManager = LocalContext.current.packageManager diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/ReviewScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/details/ReviewScreen.kt index b7f5eb395..79b295803 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/ReviewScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/ReviewScreen.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ @@ -21,7 +22,7 @@ import androidx.compose.material3.Icon import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.adaptive.WindowAdaptiveInfo -import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo +import androidx.compose.material3.adaptive.currentWindowAdaptiveInfoV2 import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -71,7 +72,7 @@ fun ReviewScreen( factory.create(appDetailsViewModel.app.value!!.packageName) } ), - windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo() + windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfoV2() ) { val app by appDetailsViewModel.app.collectAsStateWithLifecycle() val reviews = reviewViewModel.reviews.collectAsLazyPagingItems() @@ -95,7 +96,7 @@ private fun ScreenContent( onNavigateUp: () -> Unit = {}, reviews: LazyPagingItems = emptyPagingItems(), onFilter: (filter: Review.Filter) -> Unit = {}, - windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo() + windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfoV2() ) { Scaffold( topBar = { diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/ScreenshotScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/details/ScreenshotScreen.kt index e62c7129c..ab808a78e 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/ScreenshotScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/ScreenshotScreen.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ @@ -11,7 +12,7 @@ import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.material3.Scaffold import androidx.compose.material3.adaptive.WindowAdaptiveInfo -import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo +import androidx.compose.material3.adaptive.currentWindowAdaptiveInfoV2 import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue @@ -37,7 +38,7 @@ fun ScreenshotScreen( index: Int, onNavigateUp: () -> Unit, viewModel: AppDetailsViewModel = hiltViewModel(key = packageName), - windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo() + windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfoV2() ) { val app by viewModel.app.collectAsStateWithLifecycle() @@ -60,7 +61,7 @@ private fun ScreenContent( onNavigateUp: () -> Unit = {}, screenshots: List = emptyList(), index: Int = 0, - windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo() + windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfoV2() ) { val displayMetrics = LocalContext.current.resources.displayMetrics val pagerState = rememberPagerState(initialPage = index) { screenshots.size } diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/composable/Actions.kt b/app/src/main/java/com/aurora/store/compose/ui/details/composable/Actions.kt index f374409a4..d74fbbe83 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/composable/Actions.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/composable/Actions.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ @@ -16,7 +17,7 @@ import androidx.compose.material3.Button import androidx.compose.material3.FilledTonalButton import androidx.compose.material3.Text import androidx.compose.material3.adaptive.WindowAdaptiveInfo -import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo +import androidx.compose.material3.adaptive.currentWindowAdaptiveInfoV2 import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.dimensionResource @@ -47,7 +48,7 @@ fun Actions( isSecondaryActionEnabled: Boolean = true, onPrimaryAction: () -> Unit = {}, onSecondaryAction: () -> Unit = {}, - windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo() + windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfoV2() ) { Row( modifier = Modifier diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/composable/Changelog.kt b/app/src/main/java/com/aurora/store/compose/ui/details/composable/Changelog.kt index 017112d85..f3775c0b9 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/composable/Changelog.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/composable/Changelog.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/composable/Details.kt b/app/src/main/java/com/aurora/store/compose/ui/details/composable/Details.kt index 7449d3b99..ad26a55c8 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/composable/Details.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/composable/Details.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/composable/RatingAndReviews.kt b/app/src/main/java/com/aurora/store/compose/ui/details/composable/RatingAndReviews.kt index 6690a9398..f4e1b379e 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/composable/RatingAndReviews.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/composable/RatingAndReviews.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ @@ -20,7 +21,7 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.material3.adaptive.WindowAdaptiveInfo -import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo +import androidx.compose.material3.adaptive.currentWindowAdaptiveInfoV2 import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -58,7 +59,7 @@ fun RatingAndReviews( rating: Rating, featuredReviews: List = emptyList(), onNavigateToDetailsReview: () -> Unit = {}, - windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo() + windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfoV2() ) { val stars = listOf( rating.oneStar, diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/composable/Screenshots.kt b/app/src/main/java/com/aurora/store/compose/ui/details/composable/Screenshots.kt index 641d56f9d..a325d69a0 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/composable/Screenshots.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/composable/Screenshots.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/composable/Tags.kt b/app/src/main/java/com/aurora/store/compose/ui/details/composable/Tags.kt index d48101a3e..12ffef31d 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/composable/Tags.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/composable/Tags.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/composable/Testing.kt b/app/src/main/java/com/aurora/store/compose/ui/details/composable/Testing.kt index d3dee3293..58d3bc4d1 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/composable/Testing.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/composable/Testing.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/menu/AppDetailsMenu.kt b/app/src/main/java/com/aurora/store/compose/ui/details/menu/AppDetailsMenu.kt index fbc801f4d..07f909a3d 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/menu/AppDetailsMenu.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/menu/AppDetailsMenu.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/menu/MenuItem.kt b/app/src/main/java/com/aurora/store/compose/ui/details/menu/MenuItem.kt index d0f064acc..77ed06ec0 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/menu/MenuItem.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/menu/MenuItem.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ diff --git a/app/src/main/java/com/aurora/store/compose/ui/dev/DevProfileScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/dev/DevProfileScreen.kt index 0ccbd3f88..054f55c8f 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/dev/DevProfileScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/dev/DevProfileScreen.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ @@ -10,7 +11,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material3.Scaffold import androidx.compose.material3.adaptive.WindowAdaptiveInfo -import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo +import androidx.compose.material3.adaptive.currentWindowAdaptiveInfoV2 import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier @@ -83,7 +84,7 @@ private fun ScreenContent( topAppBarTitle: String, onNavigateUp: () -> Unit = {}, onNavigateToAppDetails: (packageName: String) -> Unit = {}, - windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo() + windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfoV2() ) { Scaffold( topBar = { diff --git a/app/src/main/java/com/aurora/store/compose/ui/downloads/DownloadsScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/downloads/DownloadsScreen.kt index 0fd65ac16..068c5fe09 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/downloads/DownloadsScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/downloads/DownloadsScreen.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ diff --git a/app/src/main/java/com/aurora/store/compose/ui/favourite/FavouriteScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/favourite/FavouriteScreen.kt index 7bd470b84..75306c346 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/favourite/FavouriteScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/favourite/FavouriteScreen.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ diff --git a/app/src/main/java/com/aurora/store/compose/ui/favourite/menu/FavouriteMenu.kt b/app/src/main/java/com/aurora/store/compose/ui/favourite/menu/FavouriteMenu.kt index 11eedd5fd..0f6f8d4d0 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/favourite/menu/FavouriteMenu.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/favourite/menu/FavouriteMenu.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ diff --git a/app/src/main/java/com/aurora/store/compose/ui/installed/InstalledScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/installed/InstalledScreen.kt index f9d78cf61..84e8396e3 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/installed/InstalledScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/installed/InstalledScreen.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ diff --git a/app/src/main/java/com/aurora/store/compose/ui/onboarding/MicroGPage.kt b/app/src/main/java/com/aurora/store/compose/ui/onboarding/MicroGPage.kt index 671597fb7..b0ff6d245 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/onboarding/MicroGPage.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/onboarding/MicroGPage.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ diff --git a/app/src/main/java/com/aurora/store/compose/ui/onboarding/OnboardingScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/onboarding/OnboardingScreen.kt index 2d4d80891..2dc220178 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/onboarding/OnboardingScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/onboarding/OnboardingScreen.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ @@ -24,7 +25,7 @@ import androidx.compose.material3.TextButton import androidx.compose.material3.TopAppBar import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.adaptive.WindowAdaptiveInfo -import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo +import androidx.compose.material3.adaptive.currentWindowAdaptiveInfoV2 import androidx.compose.runtime.Composable import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment @@ -71,7 +72,7 @@ private fun ScreenContent( onFinishOnboarding: () -> Unit = {}, uiState: OnboardingUiState, onMicrogTOSChecked: (Boolean) -> Unit, - windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo() + windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfoV2() ) { val pagerState = rememberPagerState { pages.size } val coroutineScope = rememberCoroutineScope() diff --git a/app/src/main/java/com/aurora/store/compose/ui/onboarding/PermissionsPage.kt b/app/src/main/java/com/aurora/store/compose/ui/onboarding/PermissionsPage.kt index 7018c6724..96386d853 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/onboarding/PermissionsPage.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/onboarding/PermissionsPage.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ diff --git a/app/src/main/java/com/aurora/store/compose/ui/onboarding/WelcomePage.kt b/app/src/main/java/com/aurora/store/compose/ui/onboarding/WelcomePage.kt index 192307972..de260c6da 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/onboarding/WelcomePage.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/onboarding/WelcomePage.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ diff --git a/app/src/main/java/com/aurora/store/compose/ui/search/SearchScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/search/SearchScreen.kt index e0e571fc2..b20cf151b 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/search/SearchScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/search/SearchScreen.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ diff --git a/app/src/main/java/com/aurora/store/data/helper/DownloadHelper.kt b/app/src/main/java/com/aurora/store/data/helper/DownloadHelper.kt index bd902e1e4..b08f680e8 100644 --- a/app/src/main/java/com/aurora/store/data/helper/DownloadHelper.kt +++ b/app/src/main/java/com/aurora/store/data/helper/DownloadHelper.kt @@ -116,6 +116,14 @@ class DownloadHelper @Inject constructor( downloadDao.updateStatus(packageName, DownloadStatus.CANCELLED) } + /** + * Removes the download record from the database without deleting downloaded files. + * @param packageName Name of the package + */ + suspend fun removeDownload(packageName: String) { + downloadDao.delete(packageName) + } + /** * Clears the entry & downloaded files for the given package * @param packageName Name of the package of the app diff --git a/app/src/main/java/com/aurora/store/data/model/BlacklistAppItem.kt b/app/src/main/java/com/aurora/store/data/model/BlacklistAppItem.kt index 3df97745c..ed31f2877 100644 --- a/app/src/main/java/com/aurora/store/data/model/BlacklistAppItem.kt +++ b/app/src/main/java/com/aurora/store/data/model/BlacklistAppItem.kt @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2025 The Calyx Institute + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-License-Identifier: GPL-3.0-or-later */ diff --git a/app/src/main/java/com/aurora/store/data/paging/GenericPagingSource.kt b/app/src/main/java/com/aurora/store/data/paging/GenericPagingSource.kt index 768592bb3..7f8939864 100644 --- a/app/src/main/java/com/aurora/store/data/paging/GenericPagingSource.kt +++ b/app/src/main/java/com/aurora/store/data/paging/GenericPagingSource.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ @@ -28,7 +29,7 @@ class GenericPagingSource( ) : PagingSource() { companion object { - private const val DEFAULT_PAGE_SIZE = 20 + const val DEFAULT_PAGE_SIZE = 20 /** * Method to create pager objects using [PagingSource] diff --git a/app/src/main/java/com/aurora/store/data/providers/AccountProvider.kt b/app/src/main/java/com/aurora/store/data/providers/AccountProvider.kt index 156c4ee9f..f571a8a9f 100644 --- a/app/src/main/java/com/aurora/store/data/providers/AccountProvider.kt +++ b/app/src/main/java/com/aurora/store/data/providers/AccountProvider.kt @@ -80,5 +80,6 @@ object AccountProvider { Preferences.remove(context, Constants.ACCOUNT_EMAIL_PLAIN) Preferences.remove(context, Constants.ACCOUNT_AAS_PLAIN) Preferences.remove(context, Constants.ACCOUNT_AUTH_PLAIN) + Preferences.remove(context, Preferences.PREFERENCE_AUTH_VIA_MICROG) } } diff --git a/app/src/main/java/com/aurora/store/data/work/ExportWorker.kt b/app/src/main/java/com/aurora/store/data/work/ExportWorker.kt index 047bc737d..fbf66a286 100644 --- a/app/src/main/java/com/aurora/store/data/work/ExportWorker.kt +++ b/app/src/main/java/com/aurora/store/data/work/ExportWorker.kt @@ -1,3 +1,8 @@ +/* + * SPDX-FileCopyrightText: 2026 Aurora OSS + * SPDX-License-Identifier: GPL-3.0-or-later + */ + package com.aurora.store.data.work import android.app.NotificationManager diff --git a/app/src/main/java/com/aurora/store/util/Preferences.kt b/app/src/main/java/com/aurora/store/util/Preferences.kt index 38bf4f06d..73a9ec17f 100644 --- a/app/src/main/java/com/aurora/store/util/Preferences.kt +++ b/app/src/main/java/com/aurora/store/util/Preferences.kt @@ -48,6 +48,7 @@ object Preferences { const val PREFERENCE_PROXY_INFO = "PREFERENCE_PROXY_INFO" const val PREFERENCE_MICROG_AUTH = "PREFERENCE_MICROG_AUTH" + const val PREFERENCE_AUTH_VIA_MICROG = "PREFERENCE_AUTH_VIA_MICROG" const val PREFERENCE_DISPENSER_URLS = "PREFERENCE_DISPENSER_URLS" const val PREFERENCE_VENDING_VERSION = "PREFERENCE_VENDING_VERSION" diff --git a/app/src/main/java/com/aurora/store/viewmodel/all/InstalledViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/all/InstalledViewModel.kt index 08dbc678f..155396ef9 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/all/InstalledViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/all/InstalledViewModel.kt @@ -27,6 +27,7 @@ import androidx.paging.cachedIn import com.aurora.gplayapi.data.models.App import com.aurora.gplayapi.helpers.web.WebAppDetailsHelper import com.aurora.store.data.PageResult +import com.aurora.store.data.paging.GenericPagingSource import com.aurora.store.data.paging.GenericPagingSource.Companion.manualPager import com.aurora.store.data.providers.BlacklistProvider import com.aurora.store.util.PackageUtil @@ -65,7 +66,7 @@ class InstalledViewModel @Inject constructor( ) { PackageUtil.getAllValidPackages(context) .filterNot { it.packageName in blacklist } - .chunked(PAGE_SIZE) + .chunked(GenericPagingSource.DEFAULT_PAGE_SIZE) } init { @@ -73,7 +74,7 @@ class InstalledViewModel @Inject constructor( } private fun fetchApps() { - manualPager(pageSize = PAGE_SIZE) { page -> + manualPager(pageSize = GenericPagingSource.DEFAULT_PAGE_SIZE) { page -> // page is 1-indexed, but list is 0-indexed val chunks = pagedPackages.await() val chunk = chunks.getOrNull(page - 1) @@ -85,8 +86,4 @@ class InstalledViewModel @Inject constructor( .onEach { _apps.value = it } .launchIn(viewModelScope) } - - companion object { - private const val PAGE_SIZE = 20 - } } diff --git a/app/src/main/java/com/aurora/store/viewmodel/auth/AuthViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/auth/AuthViewModel.kt index 7b092443c..20a06c9b3 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/auth/AuthViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/auth/AuthViewModel.kt @@ -35,6 +35,7 @@ import com.aurora.store.data.model.AuthState import com.aurora.store.data.providers.AccountProvider import com.aurora.store.data.providers.AuthProvider import com.aurora.store.util.AC2DMTask +import com.aurora.store.util.PackageUtil import com.aurora.store.util.Preferences import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.qualifiers.ApplicationContext @@ -171,13 +172,26 @@ class AuthViewModel @Inject constructor( _authState.value = AuthState.Verifying if (authData.authToken.isNotEmpty() && authData.deviceConfigToken.isNotEmpty()) { authProvider.saveAuthData(authData) + val tokenType = + if (authData.aasToken.isBlank()) AuthHelper.Token.AUTH else AuthHelper.Token.AAS AccountProvider.login( context, authData.email, - authData.aasToken.ifBlank { authData.authToken }, - if (authData.aasToken.isBlank()) AuthHelper.Token.AUTH else AuthHelper.Token.AAS, + authData.aasToken.ifBlank { + authData.authToken + }, + tokenType, accountType ) + // Record whether this Google session relies on microG's AccountManager so we + // can warn the user if microG is later uninstalled. + Preferences.putBoolean( + context, + Preferences.PREFERENCE_AUTH_VIA_MICROG, + accountType == AccountType.GOOGLE && + tokenType == AuthHelper.Token.AUTH && + PackageUtil.hasSupportedMicroGVariant(context) + ) _authState.value = AuthState.SignedIn } else { authProvider.removeAuthData(context) diff --git a/app/src/main/java/com/aurora/store/viewmodel/blacklist/BlacklistViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/blacklist/BlacklistViewModel.kt index fcb880afb..e5e694ac6 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/blacklist/BlacklistViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/blacklist/BlacklistViewModel.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ diff --git a/app/src/main/java/com/aurora/store/viewmodel/details/AppDetailsViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/details/AppDetailsViewModel.kt index 5ec664f7d..1669913ce 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/details/AppDetailsViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/details/AppDetailsViewModel.kt @@ -155,12 +155,22 @@ class AppDetailsViewModel @Inject constructor( _app.value = appDetailsHelper.getAppByPackageName(packageName).copy( isInstalled = PackageUtil.isInstalled(context, packageName) ) - // Seed state from any in-flight download for this package so reopening - // the screen doesn't briefly flash the default install action while the - // download flow catches up. - _state.value = downloadHelper.getDownload(packageName) - ?.let { stateFromDownload(it) } - ?: defaultAppState + val existingDownload = downloadHelper.getDownload(packageName) + + // A COMPLETED record for an app that is no longer installed means the app was + // installed then removed while Aurora held a stale record. + // Remove it so the live download observer doesn't lock the UI in Installing state + // indefinitely. + if (existingDownload?.status == DownloadStatus.COMPLETED && !isInstalled) { + downloadHelper.removeDownload(packageName) + _state.value = defaultAppState + } else { + // Seed state from any in-flight download for this package so reopening + // the screen doesn't briefly flash the default install action while the + // download flow catches up. + _state.value = + existingDownload?.let { stateFromDownload(it) } ?: defaultAppState + } } catch (exception: Exception) { Log.e(TAG, "Failed to fetch app details", exception) _app.value = null diff --git a/app/src/main/java/com/aurora/store/viewmodel/details/ReviewViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/details/ReviewViewModel.kt index 100bb8448..f91e3e2ce 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/details/ReviewViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/details/ReviewViewModel.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later */ diff --git a/app/src/main/java/com/aurora/store/viewmodel/search/SearchViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/search/SearchViewModel.kt index d39b92ee8..ead7a2ef6 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/search/SearchViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/search/SearchViewModel.kt @@ -1,4 +1,5 @@ /* + * SPDX-FileCopyrightText: 2026 Aurora OSS * SPDX-FileCopyrightText: 2021 Rahul Kumar Patel * SPDX-FileCopyrightText: 2025 The Calyx Institute * SPDX-License-Identifier: GPL-3.0-or-later diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4b71e8316..c7df15ff0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -392,6 +392,7 @@ Best suited for devices running below Android 4.4 Installer for background installations Requires Aurora Services to be installed as a privileged-system app + microG is no longer installed. Run setup again to keep things working smoothly. Requires microG companion app to be installed Helps you bypass App Integrity (installer only) check Full-featured open source package manager