diff --git a/app/detekt-baseline.xml b/app/detekt-baseline.xml index 4cf9c3c7f5618d9b4772d20f7c4060b4fd19df08..62a055a70f871fd0bc98a150dca97774c516dfd3 100644 --- a/app/detekt-baseline.xml +++ b/app/detekt-baseline.xml @@ -1,22 +1,4 @@ - - @@ -31,13 +13,13 @@ InstanceOfCheckForException:GPlayHttpClient.kt$GPlayHttpClient$e is SocketTimeoutException InvalidPackageDeclaration:Trackers.kt$package foundation.e.apps.data.exodus LargeClass:ApplicationFragment.kt$ApplicationFragment : TimeoutFragment - LongParameterList:ApplicationDialogFragment.kt$ApplicationDialogFragment$( drawable: Int = -1, title: String, message: String, positiveButtonText: String = "", positiveButtonAction: (() -> Unit)? = null, cancelButtonText: String = "", cancelButtonAction: (() -> Unit)? = null, cancellable: Boolean = true, onDismissListener: (() -> Unit)? = null, ) + LongParameterList:ApplicationDialogFragment.kt$ApplicationDialogFragment$( drawable: Int = -1, title: String, message: String, positiveButtonText: String = "", positiveButtonAction: (() -> Unit)? = null, cancelButtonText: String = "", cancelButtonAction: (() -> Unit)? = null, cancelable: Boolean = true, onDismissListener: (() -> Unit)? = null, ) LongParameterList:ApplicationListRVAdapter.kt$ApplicationListRVAdapter$( private val applicationInstaller: ApplicationInstaller, private val privacyInfoViewModel: PrivacyInfoViewModel, private val appInfoFetchViewModel: AppInfoFetchViewModel, private val mainActivityViewModel: MainActivityViewModel, private val currentDestinationId: Int, private var lifecycleOwner: LifecycleOwner?, private var paidAppHandler: ((Application) -> Unit)? = null ) LongParameterList:ApplicationViewModel.kt$ApplicationViewModel$( id: String, packageName: String, origin: Origin, isFdroidLink: Boolean, authObjectList: List<AuthObject>, retryBlock: (failedObjects: List<AuthObject>) -> Boolean, ) LongParameterList:CleanApkRetrofit.kt$CleanApkRetrofit$( @Query("keyword") keyword: String, @Query("source") source: String = APP_SOURCE_FOSS, @Query("type") type: String = APP_TYPE_ANY, @Query("nres") nres: Int = 20, @Query("page") page: Int = 1, @Query("by") by: String? = null, ) LongParameterList:EglExtensionProvider.kt$EglExtensionProvider$( egl10: EGL10, eglDisplay: EGLDisplay, eglConfig: EGLConfig?, ai: IntArray, ai1: IntArray?, set: MutableSet<String> ) LongParameterList:FusedManagerImpl.kt$FusedManagerImpl$( @Named("cacheDir") private val cacheDir: String, private val downloadManager: DownloadManager, private val notificationManager: NotificationManager, private val fusedDownloadRepository: FusedDownloadRepository, private val pwaManager: PWAManager, private val appLoungePackageManager: AppLoungePackageManager, @Named("download") private val downloadNotificationChannel: NotificationChannel, @Named("update") private val updateNotificationChannel: NotificationChannel, @ApplicationContext private val context: Context ) - LongParameterList:MainActivityViewModel.kt$MainActivityViewModel$( private val appLoungeDataStore: AppLoungeDataStore, private val applicationRepository: ApplicationRepository, private val fusedManagerRepository: FusedManagerRepository, private val appLoungePackageManager: AppLoungePackageManager, private val pwaManager: PWAManager, private val ecloudRepository: EcloudRepository, private val blockedAppRepository: BlockedAppRepository, private val appInstallProcessor: AppInstallProcessor, private val sessionPreference: SessionPreference ) + LongParameterList:MainActivityViewModel.kt$MainActivityViewModel$( private val appLoungeDataStore: AppLoungeDataStore, private val applicationRepository: ApplicationRepository, private val fusedManagerRepository: FusedManagerRepository, private val appLoungePackageManager: AppLoungePackageManager, private val pwaManager: PWAManager, private val ecloudRepository: EcloudRepository, private val blockedAppRepository: BlockedAppRepository, private val appInstallProcessor: AppInstallProcessor, ) LongParameterList:UpdatesManagerImpl.kt$UpdatesManagerImpl$( @ApplicationContext private val context: Context, private val appLoungePackageManager: AppLoungePackageManager, private val applicationRepository: ApplicationRepository, private val faultyAppRepository: FaultyAppRepository, private val appLoungePreference: AppLoungePreference, private val fdroidRepository: FdroidRepository, private val blockedAppRepository: BlockedAppRepository, ) LongParameterList:UpdatesWorker.kt$UpdatesWorker$( @Assisted private val context: Context, @Assisted private val params: WorkerParameters, private val updatesManagerRepository: UpdatesManagerRepository, private val dataStoreManager: DataStoreManager, private val authenticatorRepository: AuthenticatorRepository, private val appInstallProcessor: AppInstallProcessor, private val blockedAppRepository: BlockedAppRepository, ) MagicNumber:AnonymousLoginManager.kt$AnonymousLoginManager$200 @@ -74,7 +56,6 @@ MagicNumber:PackageInstallerService.kt$PackageInstallerService$69 MagicNumber:PkgManagerBR.kt$PkgManagerBR$69 MagicNumber:PlayStoreLoginWrapper.kt$PlayStoreLoginWrapper$200 - MagicNumber:RetrofitModule.kt$RetrofitModule$999 MagicNumber:ScreenshotRVAdapter.kt$ScreenshotRVAdapter$10f MagicNumber:ScreenshotRVAdapter.kt$ScreenshotRVAdapter$50f MagicNumber:StorageComputer.kt$StorageComputer$1000 @@ -83,12 +64,10 @@ MagicNumber:StorageComputer.kt$StorageComputer$999950 MagicNumber:TOSFragment.kt$TOSFragment$20 MaxLineLength:AppInstallProcessor.kt$AppInstallProcessor$"Enqueuing App install work is failed for ${fusedDownload.packageName} exception: ${e.localizedMessage}" - MaxLineLength:AppInstallProcessor.kt$AppInstallProcessor$fusedDownload.areFilesDownloaded() && (!fusedManagerRepository.isFusedDownloadInstalled(fusedDownload) || fusedDownload.status == Status.INSTALLING) MaxLineLength:AppPrivacyInfo.kt$AppPrivacyInfo MaxLineLength:ApplicationFragment.kt$ApplicationFragment.Companion$"https://gitlab.e.foundation/e/os/apps/-/blob/main/app/src/main/java/foundation/e/apps/data/exodus/repositories/PrivacyScoreRepositoryImpl.kt" MaxLineLength:CommonUtilsModule.kt$CommonUtilsModule$* MaxLineLength:DownloadManager.kt$DownloadManager$Timber.e("Download Issue: $downloadId : DownloadManager returns status: $status but the failed because: reason: $reason") - MaxLineLength:DownloadManagerUtils.kt$DownloadManagerUtils$"Download failed for ${fusedDownload.packageName}, " + "reason: " + "${downloadManager.getDownloadFailureReason(downloadId)}" MaxLineLength:DownloadManagerUtils.kt$DownloadManagerUtils$Timber.d("===> updateDownloadStatus: ${fusedDownload.name}: $downloadId: $numberOfDownloadedItems/${fusedDownload.downloadIdMap.size}") MaxLineLength:DownloadManagerUtils.kt$DownloadManagerUtils$if MaxLineLength:DownloadManagerUtils.kt$DownloadManagerUtils$numberOfDownloadedItems == fusedDownload.downloadIdMap.size && numberOfDownloadedItems == fusedDownload.downloadURLList.size @@ -112,13 +91,11 @@ PrintStackTrace:CommonUtilsModule.kt$CommonUtilsModule$e PrintStackTrace:EcloudRepository.kt$EcloudRepository$e PrintStackTrace:InstallWorkManager.kt$InstallWorkManager$e - PrintStackTrace:AppLoungePackageManager.kt$PkgManagerModule$e PrintStackTrace:PlayStoreAuthenticator.kt$PlayStoreAuthenticator$e PrintStackTrace:SystemInfoProvider.kt$SystemInfoProvider$e ProtectedMemberInFinalClass:ApplicationListFragment.kt$ApplicationListFragment$// protected to avoid SyntheticAccessor protected val args: ApplicationListFragmentArgs by navArgs() ProtectedMemberInFinalClass:ApplicationListFragment.kt$ApplicationListFragment$// protected to avoid SyntheticAccessor protected val viewModel: ApplicationListViewModel by viewModels() ProtectedMemberInFinalClass:GoogleSignInFragment.kt$GoogleSignInFragment$// protected to avoid SyntheticAccessor protected val viewModel: LoginViewModel by lazy { ViewModelProvider(requireActivity())[LoginViewModel::class.java] } - ProtectedMemberInFinalClass:MainActivityViewModel.kt$MainActivityViewModel$protected fun ProducerScope<Boolean>.sendInternetStatus(connectivityManager: ConnectivityManager) ProtectedMemberInFinalClass:SearchFragment.kt$SearchFragment$protected val searchViewModel: SearchViewModel by viewModels() ReturnCount:ApkSignatureManager.kt$ApkSignatureManager$private fun verifyAPKSignature( apkInputStream: BufferedInputStream, apkSignatureInputStream: InputStream, publicKeyInputStream: InputStream, packageName: String ): Boolean ReturnCount:AppInstallProcessor.kt$AppInstallProcessor$private suspend fun updateDownloadUrls(fusedDownload: FusedDownload): Boolean @@ -140,18 +117,19 @@ SpreadOperator:NativeDeviceInfoProviderModule.kt$NativeDeviceInfoProviderModule$(*systemSharedLibraryNames) SwallowedException:AppInfoFetchViewModel.kt$AppInfoFetchViewModel$e: Exception SwallowedException:AppInstallProcessor.kt$AppInstallProcessor$e: ApiException.AppNotPurchased + SwallowedException:AppLoungePackageManager.kt$AppLoungePackageManager$e: PackageManager.NameNotFoundException SwallowedException:ApplicationViewModel.kt$ApplicationViewModel$e: ApiException.AppNotFound SwallowedException:ApplicationViewModel.kt$ApplicationViewModel$e: Exception SwallowedException:GPlayHttpClient.kt$GPlayHttpClient$e: Exception SwallowedException:NativeDeviceInfoProviderModule.kt$NativeDeviceInfoProviderModule$e: Exception SwallowedException:NativeGsfVersionProvider.kt$NativeGsfVersionProvider$e: PackageManager.NameNotFoundException - SwallowedException:AppLoungePackageManager.kt$AppLoungePackageManager$e: PackageManager.NameNotFoundException SwallowedException:UpdatesManagerImpl.kt$UpdatesManagerImpl$e: Exception TooGenericExceptionCaught:AnonymousLoginManager.kt$AnonymousLoginManager$e: Exception TooGenericExceptionCaught:ApiCaller.kt$e: Exception TooGenericExceptionCaught:ApkSignatureManager.kt$ApkSignatureManager$e: Exception TooGenericExceptionCaught:AppInfoFetchViewModel.kt$AppInfoFetchViewModel$e: Exception TooGenericExceptionCaught:AppInstallProcessor.kt$AppInstallProcessor$e: Exception + TooGenericExceptionCaught:AppLoungePackageManager.kt$AppLoungePackageManager$e: Exception TooGenericExceptionCaught:ApplicationViewModel.kt$ApplicationViewModel$e: Exception TooGenericExceptionCaught:BlockedAppRepository.kt$BlockedAppRepository$exception: Exception TooGenericExceptionCaught:CommonUtilsModule.kt$CommonUtilsModule$e: Exception @@ -170,15 +148,14 @@ TooGenericExceptionCaught:NetworkHandler.kt$e: Exception TooGenericExceptionCaught:PWAManager.kt$PWAManager$e: Exception TooGenericExceptionCaught:PWAPlayerStatusReceiver.kt$PWAPlayerStatusReceiver$e: Exception - TooGenericExceptionCaught:AppLoungePackageManager.kt$AppLoungePackageManager$e: Exception TooGenericExceptionCaught:PlayStoreAuthenticator.kt$PlayStoreAuthenticator$e: Exception - TooGenericExceptionCaught:RetrofitModule.kt$RetrofitModule$e: Exception TooGenericExceptionCaught:SystemInfoProvider.kt$SystemInfoProvider$e: Exception TooGenericExceptionCaught:UpdatesManagerImpl.kt$UpdatesManagerImpl$e: Exception TooGenericExceptionCaught:UpdatesWorker.kt$UpdatesWorker$e: Throwable TooGenericExceptionThrown:AnonymousLoginManager.kt$AnonymousLoginManager$throw Exception( "Error fetching Anonymous credentials\n" + "Network code: ${response.code}\n" + "Success: ${response.isSuccessful}" + response.errorString.run { if (isNotBlank()) "\nError message: $this" else "" } ) TooGenericExceptionThrown:PlayStoreLoginWrapper.kt$PlayStoreLoginWrapper$throw Exception("Validation network code: ${response.code}") TooGenericExceptionThrown:PlayStoreLoginWrapper.kt$PlayStoreLoginWrapper$throw Exception(error) + TooManyFunctions:AppLoungePackageManager.kt$AppLoungePackageManager TooManyFunctions:ApplicationListFragment.kt$ApplicationListFragment : TimeoutFragmentApplicationInstaller TooManyFunctions:ApplicationRepository.kt$ApplicationRepository TooManyFunctions:FusedManagerImpl.kt$FusedManagerImpl : IFusedManager @@ -186,7 +163,6 @@ TooManyFunctions:HomeFragment.kt$HomeFragment : TimeoutFragmentApplicationInstaller TooManyFunctions:IFusedManager.kt$IFusedManager TooManyFunctions:MainActivityViewModel.kt$MainActivityViewModel : ViewModel - TooManyFunctions:AppLoungePackageManager.kt$AppLoungePackageManager TooManyFunctions:SearchFragment.kt$SearchFragment : TimeoutFragmentOnQueryTextListenerOnSuggestionListenerApplicationInstaller TooManyFunctions:TimeoutFragment.kt$TimeoutFragment : Fragment TooManyFunctions:UpdatesFragment.kt$UpdatesFragment : TimeoutFragmentApplicationInstaller diff --git a/app/src/main/java/foundation/e/apps/MainActivity.kt b/app/src/main/java/foundation/e/apps/MainActivity.kt index 9ec898a0b769c65d60f5aa2ff86cd878f6c2d2b5..7b2b1217cad46ddb26e61bc8fb7a71899a33cfb2 100644 --- a/app/src/main/java/foundation/e/apps/MainActivity.kt +++ b/app/src/main/java/foundation/e/apps/MainActivity.kt @@ -70,6 +70,7 @@ class MainActivity : AppCompatActivity() { companion object { private val TAG = MainActivity::class.java.simpleName + private const val SESSION_DIALOG_TAG = "session_dialog" } override fun onCreate(savedInstanceState: Bundle?) { @@ -123,17 +124,6 @@ class MainActivity : AppCompatActivity() { observeEvents() } - override fun onStart() { - super.onStart() - checkSessionRefresh() - } - - private fun checkSessionRefresh() { - if (viewModel.shouldRefreshSession()) { - refreshSession() - } - } - private fun refreshSession() { loginViewModel.startLoginFlow(listOf(PlayStoreAuthenticator::class.java.simpleName)) } @@ -145,6 +135,7 @@ class MainActivity : AppCompatActivity() { override fun onBackPressed() { if (isInitialScreen()) { resetIgnoreStatusForSessionRefresh() + finish() } super.onBackPressed() } @@ -159,7 +150,7 @@ class MainActivity : AppCompatActivity() { } private fun resetIgnoreStatusForSessionRefresh() { - viewModel.updateIgnoreRefreshPreference(ignore = false) + viewModel.shouldIgnoreSessionError = false } @Suppress("DEPRECATION") @@ -167,7 +158,7 @@ class MainActivity : AppCompatActivity() { if (VERSION.SDK_INT >= VERSION_CODES.TIRAMISU) { onBackInvokedDispatcher.registerOnBackInvokedCallback(PRIORITY_DEFAULT) { resetIgnoreStatusForSessionRefresh() - super.onBackPressed() // Deprecated for Android 13+ + finish() } } } @@ -406,23 +397,37 @@ class MainActivity : AppCompatActivity() { EventBus.events.filter { appEvent -> appEvent is AppEvent.TooManyRequests }.collectLatest { - val shouldShowDialog = viewModel.shouldRefreshSession() - if (shouldShowDialog) { - binding.sessionErrorLayout.visibility = View.VISIBLE - binding.retrySessionButton.setOnClickListener { onRefreshSessionClick() } - binding.ignoreSessionButton.setOnClickListener { onIgnoreSessionClick() } - } + handleRefreshSessionEvent() } } - private fun onIgnoreSessionClick() { - viewModel.updateIgnoreRefreshPreference(true) - binding.sessionErrorLayout.visibility = View.GONE + private fun handleRefreshSessionEvent() { + val shouldShowDialog = !viewModel.shouldIgnoreSessionError + val isDialogShowing = supportFragmentManager.findFragmentByTag(SESSION_DIALOG_TAG) != null + if (shouldShowDialog && !isDialogShowing) { + showRefreshSessionDialog() + } } - private fun onRefreshSessionClick() { - binding.sessionErrorLayout.visibility = View.GONE - refreshSession() + private fun showRefreshSessionDialog() { + ApplicationDialogFragment( + title = getString(R.string.account_unavailable), + message = getString(R.string.too_many_requests_desc), + drawable = R.drawable.ic_warning, + positiveButtonText = getString(R.string.refresh_session), + positiveButtonAction = { + refreshSession() + }, + cancelButtonText = getString(R.string.ignore).uppercase(), + cancelButtonAction = { + onIgnoreSessionClick() + }, + cancelable = true, + ).show(supportFragmentManager, SESSION_DIALOG_TAG) + } + + private fun onIgnoreSessionClick() { + viewModel.shouldIgnoreSessionError = true } private fun setupBottomNavItemSelectedListener( diff --git a/app/src/main/java/foundation/e/apps/data/Constants.kt b/app/src/main/java/foundation/e/apps/data/Constants.kt index 7e7bac60d5a25412f149ac5fbc04eeec5a7a3647..09b79b97272bf97efa745c8aa25876d0097667f4 100644 --- a/app/src/main/java/foundation/e/apps/data/Constants.kt +++ b/app/src/main/java/foundation/e/apps/data/Constants.kt @@ -30,6 +30,4 @@ object Constants { const val ACTION_DUMP_APP_INSTALL_STATE = "foundation.e.apps.action.APP_INSTALL_STATE" const val TAG_APP_INSTALL_STATE = "APP_INSTALL_STATE" - - const val PREFERENCE_IGNORE_SESSION_REFRESH = "ignoreSessionRefresh" } diff --git a/app/src/main/java/foundation/e/apps/data/preference/SessionPreference.kt b/app/src/main/java/foundation/e/apps/data/preference/SessionPreference.kt deleted file mode 100644 index c5a50d3d2ac5f71480250e5fc4ef1667760c1c84..0000000000000000000000000000000000000000 --- a/app/src/main/java/foundation/e/apps/data/preference/SessionPreference.kt +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2021-2024 MURENA SAS - * - * 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.data.preference - -import android.content.Context -import androidx.preference.PreferenceManager -import dagger.hilt.android.qualifiers.ApplicationContext -import foundation.e.apps.data.Constants.PREFERENCE_IGNORE_SESSION_REFRESH -import javax.inject.Inject -import javax.inject.Singleton - -@Singleton -class SessionPreference @Inject constructor( - @ApplicationContext private val context: Context -) { - private val preferenceManager = PreferenceManager.getDefaultSharedPreferences(context) - - fun shouldIgnoreSessionRefresh(): Boolean { - return preferenceManager.getBoolean(PREFERENCE_IGNORE_SESSION_REFRESH, false) - } - - fun updateIgnoreSessionRefreshPreference(ignore: Boolean) { - preferenceManager.edit().putBoolean(PREFERENCE_IGNORE_SESSION_REFRESH, ignore).apply() - } -} 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 3401e3c12504fa54786debb0c36a6a82c58ca4cd..9a54ffd78952f18707b411279171fce6a03bfef9 100644 --- a/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt +++ b/app/src/main/java/foundation/e/apps/ui/MainActivityViewModel.kt @@ -42,7 +42,6 @@ import foundation.e.apps.data.enums.isUnFiltered import foundation.e.apps.data.fusedDownload.FusedManagerRepository import foundation.e.apps.data.fusedDownload.models.FusedDownload import foundation.e.apps.data.preference.AppLoungeDataStore -import foundation.e.apps.data.preference.SessionPreference import foundation.e.apps.data.preference.getSync import foundation.e.apps.install.pkg.AppLoungePackageManager import foundation.e.apps.install.pkg.PWAManager @@ -61,7 +60,6 @@ class MainActivityViewModel @Inject constructor( private val ecloudRepository: EcloudRepository, private val blockedAppRepository: BlockedAppRepository, private val appInstallProcessor: AppInstallProcessor, - private val sessionPreference: SessionPreference ) : ViewModel() { val tocStatus: LiveData = appLoungeDataStore.tocStatus.asLiveData() @@ -84,6 +82,8 @@ class MainActivityViewModel @Inject constructor( lateinit var connectivityManager: ConnectivityManager + var shouldIgnoreSessionError = false + fun getUser(): User { return appLoungeDataStore.getUserType() } @@ -240,12 +240,4 @@ class MainActivityViewModel @Inject constructor( fun launchPwa(application: Application) { pwaManager.launchPwa(application) } - - fun updateIgnoreRefreshPreference(ignore: Boolean) { - sessionPreference.updateIgnoreSessionRefreshPreference(ignore) - } - - fun shouldRefreshSession(): Boolean { - return !sessionPreference.shouldIgnoreSessionRefresh() - } } diff --git a/app/src/main/java/foundation/e/apps/ui/application/subFrags/ApplicationDialogFragment.kt b/app/src/main/java/foundation/e/apps/ui/application/subFrags/ApplicationDialogFragment.kt index c5702ec9dea6965629e85f1373c4f84c4ba4bc2b..7237822701ab6063183e6c98f60be13cd1f26dad 100644 --- a/app/src/main/java/foundation/e/apps/ui/application/subFrags/ApplicationDialogFragment.kt +++ b/app/src/main/java/foundation/e/apps/ui/application/subFrags/ApplicationDialogFragment.kt @@ -42,7 +42,7 @@ class ApplicationDialogFragment() : DialogFragment() { private var positiveButtonAction: (() -> Unit)? = null private var cancelButtonText: String? = null private var cancelButtonAction: (() -> Unit)? = null - private var cancellable: Boolean = true + private var cancelable: Boolean = true private var onDismissListener: (() -> Unit)? = null constructor( @@ -53,7 +53,7 @@ class ApplicationDialogFragment() : DialogFragment() { positiveButtonAction: (() -> Unit)? = null, cancelButtonText: String = "", cancelButtonAction: (() -> Unit)? = null, - cancellable: Boolean = true, + cancelable: Boolean = true, onDismissListener: (() -> Unit)? = null, ) : this() { this.drawable = drawable @@ -63,8 +63,9 @@ class ApplicationDialogFragment() : DialogFragment() { this.positiveButtonAction = positiveButtonAction this.cancelButtonText = cancelButtonText this.cancelButtonAction = cancelButtonAction - this.cancellable = cancellable this.onDismissListener = onDismissListener + this.cancelable = cancelable + isCancelable = cancelable } override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { @@ -77,7 +78,6 @@ class ApplicationDialogFragment() : DialogFragment() { positiveButtonAction?.invoke() this.dismiss() } - .setCancelable(cancellable) if (cancelButtonText?.isNotEmpty() == true) { materialAlertDialogBuilder.setNegativeButton(cancelButtonText) { _, _ -> cancelButtonAction?.invoke() diff --git a/app/src/main/res/drawable/ic_warning.xml b/app/src/main/res/drawable/ic_warning.xml new file mode 100644 index 0000000000000000000000000000000000000000..872b7286e80738469fe7d6145b7e345c2f487e68 --- /dev/null +++ b/app/src/main/res/drawable/ic_warning.xml @@ -0,0 +1,26 @@ + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 66ff2e512436f8b55b6ff87da7ae1381124c453c..b2056ce54671e84b386ec2a77602684473bf186e 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -23,71 +23,6 @@ android:layout_height="match_parent" tools:context=".MainActivity"> - - - - - - - - - - - - - Split-Installationskanal Einloggen Ignorieren + Konto nicht verfügbar \ No newline at end of file diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 6d7a60c08c937056497277030285983018876be9..a3f4a87734c12bac499eba11989ea33b802122b0 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -177,4 +177,5 @@ \n\t- mitigar el microtargeting \n - limitar el impacto en caso de que esta cuenta sea restringida por Google" Archivo adicional para %s + Cuenta no disponible \ No newline at end of file diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 97a732be583e4e3f553590c23b02187baeab906c..7332e717322bc09e8e90a4b8ff8637433655a1e2 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -153,4 +153,5 @@ Kirjaudu sisään Sinun on kirjauduttava sisään nähdäksesi yleiset sovellukset. PWA ja avoimen lähdekoodin sovellukset + Tili ei ole käytettävissä \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 77d6840b6b0410d8f63feff9e2fd229a2ae514b3..26a7d10813f171e5c7fa92cccf3168975ee93c2c 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -173,4 +173,5 @@ Canal d\'installation fractionnée Connexion Ignorer + Compte indisponible \ No newline at end of file diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index 7784682628780f05ed484ac960ed7c02096a592f..548808e9cd06f3e5fc87742eb1b86cf34c52b8b6 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -176,4 +176,5 @@ Aðvörun viðkomandi %s %s vill fá að setja upp viðbótareiningar.Þú þarft að skrá þig aftur inn í AppLounge til að geta sett þær inn. Skrá inn + Reikningur ekki í boði \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index a06fe7b42faa9db276a51b336c27dc4cbcb6a4d6..46c6e9b55a6b555a60b050195f9f4fd1b62b9d0d 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -177,4 +177,5 @@ Toccando su \"%1$s\" verrà aperto un tab sul tuo browser con il nome del pacchetto app preimpostato.<br /><br />Tocca su \"Perform analysis\" per aviare l\'analisi da parte di Exodus.<br /><br />Quando verrò mostrato il pulsante \"See the report\" (potrebbe volerci un pò di tempo, a seconda dell\'app scelta) puoi chiudere il tab e tornare alla descrizione app su %2$s dove dovresti vedere il Punteggio Privacy. A volte Exodus non riesce ad analizzare l\'app.<br /><br />NB: potresti dover aspettare anche 10 min per poter vedere il punteggio nella descrizione app. L\'account anonimo che stai utilizzando non è disponibile. Agiorna la sessione per ottenerne un altro. AGGIORNA SESSIONE + Account non disponibile \ No newline at end of file diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index d127090b66c3f0b1e02a77709a4f548f026bca5f..4fc1145fabe33f903468c2ff8e1d2c70327e7e30 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -176,4 +176,5 @@ Advarsel angående %s %s vil installere ekstra moduler. Du må logge inn på App Lounge på nytt for å kunne installere dem. Logg inn + Konto utilgjengelig \ No newline at end of file diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index cd5d91f7b09e469311befa83b9ccb4b7bafebcea..9575856995a9db4852d1a7efb17ee870128977f4 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -156,4 +156,5 @@ Downloaden… Aanvullend bestand voor %s Update apps geïnstalleerd door andere app-stores + Account niet beschikbaar \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index dcd14689e80e25a70def86b8ca424ac01ef15ef1..89fe24e1d496a3bffd39ad51dbc73700a39e6959 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -155,4 +155,5 @@ Необходимо войти в систему, чтобы увидеть обычные приложения. Пожалуйста, выберите хотя бы один источник приложений. Выйти из системы + Аккаунт недоступен \ No newline at end of file diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 500d1e997440b183e5b91049ddc6ddab70970daa..67e4b3516770fe0e87a95c08e34178eed36d0dd3 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -25,4 +25,5 @@ Hľadať Kategórie Domov + Účet nedostupný \ No newline at end of file diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index b1eb1f3f183af4cf35404055caa24bb5d0a06971..f2d8d2440fe41f3d33d58798b171c4bc07aea06b 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -176,4 +176,5 @@ Varning gällande %s %s vill installera extra moduler. Du måste logga in till AppLounge igen för att kunna installera dom. Logga in + Konto otillgängligt \ No newline at end of file diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 88eac496b13ae03a67c777ba98dcea99962226b8..a276b3660e0866bfb1f560a74596be176c040843 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -156,4 +156,5 @@ \n \nНатисніть «Повторити спробу» щоб спробувати знову. Зареєструватися + Обліковий запис недоступний \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6a53870477a514909d346408782e8505f30e228d..2cd4f7fb59636738af2a05f40dd356f162e0daf5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -182,6 +182,7 @@ More info The anonymous account you\'re currently using is unavailable. Please refresh the session to get another one. + Account unavailable REFRESH SESSION Error occurred while loading apps.