diff --git a/app/build.gradle b/app/build.gradle index 05253ed3d8e34088d5fa3b0ed70b52668d465432..b7b34e5e2af478a91435ebd509219123e671f8c6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -178,10 +178,6 @@ dependencies { implementation(project(":auth-data-lib")) implementation(project(":parental-control-data")) - // Library dependencies - // TODO: Add splitinstall-lib to a repo https://gitlab.e.foundation/e/os/backlog/-/issues/628 - api(files("libs/splitinstall-lib.jar")) - // eFoundation libraries implementation(libs.telemetry) implementation(libs.gplayapi) diff --git a/app/detekt-baseline.xml b/app/detekt-baseline.xml index e8a4412f9fba64d10aabbd03b4bb8ba54c35b959..dcb11caadbcb0d2cef9a012a9a0304f15cff8374 100644 --- a/app/detekt-baseline.xml +++ b/app/detekt-baseline.xml @@ -126,7 +126,6 @@ ReturnCount:PlayStoreAuthenticator.kt$PlayStoreAuthenticator$private suspend fun getAuthDataWithGoogleAccount(): ResultSupreme<AuthData?> ReturnCount:PrivacyInfoViewModel.kt$PrivacyInfoViewModel$fun shouldRequestExodusReport(application: Application?): Boolean ReturnCount:SearchApiImpl.kt$SearchApiImpl$private suspend fun replaceWithFDroid(gPlayApps: List<Application>): List<Application> - ReturnCount:SplitInstallBinder.kt$SplitInstallBinder$private fun showErrorNotification(context: Context, packageName: String) ReturnCount:StorageNotificationManager.kt$StorageNotificationManager$private fun getSpaceMissing(appInstall: AppInstall, downloadId: Long? = null): Long ReturnCount:SystemAppsUpdatesRepository.kt$SystemAppsUpdatesRepository$private suspend fun getApplication( packageName: String, releaseType: OsReleaseType, sdkLevel: Int, device: String, ): Application? ReturnCount:SystemAppsUpdatesRepository.kt$SystemAppsUpdatesRepository$private suspend fun getReleaseDetailsUrl( systemAppProject: SystemAppProject, releaseType: OsReleaseType, ): String? diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 611458f23530b33789b661679aef4ef1d834de94..6d1c30549fd37e932c26aaff381ab2bc15261ea3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -198,27 +198,11 @@ android:exported="true" android:readPermission="${applicationId}.permission.PROVIDER_READ" /> - - - - - - - - () companion object { - private val SDCARD_PATH = Environment.getExternalStorageDirectory().absolutePath - val EXTERNAL_STORAGE_TEMP_CACHE_DIR = "$SDCARD_PATH/Download/AppLounge/SplitInstallApks" private const val UNKNOWN_ERROR_OR_REASON = -1 } @@ -72,30 +70,6 @@ class DownloadManager @Inject constructor( return downloadFile(url, downloadFile, downloadCompleted) } - fun downloadFileInExternalStorage( - url: String, - subDirectoryPath: String, - fileName: String, - downloadCompleted: ((Boolean, String) -> Unit)? - ): Long { - - val directoryFile = File("$EXTERNAL_STORAGE_TEMP_CACHE_DIR/$subDirectoryPath") - if (!directoryFile.exists()) { - directoryFile.mkdirs() - } - - val downloadFile = File("$directoryFile/$fileName") - if (downloadFile.exists()) { - try { - downloadFile.delete() - } catch (exception: Exception) { - Timber.e("Could not delete already existing split apk: $downloadFile", exception) - } - } - - return downloadFile(url, downloadFile, downloadCompleted) - } - private fun downloadFile( url: String, downloadFile: File, diff --git a/app/src/main/java/foundation/e/apps/install/splitinstall/SplitInstallBinder.kt b/app/src/main/java/foundation/e/apps/install/splitinstall/SplitInstallBinder.kt deleted file mode 100644 index 69bc609577dabe9292692f97069aa0bfa535fe62..0000000000000000000000000000000000000000 --- a/app/src/main/java/foundation/e/apps/install/splitinstall/SplitInstallBinder.kt +++ /dev/null @@ -1,282 +0,0 @@ -/* - * Apps Quickly and easily install Android apps onto your device! - * Copyright (C) 2021-2022 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.install.splitinstall - -import android.Manifest -import android.app.NotificationChannel -import android.app.NotificationManager -import android.app.PendingIntent -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.content.pm.PackageManager -import android.os.Build -import androidx.core.app.ActivityCompat -import androidx.core.app.NotificationCompat -import androidx.core.app.NotificationManagerCompat -import androidx.core.content.pm.PackageInfoCompat -import foundation.e.apps.ISplitInstallService -import foundation.e.apps.ui.MainActivity -import foundation.e.apps.R -import foundation.e.apps.data.DownloadManager -import foundation.e.apps.data.application.ApplicationRepository -import foundation.e.apps.data.login.AuthenticatorRepository -import foundation.e.apps.data.login.exceptions.GPlayLoginException -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext -import timber.log.Timber -import java.util.Collections -import java.util.TreeSet - -class SplitInstallBinder( - val context: Context, - private val coroutineScope: CoroutineScope, - val applicationRepository: ApplicationRepository, - val downloadManager: DownloadManager, - val authenticatorRepository: AuthenticatorRepository, - private var splitInstallSystemService: foundation.e.splitinstall.ISplitInstallService? -) : ISplitInstallService.Stub() { - - private val modulesToInstall = HashMap() - - companion object { - const val TAG = "SplitInstallerBinder" - const val AUTH_DATA_ERROR_MESSAGE = "Could not get auth data" - const val NOTIFICATION_CHANNEL = "Dynamic module install" - const val NOTIFICATION_ID_KEY = "notification_id_key" - const val PACKAGE_NAME_KEY = "package_name_key" - const val PREFERENCES_FILE_NAME = "packages_to_ignore" - const val PACKAGES_LIST_KEY = "packages_list_key" - } - - override fun installSplitModule(packageName: String, moduleName: String) { - coroutineScope.launch { - try { - authenticatorRepository.getValidatedAuthData() - authenticatorRepository.getGPlayAuthOrThrow() - downloadModule(packageName, moduleName) - } catch (exception: GPlayLoginException) { - Timber.w("$AUTH_DATA_ERROR_MESSAGE $exception") - handleError(packageName) - } - } - } - - private fun handleError(packageName: String) { - createNotificationChannel(context) - showErrorNotification(context, packageName) - } - - private fun createNotificationChannel(context: Context) { - val descriptionText = context.getString(R.string.notification_channel_desc) - val notificationChannel = NotificationChannel( - NOTIFICATION_CHANNEL, - NOTIFICATION_CHANNEL, - NotificationManager.IMPORTANCE_LOW - ).apply { - description = descriptionText - } - - val notificationManager = - context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager - - notificationManager.createNotificationChannel(notificationChannel) - } - - private fun showErrorNotification(context: Context, packageName: String) { - if (ActivityCompat.checkSelfPermission(context, Manifest.permission.POST_NOTIFICATIONS) - != PackageManager.PERMISSION_GRANTED - ) { - return - } - - val preferences = context.getSharedPreferences(PREFERENCES_FILE_NAME, Context.MODE_PRIVATE) - val ignoreList = preferences.getStringSet(PACKAGES_LIST_KEY, Collections.emptySet()) - if (ignoreList != null && packageName in ignoreList) return - - val appInfo = context.packageManager.getPackageInfo(packageName, 0).applicationInfo - ?: return - val appLabel = context.packageManager.getApplicationLabel(appInfo) - val callerUid = appInfo.uid - val contentText = context.getString( - R.string.split_install_warning_text, - appLabel - ) - - val notificationBuilder = NotificationCompat.Builder(context, NOTIFICATION_CHANNEL) - .setSmallIcon(R.drawable.app_lounge_notification_icon) - .setContentTitle(context.getString(R.string.split_install_warning_title, appLabel)) - .setContentText(contentText) - .setStyle(NotificationCompat.BigTextStyle().bigText(contentText)) - .addAction( - NotificationCompat.Action.Builder( - null, - context.getString(R.string.sign_in), - buildSignInPendingIntent(callerUid) - ).build() - ) - .addAction( - NotificationCompat.Action.Builder( - null, - context.getString(R.string.ignore), - buildIgnorePendingIntent(callerUid, packageName) - ).build() - ) - - with(NotificationManagerCompat.from(context)) { - notify(callerUid, notificationBuilder.build()) - } - } - - private fun buildIgnorePendingIntent(callerUid: Int, packageName: String): PendingIntent { - - val ignoreIntent = Intent(context, IgnoreReceiver::class.java).apply { - putExtra(NOTIFICATION_ID_KEY, callerUid) - putExtra(PACKAGE_NAME_KEY, packageName) - } - - return PendingIntent.getBroadcast( - context, - callerUid, - ignoreIntent, - PendingIntent.FLAG_MUTABLE - ) - } - - private fun buildSignInPendingIntent(callerUid: Int): PendingIntent { - val signInIntent = Intent(context, SignInReceiver::class.java).apply { - putExtra(NOTIFICATION_ID_KEY, callerUid) - } - - return PendingIntent.getBroadcast( - context, - callerUid, - signInIntent, - PendingIntent.FLAG_MUTABLE - ) - } - - fun setService(service: foundation.e.splitinstall.ISplitInstallService) { - splitInstallSystemService = service - installPendingModules() - } - - private suspend fun downloadModule(packageName: String, moduleName: String) { - withContext(Dispatchers.IO) { - val versionCode = getPackageVersionCode(packageName) - val url = fetchModuleUrl(packageName, moduleName, versionCode) - - if (url == null) { - Timber.w("Could not find split module named $moduleName for $packageName package") - return@withContext - } - - downloadManager.downloadFileInExternalStorage( - url, packageName, "$packageName.split.$moduleName.apk" - ) { success, path -> - if (success) { - Timber.i("Split module has been downloaded: $path") - if (splitInstallSystemService == null) { - Timber.i("Not connected to system service now. Adding $path to the list.") - modulesToInstall[path] = packageName - } - splitInstallSystemService?.installSplitModule(packageName, path) - } - } - } - } - - private fun getPackageVersionCode(packageName: String): Int { - val packageInfo = context.packageManager.getPackageInfo(packageName, 0) - val longVersionCode = PackageInfoCompat.getLongVersionCode(packageInfo) - return longVersionCode.toInt() - } - - private suspend fun fetchModuleUrl( - packageName: String, - moduleName: String, - versionCode: Int - ): String? { - var url = applicationRepository.getOnDemandModule(packageName, moduleName, versionCode, 1) - - if (url == null) { - url = applicationRepository.getOnDemandModule( - packageName, - "config.$moduleName", - versionCode, - 1 - ) - } - - return url - } - - private fun installPendingModules() { - for (module in modulesToInstall.keys) { - val packageName = modulesToInstall[module] - splitInstallSystemService?.installSplitModule(packageName, module) - } - } - - class IgnoreReceiver: BroadcastReceiver() { - - override fun onReceive(context: Context?, intent: Intent?) { - if (context == null || intent == null) { - return - } - - NotificationManagerCompat.from(context).cancel( - intent.getIntExtra(NOTIFICATION_ID_KEY, -1) - ) - - val packageName = intent.getStringExtra(PACKAGE_NAME_KEY) ?: return - val preferences = context.getSharedPreferences( - PREFERENCES_FILE_NAME, - Context.MODE_PRIVATE - ) - - val ignoreList = preferences.getStringSet(PACKAGES_LIST_KEY, Collections.emptySet()) - ?: Collections.emptySet() - - val newList = TreeSet(ignoreList) - newList.add(packageName) - preferences.edit().putStringSet(PACKAGES_LIST_KEY, newList).apply() - } - } - - class SignInReceiver: BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - if (context == null || intent == null) { - return - } - - NotificationManagerCompat.from(context).cancel( - intent.getIntExtra(NOTIFICATION_ID_KEY, -1) - ) - - val launchAppLoungeIntent = Intent(context, MainActivity::class.java).apply { - flags = Intent.FLAG_ACTIVITY_NEW_TASK - } - - context.startActivity(launchAppLoungeIntent) - } - } -} diff --git a/app/src/main/java/foundation/e/apps/install/splitinstall/SplitInstallService.kt b/app/src/main/java/foundation/e/apps/install/splitinstall/SplitInstallService.kt deleted file mode 100644 index 89b1cd936e63eae7e3a7150a86976b08de0add7f..0000000000000000000000000000000000000000 --- a/app/src/main/java/foundation/e/apps/install/splitinstall/SplitInstallService.kt +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Apps Quickly and easily install Android apps onto your device! - * Copyright (C) 2021-2022 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.install.splitinstall - -import android.content.ComponentName -import android.content.Intent -import android.content.ServiceConnection -import android.os.IBinder -import androidx.lifecycle.LifecycleService -import androidx.lifecycle.lifecycleScope -import com.google.gson.Gson -import dagger.hilt.android.AndroidEntryPoint -import foundation.e.apps.data.DownloadManager -import foundation.e.apps.data.application.ApplicationRepository -import foundation.e.apps.data.login.AuthenticatorRepository -import foundation.e.apps.data.preference.AppLoungeDataStore -import foundation.e.splitinstall.ISplitInstallService -import foundation.e.splitinstall.SplitInstall -import javax.inject.Inject - -@AndroidEntryPoint -class SplitInstallService : LifecycleService() { - - companion object { - const val TAG = "SplitInstallService" - } - - @Inject lateinit var appLoungeDataStore: AppLoungeDataStore - @Inject lateinit var applicationRepository: ApplicationRepository - @Inject lateinit var downloadManager: DownloadManager - @Inject lateinit var gson: Gson - @Inject lateinit var authenticatorRepository: AuthenticatorRepository - private lateinit var binder: SplitInstallBinder - private var splitInstallSystemService: ISplitInstallService? = null - - private val serviceConnection = object : ServiceConnection { - override fun onServiceConnected(name: ComponentName, service: IBinder) { - splitInstallSystemService = ISplitInstallService.Stub.asInterface(service) - binder.setService(splitInstallSystemService!!) - } - - override fun onServiceDisconnected(name: ComponentName?) { - splitInstallSystemService = null - } - } - - override fun onCreate() { - super.onCreate() - - val intent = Intent().apply { - component = SplitInstall.SPLIT_INSTALL_SYSTEM_SERVICE - } - bindService(intent, serviceConnection, BIND_AUTO_CREATE) - } - - override fun onDestroy() { - splitInstallSystemService?.let { - unbindService(serviceConnection) - } - super.onDestroy() - } - - override fun onBind(intent: Intent): IBinder { - super.onBind(intent) - binder = SplitInstallBinder( - applicationContext, - lifecycleScope, - applicationRepository, - downloadManager, - authenticatorRepository, - splitInstallSystemService - ) - return binder - } -} diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index d89689e200bfcc19d852b21ce025d1510d67651b..c597816c48bfce9eecb52e222a09dbf107e8d394 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -179,11 +179,6 @@ Das anonyme Konto, das von Ihnen genutzt wird, ist nicht verfügbar. Bitte erneuern (refresh) Sie die Sitzung, um ein neues anonymes Konto zu erhalten. SITZUNG ERNEUERN Bitte etwas Platz auf dem Telefon freimachen, damit die App Lounge ordnungsgemäß funktionieren kann. - - Warnung bezüglich %s - %s möchte zusätzliche Module installieren. Sie müssen sich erneut bei AppLounge anmelden, um sie installieren zu können. - Split-Installationskanal - Einloggen Ignorieren Konto nicht verfügbar Teilen @@ -201,4 +196,4 @@ Quelloffene Apps und PWA nicht verfügbar Beim Laden der allgemeinen Apps ist ein Fehler aufgetreten. Nur quelloffene Apps und PWA sind momentan verfügbar. Beim Laden von PWA und quelloffenen Apps ist ein Fehler aufgetreten. Nur allgemeine Apps sind momentan 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 5190bbfec835d647f76b0a866a587b22620d9b8b..e2fdd0d24ee72fe8cd3a84faf328d27b1e5129de 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -165,10 +165,6 @@ O mostrar sólo Libera %1$s en tu teléfono para recibir las últimas actualizaciones. Por favor, libera algo de espacio en tu teléfono para que App Lounge funcione correctamente. - Advertencia sobre %s - %s quiere instalar módulos adicionales. Debes iniciar sesión en AppLounge nuevamente para poder instalarlos. - Canal de instalación dividido - Iniciar sesión Ignorar Descargando… Comprobando actualizaciones... @@ -201,4 +197,4 @@ Se produjo un error al cargar las aplicaciones PWA y de código abierto. Solo las aplicaciones comunes están disponibles por ahora. App Lounge se cerrará durante la instalación de la actualización. Por favor, abstente de hacer nada en hasta que la actualización (descarga + instalación) haya terminado. Podrás usarla en un par de minutos como máximo. ¡Advertencia de actualización! - \ 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 31ab8a7e052bf1860f236434fe9d7775b116e5bb..1cb59acd4fb9342fbda21a9b5c579f9f8ab8c8af 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -177,10 +177,6 @@ Libérez %1$s sur votre téléphone afin de bénéficier des dernières mises à jour. Merci de libérer de l\'espace sur votre téléphone pour qu\'App Lounge puisse fonctionner correctement. Vérification des mises à jour... - Avertissement concernant %s - %s souhaite installer des modules supplémentaires. Vous devez vous reconnecter à AppLounge pour pouvoir les installer. - Canal d\'installation fractionnée - Connexion Ignorer Compte indisponible Partager diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index 136f9bb7add0b72003d4794321c49bfc6486ea4f..e2e9ff53a8100c3e8607705068f5c6ecc70231f4 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -181,10 +181,6 @@ Athuga með uppfærslur... Losaðu um svolítið pláss á símanum þínum svo App Lounge geti virkað eðlilega. Hunsa - Skipta upp uppsetningarás - 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 Deila [%1$s] takmarkað forrit @@ -199,4 +195,4 @@ Algeng forrit óaðgengileg Villa kom upp við að hlaða inn algengum forritum. Aðeins forrit með opnum grunnkóða og PWA eru tiltæk í augnablikinu. App Lounge verður lokað af kerfinu á meðan það uppfærir sjálft sig. Vertu helst ekki að gera neitt annað þangað til uppfærslu App Lounge er lokið. Það verður svo aðgengilegt aftur eftir örfáar mínútur. - \ 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 17eb88d6fce0ce9de70730b9608fd08cdc33bd6d..ac52561e9e12af3e8450e49a45952d721be962e3 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -176,10 +176,6 @@ \n\t• limitare l\'impatto nel caso in cui l\'account venga bloccato da Google Per poter scaricare l\'aggiornamento, devi liberare %1$s di spazio sullo smartphone. Se non liberi un pò di spazio sullo smartphone, App Lounge non può funzionare correttamente. - Avviso riguardante %s - %s vuole installare moduli aggiuntivi. Per poterlo fare, devi accedere nuovamente ad AppLounge. - Canale d\'installazione frazionata - Accedi Ignora Verifico Aggiornamenti... Richiedi report ad Exodus diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 399a78fe54b5fa3da1b84f7fad7875e2e149e911..e8c3641d3bef811ed69777f3d913581cd481eba6 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -83,7 +83,6 @@ 毎日 毎週 毎月 - サインイン 無視 あなたのGoogleアカウントでApp Loungeにサインインするか、匿名モードでプライベートにApp Loungeにサインインしてください。 開く @@ -133,7 +132,6 @@ 匿名ログインに失敗しました! Googleログインに進む アップデートを取得するために%1$sの空き領域を設定してください。 - %sに関する警告 他のアプリストア経由でインストールしたアプリをアップデート。 \n一般的なアプリと、オープンソースのカテゴリーからのアップデートを試みます。 最低1つのアプリケーションのインストール元を選択してください。 @@ -149,5 +147,4 @@ \"%1$s\"を押すと、アプリのパッケージ名が記入されたタブをブラウザーで開きます。<br /><br />「Perform analysis」(分析を実行) をクリックすると、Exodusが分析を開始します。<br /><br />「See the report」(レポートを閲覧)のボタンが表示されたら(アプリによってはしばらく時間がかかる可能性があります)、タブを閉じて%2$sのアプリの説明欄に戻ると、プライバシーの点数が表示されているはずです。ただし、Exodusにはアプリを分析できない場合があります。<br /><br />注意:アプリの説明欄に点数が表示されるまで、最大で10分掛かる場合があります。 App Loungeが適切に機能するよう、電話の空き領域を設定してください。 アプリ %s は現在サポートされていません。アプリがまだ公開されていないか、別のエラーによる可能性があります。 - %sが追加のモジュールをインストールしようとしています。インストールを実行するには、App Loungeに再度サインインする必要があります。 diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 7c5747466c85eac61d7d48085a576b460e0fac55..44ef3fb9d273a7b7c6218c41560721d9c2746dc5 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -181,10 +181,6 @@ Vennligst frigjør litt plass på telefonen din slik at App Lounge kan fungere som den skal. Ved å klikke på \"%1$s\" åpnes det en fane i nettleseren din med applikasjonens pakkenavn forhåndsutfylt.<br /><br />Klikk på \"Utfør analyse\" for å starte analysen i Exodus.<br /><br />Når knappen \"Se rapport\" vises (det kan ta en stund avhengig av applikasjon) kan du lukke fanen og gå tilbake til appbeskrivelsen i %2$s hvor du skulle se personvernscoren. Noen ganger kan Exodus mislykkes i å analysere applikasjonen.<br /><br />Merk: det kan ta opptil 10 minutter før personvernscoren vises i appbeskrivelsen. Ignorer - Delt installasjonskanal - Advarsel angående %s - %s vil installere ekstra moduler. Du må logge inn på App Lounge på nytt for å kunne installere dem. - Logg inn Kontoen er ikke tilgjengelig Del [%1$s] Begrenset applikasjon diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 3044732d497ba842dd4b7de5ece58f912dc7ee2f..bd3b00150265f3cd969f3b15c625176367ac1cad 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -169,11 +169,8 @@ Delen Maak %1$s vrij op jouw telefoon om de laatste updates te verkrijgen. Maak geheugen vrij op jouw telefoon zodat App Lounge goed kan functioneren. - Waarschuwing betreffende %s - Inloggen Negeren Controleren op updates... - %s wil extra modules installeren. Je moet terug inloggen in App Lounge om die te kunnen installeren. Ga verder naar Google-aanmelden Update apps geïnstalleerd door andere app stores. \nEr zal geprobeerd worden om dergelijke apps te updates van de \"algemene\" en \"open source\" categorie. @@ -185,7 +182,6 @@ \n \n\t• micro-targeting te ontwijken \n\t• Impact te beperken wanneer Google dit account ingeperkt wordt - Split-installatiekanaal Wanneer je klikt op \"%1$s\" zal er een tab in jouw browser geopend worden met de pakket naam van de app ingevuld.<br /><br />Klik op \"Perform analysis\" om een analyse door Exodus te starten.<br /><br />Wanneer de knop \"See the report\" wordt weergegeven (dit kan even duren afhankelijk van de app) kan je de browser tab sluiten en terugkeren naar de app beschrijving in %2$s waar je de Privacy Score kan zien. Het kan voorvallen dat de analyse door Exodus niet lukt.<br /><br />Ook kan het tot 10 min duren voor de score wordt weergegeven bij de app beschrijving. [%1$s] Gelimiteerde App Je bent te jong om %1$s te installeren. Bekijk met je ouders of jouw leeftijdsgroep correct is ingesteld of schakel ouderlijk toezicht uit om het te kunnen installeren. diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index dc8ea0d5e777444abad8f7372082f513831af5bd..5aa527a78b742732af094b11a14b6f878f553b4b 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -98,7 +98,6 @@ Atualizar aplicativos instalados de outras lojas de aplicativos. \nEsses aplicativos tentarão ser atualizados a partir de aplicativos comuns e da categoria de código aberto. Libere espaço em seu telefone para que o App Lounge possa funcionar corretamente. - Entrar Ignorar Aviso de Conteúdo Aplicativos comuns indisponíveis @@ -169,7 +168,6 @@ \n \nPressione Repetir para tentar novamente. Solicitar relatório do Exodus - %s deseja instalar módulos extras. Você deve fazer login novamente no App Lounge para poder instalá-los. A Pontuação de Privacidade é calculada automaticamente a partir de permissões e rastreadores detectados nos aplicativos. Ela dá uma ideia do quanto um aplicativo pode estar usar microtargeting para seus usuários.<br /><br />O código-fonte de seu algoritmo de computação pode ser <a href=%1$s>encontrado aqui</a>.<br /><br />A detecção de rastreadores é realizada usando as <a href=%2$s>ferramentas do Exodus Privacy</a>.<br /><br />Pontuação de 10.<br /><br />Saiba mais sobre como a Pontuação de Privacidade é calculada, suas limitações e como você pode se proteger do microtargeting <a href=%3$s>nesta página</a>. Atualização Downloads @@ -178,10 +176,8 @@ \n \n\t• mitigar a microtargeting \n\t• limitar o impacto caso esta conta seja restrita pela Google - Aviso sobre %s Buscando a classificação de conteúdo de todos os aplicativos que você instalou. Ou mostrar apenas - Canal de Instalação Dividida Forçar a instalação permitirá que você faça o download e instale-o, mas não garantirá que ele funcionará.

A tentativa de instalar aplicativos não compatíveis pode causar falhas ou tornar o sistema mais lento.

Estamos trabalhando para melhorar a compatibilidade com este aplicativo em um futuro próximo.
Clicar em \"%1$s\" abrirá uma aba em seu navegador com o nome do pacote do aplicativo preenchido previamente.<br /><br />Clique em \"Executar análise\" para iniciar a análise pelo Exodus.<br /><br />Quando o botão \"Ver o relatório\" for exibido (pode demorar um pouco, dependendo do aplicativo), você poderá fechar a aba e voltar à descrição do aplicativo em %2$s, onde deverá ver a Pontuação de Privacidade. Às vezes, o Exodus pode não conseguir analisar o aplicativo.<br /><br />N.B.: pode levar até 10 minutos para que a pontuação seja exibida na descrição do aplicativo. - \ 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 e2a6adfe7e0b8df46f2c4a843092dc1038fff890..74491b9478bdd5251973ed7067d5bf691a916523 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -166,7 +166,6 @@ Выйти из системы Аккаунт недоступен Поделиться - Зарегистрироваться [%1$s] Ограниченное приложение Вы слишком молоды, чтобы иметь возможность установить %1$s. Пожалуйста, уточните у родителей, правильно ли выбрана ваша возрастная группа, или отключите родительский контроль, чтобы иметь возможность установить эту игру. Это приложение может содержать неприемлемый контент. @@ -175,9 +174,6 @@ Пожалуйста, освободите немного места на вашем телефоне, чтобы App Lounge мог работать должным образом. Игнорировать Перейдите к входу в систему Google - Предупреждение относительно %s - %s хочет установить дополнительные модули. Вам необходимо снова войти в AppLounge, чтобы иметь возможность установить их. - Раздельный канал установки Предупреждение о содержании Сбор рейтинга содержимого для всех установленных вами приложений. Мы рекомендуем использовать специальный аккаунт Google, чтобы: diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 559031682d96b945ad3018b185e2d3ff9a524c70..a2e9b8dd4a5dbb0361bbd631973f5e68e2e71a53 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -181,10 +181,6 @@ Att tvinga en installation tillåter dig att hämta och installera men det är inte garanterat att fungera.

Försök att installera appar som inte stöds kan orsaka krascher eller göra systemet långsammare.

Vi arbetar med att göra det mer kompatibelt med denna applikation i en nära framtid.
Genom att trycka på \"%1$s\" kommer en flik öppnas i din webbläsare med appens paketnamn förifyllt.<br /><br />Tryck på \"Perform analysis\" för att starta analysen av Exodus.<br /><br /> När knappen \"See the report\" visas (det kan ta ett tag beroende på appen) kan du stänga fliken och gå tillbaka till appbeskrivningen i %2$s där du bör se integritetspoängen. Ibland kan Exodus misslyckas med att analysera appen. <br /><br />OBS! Det kan ta upp till 10 min innan poängen visas i appbeskrivningen. Ignorera - Kanal för delad installation - 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 Dela Denna app kan innehålla olämpligt innehåll. diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index ccb2d21ae19ff27f522f98c7d73f08dcfde13870..e1e24a7d684a30604e4c09c3ec1caec8922dc992 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -157,9 +157,6 @@ Aylık En son güncellemeleri almak için telefonunuzda %1$s alan boşaltın. App Lounge\'un düzgün çalışabilmesi için lütfen telefonunuzda biraz yer açın. - %s ile ilgili uyarı - Bölünmüş Kurulum kanalı - Oturum aç Yoksay İçerik Uyarısı Yüklediğiniz tüm uygulamalar için içerik derecelendirmesi toplanıyor. @@ -176,5 +173,4 @@ Bunun nedeni, belirtecin oluşturulamaması / doğrulanamaması veya başka nedenler olabilir. \n \nTekrar denemek için Yeniden Dene\'ye basın. - %s ekstra modüller yüklemek istiyor. Bunları yükleyebilmek için AppLounge\'da tekrar oturum açmalısınız. diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index b981abb7748dd03df7f678b7d58c38d5175ebc19..12807ca9559f7901f301babf94fbe9719e2406c7 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -164,7 +164,6 @@ Це може бути тому, що токен не міг бути згенерований / підтверджений, або за інших причин. \n \nНатисніть «Повторити спробу» щоб спробувати знову. - Зареєструватися Обліковий запис недоступний Поділитися diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5cc09a6342914deff7857cc2fc6eba4b81b08554..d6a6cef283fc9fc89236eab1cb967f5387d822d3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -214,11 +214,6 @@ Clicking on \"%1$s\" will open a tab in your browser with the app\'s package name prefilled.<br /><br />Click on \"Perform analysis\" to start the analysis by Exodus.<br /><br />When the button \"See the report\" is displayed (it can take a while depending on the app) you can close the tab and go back to the app description in %2$s where you should see the Privacy Score. Sometimes Exodus can fail to analyze the app.<br /><br />NB: it can take up to 10 min for the score to be displayed in the app description. Free up %1$s on your phone to get the latest updates. Please free up some space on your phone so App Lounge can work properly. - - Warning regarding %s - %s wants to install extra modules. You must sign in again to AppLounge to be able to install them. - Split Install channel - Sign in Ignore