diff --git a/app/build.gradle b/app/build.gradle index 72ab969a42cc297d9683b07872c99fcebae88c15..205ae282eeb1274a3b039bbd395c4b30c70c63a1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,6 +20,15 @@ android { vectorDrawables.useSupportLibrary = true } + signingConfigs { + config { + storeFile file("../platform.keystore") + storePassword 'android' + keyAlias 'platform' + keyPassword 'android' + } + } + buildTypes { debug { applicationIdSuffix ".debug" @@ -28,6 +37,9 @@ android { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } + platform { + signingConfig signingConfigs.config + } } lintOptions { lintConfig file("lint.xml") diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e96f80be0e47936453c542836343f89016c0b9a4..1a88355f700bae2527c948ee88c7e9ba7747446a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -75,14 +75,6 @@ android:launchMode="singleInstance" android:theme="@style/AppTheme1" android:windowSoftInputMode="adjustResize" /> - - - - \ No newline at end of file diff --git a/app/src/main/java/foundation/e/apps/MainActivity.kt b/app/src/main/java/foundation/e/apps/MainActivity.kt index c86be95fe744c2070952558ae3f9b0706745bf89..fa79c552ec95c6d8d6483010815ce8c2e9a3d581 100644 --- a/app/src/main/java/foundation/e/apps/MainActivity.kt +++ b/app/src/main/java/foundation/e/apps/MainActivity.kt @@ -49,8 +49,10 @@ import foundation.e.apps.search.SearchFragment import foundation.e.apps.settings.SettingsFragment import foundation.e.apps.updates.UpdatesFragment import foundation.e.apps.updates.UpdatesManager +import foundation.e.apps.utils.Common import foundation.e.apps.utils.Constants import foundation.e.apps.utils.Constants.CURRENTLY_SELECTED_FRAGMENT_KEY +import foundation.e.apps.utils.Constants.MICROG_SHARED_PREF import foundation.e.apps.utils.PreferenceStorage import kotlinx.android.synthetic.main.activity_main.* @@ -110,6 +112,8 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS disableShiftingOfNabBarItems() + Common.updateMicroGStatus(this) + initialiseUpdatesWorker() @@ -132,15 +136,7 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS override fun onResume() { super.onResume() - if (retrieveStatus() != null) { - if (retrieveStatus().equals("true")) { - PreferenceStorage(this).save(getString(R.string.prefs_microg_vrsn_installed), true) - } else { - PreferenceStorage(this).save(getString(R.string.prefs_microg_vrsn_installed), false) - } - } else { - PreferenceStorage(this).save(getString(R.string.prefs_microg_vrsn_installed), false) - } + Common.updateMicroGStatus(this) } private fun openSearchFragment() { @@ -172,19 +168,6 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS } - private fun retrieveStatus(): String? { - var status: String? = null - val c: Cursor? = contentResolver.query(MicroGProvider.CONTENT_URI, null, "id=?", arrayOf("1"), "installStatus") - if (c!!.moveToFirst()) { - do { - status = c.getString(c.getColumnIndex("installStatus")) - } while (c.moveToNext()) - } - c.close() - return status - } - - private fun initialiseUpdatesWorker() { UpdatesManager(applicationContext).startWorker() diff --git a/app/src/main/java/foundation/e/apps/MicroGProvider.java b/app/src/main/java/foundation/e/apps/MicroGProvider.java deleted file mode 100644 index 554d81d536f17798bfe58c960bd39c8274597883..0000000000000000000000000000000000000000 --- a/app/src/main/java/foundation/e/apps/MicroGProvider.java +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright (C) 2019-2021 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; - -import android.content.ContentProvider; -import android.content.ContentUris; -import android.content.ContentValues; -import android.content.Context; -import android.content.UriMatcher; -import android.database.Cursor; -import android.database.SQLException; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteOpenHelper; -import android.database.sqlite.SQLiteQueryBuilder; -import android.net.Uri; - -import java.util.HashMap; - -public class MicroGProvider extends ContentProvider { - - public static final String PROVIDER_NAME = "foundation.e.apps.micro.status"; - public static final String URL = "content://" + PROVIDER_NAME + "/cte"; - public static final Uri CONTENT_URI = Uri.parse(URL); - - public static final String id = "id"; - public static final String installStatus = "installStatus"; - public static final int uriCode = 1; - public static final UriMatcher uriMatcher; - private static HashMap values; - - static { - uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); - uriMatcher.addURI(PROVIDER_NAME, "cte", uriCode); - uriMatcher.addURI(PROVIDER_NAME, "cte/*", uriCode); - } - - @Override - public boolean onCreate() { - Context context = getContext(); - DatabaseHelper dbHelper = new DatabaseHelper(context); - db = dbHelper.getWritableDatabase(); - if (db != null) { - return true; - } - return false; - } - - @Override - public Cursor query(Uri uri, String[] projection, String selection, - String[] selectionArgs, String sortOrder) { - SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); - qb.setTables(TABLE_NAME); - - switch (uriMatcher.match(uri)) { - case uriCode: - qb.setProjectionMap(values); - break; - default: - throw new IllegalArgumentException("Unknown URI " + uri); - } - if (sortOrder == null || sortOrder.equals("")) { - sortOrder = installStatus; - } - Cursor c = qb.query(db, projection, selection, selectionArgs, null, - null, sortOrder); - c.setNotificationUri(getContext().getContentResolver(), uri); - return c; - } - - - @Override - public String getType(Uri uri) { - switch (uriMatcher.match(uri)) { - case uriCode: - return "vnd.android.cursor.dir/cte"; - - default: - throw new IllegalArgumentException("Unsupported URI: " + uri); - } - } - - @Override - public Uri insert(Uri uri, ContentValues values) { - long rowID = db.insert(TABLE_NAME, "", values); - if (rowID > 0) { - Uri _uri = ContentUris.withAppendedId(CONTENT_URI, rowID); - getContext().getContentResolver().notifyChange(_uri, null); - return _uri; - } - throw new SQLException("Failed to add a record into " + uri); - } - - @Override - public int delete(Uri uri, String selection, String[] selectionArgs) { - int count = 0; - switch (uriMatcher.match(uri)) { - case uriCode: - count = db.delete(TABLE_NAME, selection, selectionArgs); - break; - default: - throw new IllegalArgumentException("Unknown URI " + uri); - } - getContext().getContentResolver().notifyChange(uri, null); - return count; - } - - @Override - public int update(Uri uri, ContentValues values, String selection, - String[] selectionArgs) { - int count = 0; - switch (uriMatcher.match(uri)) { - case uriCode: - count = db.update(TABLE_NAME, values, selection, selectionArgs); - break; - default: - throw new IllegalArgumentException("Unknown URI " + uri); - } - getContext().getContentResolver().notifyChange(uri, null); - return count; - } - - private SQLiteDatabase db; - static final String DATABASE_NAME = "microGDB"; - static final String TABLE_NAME = "microgtable"; - static final int DATABASE_VERSION = 1; - static final String CREATE_DB_TABLE = " CREATE TABLE " + TABLE_NAME - + " (id INTEGER PRIMARY KEY AUTOINCREMENT, " - + " installStatus TEXT NOT NULL);"; - - private static class DatabaseHelper extends SQLiteOpenHelper { - DatabaseHelper(Context context) { - super(context, DATABASE_NAME, null, DATABASE_VERSION); - } - - @Override - public void onCreate(SQLiteDatabase db) { - db.execSQL(CREATE_DB_TABLE); - } - - @Override - public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { - db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); - onCreate(db); - } - } -} diff --git a/app/src/main/java/foundation/e/apps/application/model/Installer.kt b/app/src/main/java/foundation/e/apps/application/model/Installer.kt index 2aa4f615c6ff4a732a5e16ab3e0bd3e093a45f1b..6ce65b5e879ba0543e147e4a55de8096ef978a99 100644 --- a/app/src/main/java/foundation/e/apps/application/model/Installer.kt +++ b/app/src/main/java/foundation/e/apps/application/model/Installer.kt @@ -27,10 +27,10 @@ import android.net.Uri import android.util.Log import androidx.core.content.ContextCompat import androidx.core.content.FileProvider -import foundation.e.apps.MicroGProvider import foundation.e.apps.R import foundation.e.apps.XAPK.FsUtils.deleteFileOrDir import foundation.e.apps.utils.Constants +import foundation.e.apps.utils.Constants.MICROG_SHARED_PREF import foundation.e.apps.utils.PreferenceStorage import java.io.File import java.io.IOException @@ -126,7 +126,11 @@ class Installer(private val packageName: String, context.unregisterReceiver(receiver) Log.i(TAG, "Unregistered old broadcast receiver") } catch (exception: Exception) { - exception.printStackTrace() + if (exception !is IllegalArgumentException) { + exception.printStackTrace() + } else { + Log.d(TAG, "Broadcast receiver is already unregistered") + } } context.registerReceiver(receiver, IntentFilter().apply { addAction(Intent.ACTION_PACKAGE_ADDED) @@ -146,18 +150,7 @@ class Installer(private val packageName: String, callback.onInstallationComplete(context) if (packageName == Constants.MICROG_PACKAGE) { - PreferenceStorage(context).save(context.getString(R.string.prefs_microg_vrsn_installed), true) - if (count(MicroGProvider.CONTENT_URI, context)) { - val values = ContentValues() - values.put(MicroGProvider.installStatus, "true") - val state=context.contentResolver.update(MicroGProvider.CONTENT_URI, values, - MicroGProvider.id + "=?", arrayOf("1")) - } else { - val values = ContentValues() - values.put(MicroGProvider.installStatus, "true") - val state=context.contentResolver.insert(MicroGProvider.CONTENT_URI, values); - } - + PreferenceStorage(context).save(MICROG_SHARED_PREF, true) } } } diff --git a/app/src/main/java/foundation/e/apps/application/model/StateManager.kt b/app/src/main/java/foundation/e/apps/application/model/StateManager.kt index 7f4e3df51776d0bfca72b74239ff0d5ce22287c8..b1d16b7009caa441deb69e99098c03c4460e4603 100644 --- a/app/src/main/java/foundation/e/apps/application/model/StateManager.kt +++ b/app/src/main/java/foundation/e/apps/application/model/StateManager.kt @@ -23,7 +23,9 @@ import foundation.e.apps.R import foundation.e.apps.application.model.data.BasicData import foundation.e.apps.application.model.data.SearchAppsBasicData import foundation.e.apps.applicationmanager.ApplicationManager +import foundation.e.apps.utils.Common import foundation.e.apps.utils.Constants +import foundation.e.apps.utils.Constants.MICROG_SHARED_PREF import foundation.e.apps.utils.Error import foundation.e.apps.utils.PreferenceStorage import java.util.* @@ -37,12 +39,13 @@ class StateManager(private val info: ApplicationInfo, private val app: Applicati fun find(context: Context, basicData: BasicData) { if (basicData.name == Constants.MICROG) { - Log.e("MicroGStatus", PreferenceStorage(context).getBoolean(context.getString(R.string.prefs_microg_vrsn_installed), false).toString()) + Common.updateMicroGStatus(context) + Log.e("MicroGStatus", PreferenceStorage(context).getBoolean(MICROG_SHARED_PREF, false).toString()) val state = if (appManager.isInstalling(app) && !app.isInstalling) { State.DOWNLOADING } else if (appManager.isInstalling(app) && app.isInstalling) { State.INSTALLING - } else if (PreferenceStorage(context).getBoolean(context.getString(R.string.prefs_microg_vrsn_installed), false)) { + } else if (PreferenceStorage(context).getBoolean(MICROG_SHARED_PREF, false)) { if (info.isLastVersionInstalled(context, basicData.lastVersionNumber)) { State.NOT_UPDATED } else { @@ -75,7 +78,7 @@ class StateManager(private val info: ApplicationInfo, private val app: Applicati State.DOWNLOADING } else if (appManager.isInstalling(app) && app.isInstalling) { State.INSTALLING - } else if (PreferenceStorage(context).getBoolean(context.getString(R.string.prefs_microg_vrsn_installed), false)) { + } else if (PreferenceStorage(context).getBoolean(MICROG_SHARED_PREF, false)) { if (info.isLastVersionInstalled(context, basicData.lastVersionNumber)) { State.NOT_UPDATED } else { diff --git a/app/src/main/java/foundation/e/apps/settings/SettingsFragment.kt b/app/src/main/java/foundation/e/apps/settings/SettingsFragment.kt index 16538d8b8abd4ecafa89d2f8b82de87c9a93066e..e246d47426984350223ae4f54d355f44b62d1bd9 100644 --- a/app/src/main/java/foundation/e/apps/settings/SettingsFragment.kt +++ b/app/src/main/java/foundation/e/apps/settings/SettingsFragment.kt @@ -42,14 +42,6 @@ class SettingsFragment : PreferenceFragmentCompat() { // Create preferences setPreferencesFromResource(R.xml.preferences, rootKey) - - val microGInstallState = preferenceManager.findPreference(getString(R.string.prefs_microg_vrsn_installed)) - microGInstallState?.summary = if (context?.let { PreferenceStorage(it).getBoolean(getString(R.string.prefs_microg_vrsn_installed), false) }!!) { - getString(R.string.microg_installed) - } else { - getString(R.string.microg_not_installed) - } - // Handle update check interval changes val updateCheckInterval = preferenceManager.findPreference(getString(R.string.pref_update_interval_key)) as ListPreference diff --git a/app/src/main/java/foundation/e/apps/updates/model/OutdatedApplicationsFileReader.kt b/app/src/main/java/foundation/e/apps/updates/model/OutdatedApplicationsFileReader.kt index 538aabb92fa089ac6e2499998e50a0220b50c499..93c75430b7e57279e59546454017b37af64e8ce9 100644 --- a/app/src/main/java/foundation/e/apps/updates/model/OutdatedApplicationsFileReader.kt +++ b/app/src/main/java/foundation/e/apps/updates/model/OutdatedApplicationsFileReader.kt @@ -26,6 +26,7 @@ import foundation.e.apps.application.model.Application import foundation.e.apps.application.model.State import foundation.e.apps.applicationmanager.ApplicationManager import foundation.e.apps.utils.Common +import foundation.e.apps.utils.Constants.MICROG_SHARED_PREF import foundation.e.apps.utils.PreferenceStorage class OutdatedApplicationsFileReader(private val packageManager: PackageManager, @@ -37,7 +38,7 @@ class OutdatedApplicationsFileReader(private val packageManager: PackageManager, val application: Application? = loadMicroGVersion(context[0])[0] println("versionname::-"+ application?.basicData!!.lastVersionNumber) if (PreferenceStorage(context[0]) - .getBoolean(context[0].getString(R.string.prefs_microg_vrsn_installed), false) + .getBoolean(MICROG_SHARED_PREF, false) && application.state == State.NOT_UPDATED) { applications.addAll(loadMicroGVersion(context[0])) } diff --git a/app/src/main/java/foundation/e/apps/updates/model/OutdatedApplicationsFinder.kt b/app/src/main/java/foundation/e/apps/updates/model/OutdatedApplicationsFinder.kt index a8b919cbc07c0cc047d0a57650e8417602337412..35751c033b681c23f561ea01785d802814f1ffcd 100644 --- a/app/src/main/java/foundation/e/apps/updates/model/OutdatedApplicationsFinder.kt +++ b/app/src/main/java/foundation/e/apps/updates/model/OutdatedApplicationsFinder.kt @@ -26,6 +26,8 @@ import foundation.e.apps.application.model.State import foundation.e.apps.applicationmanager.ApplicationManager import foundation.e.apps.utils.Common import foundation.e.apps.utils.Constants +import foundation.e.apps.utils.Constants.MICROG_SHARED_PREF +import foundation.e.apps.utils.PreferenceStorage class OutdatedApplicationsFinder(private val packageManager: PackageManager, private val callback: UpdatesWorkerInterface, @@ -45,14 +47,20 @@ class OutdatedApplicationsFinder(private val packageManager: PackageManager, private fun getOutdatedApplications(context: Context): ArrayList { val result = ArrayList() - var application: Application? = loadMicroGVersion(context)[0] - if (application!!.state != State.INSTALLED) { + val application: Application = loadMicroGVersion(context)[0] + if (PreferenceStorage(context).getBoolean( + MICROG_SHARED_PREF, + false + ) + ) { result.add(application) } val installedApplications = getInstalledApplications() installedApplications.forEach { packageName -> - val application = applicationManager.findOrCreateApp(packageName) - verifyApplication(application, result, context) + if (packageName != Constants.MICROG_PACKAGE) { + val app = applicationManager.findOrCreateApp(packageName) + verifyApplication(app, result, context) + } } return result } diff --git a/app/src/main/java/foundation/e/apps/utils/Common.kt b/app/src/main/java/foundation/e/apps/utils/Common.kt index 7577698d1eb6666710af76eab816e945998ae08e..e0c3dbd5e2fd0fc8bfa9cb6cfdb4c03fae1eb023 100644 --- a/app/src/main/java/foundation/e/apps/utils/Common.kt +++ b/app/src/main/java/foundation/e/apps/utils/Common.kt @@ -32,6 +32,8 @@ import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.module.SimpleModule import com.fasterxml.jackson.module.kotlin.registerKotlinModule import foundation.e.apps.categories.model.Category +import foundation.e.apps.utils.Constants.MICROG_PACKAGE +import foundation.e.apps.utils.Constants.MICROG_SHARED_PREF import java.net.URL import java.nio.file.Paths import java.util.* @@ -127,6 +129,20 @@ object Common { } return preferredLocaleList } + + /* + * Updates shared preferences related to microG EN + * @param context Context + */ + fun updateMicroGStatus(context: Context) { + val packageInfo = context.packageManager.getPackageInfo(MICROG_PACKAGE, 0) + val microgENversion = packageInfo.versionName + if (microgENversion.endsWith("-noen")) { + PreferenceStorage(context).save(MICROG_SHARED_PREF, false) + } else { + PreferenceStorage(context).save(MICROG_SHARED_PREF, true) + } + } } class keyDeserializer : KeyDeserializer() { diff --git a/app/src/main/java/foundation/e/apps/utils/Constants.kt b/app/src/main/java/foundation/e/apps/utils/Constants.kt index 4a759ad781ddaf20f927444fdac122f9905f6224..9ae659f5cd84e3e7ae316e54c9b4999c235eaa3f 100644 --- a/app/src/main/java/foundation/e/apps/utils/Constants.kt +++ b/app/src/main/java/foundation/e/apps/utils/Constants.kt @@ -36,6 +36,7 @@ object Constants { const val MICROG_ID = 149 const val MICROG = "microG Exposure Notification version" const val MICROG_ICON_URI = "https://gitlab.e.foundation/uploads/-/system/project/avatar/149/ic_core_service_app.png?width=64" + const val MICROG_SHARED_PREF = "pref_microg_installed" // Search diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 4c6be10d245af5c33bb1fd78bbb4d0692a710603..615be03e7e5c4cd8139d7b54e7ded23ac4d5ede7 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -98,9 +98,6 @@ Wird installiert mehr Bitte erneut auf ZURÜCK tippen zum Beenden - Installiert - Nicht installiert Paketname - pref_microg_installed Überprüfung der Signatur ist fehlgeschlagen, die Installation wird abgebrochen \ No newline at end of file diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index ee32d0c94c0b2e5617c38d207b8eee85912e58ae..e654d851cf65d4175a2071201df9d764b108fa14 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -98,8 +98,5 @@ Aztarnariak Puntuazioa 10etik. Exodus Privacy analisiak erabiliz kalkulatuta, aplikazioan erabilitako baimen eta aztarnarietan oinarrituta. Puntuazioa 5etik. Erabiltzaileek aplikazioari emandako puntuazioarekin kalkulatuta. - Instalatuta - Instalatu gabe - pref_microg_installed Pakete-izena \ 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 34071bc2ed18472d515531c7e8d7cf93eeee0ea5..4b17cc9221ec048d49bef031fb7e2208115052fc 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -98,9 +98,6 @@ show_only_pwa_apps show_only_open-source_apps Tocca ancora INDIETRO per uscire - Installato - Non installato - pref_microg_installed Verifica della firma non riuscita, installazione interrotta Nome del pacchetto \ 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 3d18b2af23ad6d630accfb8719455d6445e315ff..41ad9f199dc3967ba30f3d254ed85b3a73baf3f9 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -98,8 +98,6 @@ Toon applicaties: show_only_open-source_apps show_only_pwa_apps - Geïnstalleerd - Niet Geïnstalleerd Pakket naam Verificatie mislukt, installatie wordt afgebroken \ 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 eab33362467778cc4d92ec76373c2f1d2931ed11..40d8790c516a7df8223abd5ca7bbcb482d9e711b 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -99,8 +99,5 @@ Приложения Приложение не может быть установлено. Пожалуйста, попробуйте позже. Пожалуйста, нажмите НАЗАД снова для выхода - Установленная версия MicroG - Установленно - Не установлено Имя пакета \ 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 b02e6f3ba365644e8433d5341e7ea859c680ff22..94f95ac4041f4d6eb8b62b0c634c3159982b3b00 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -84,8 +84,6 @@ Súkromie Aktualizácie aplikácií sa nenainštalujú automaticky Aktualizácie aplikácií sa nainštalujú automaticky - Nenainštalovaný - Nainštalovaný Automatická aktualizácia aplikácií len v sieťach bez merania objemu dát ako napríklad Wi-Fi Iba cez nemerané siete Čaká sa na nemeranú sieť diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7fb10ac5705fa49df64b5b1dcb4f6d683b957cf1..b5c14aa1de4822b6baf6d14b3aab58764297f985 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -152,9 +152,6 @@ PWA - pref_microg_installed - Not Installed - Installed Signature verification failed, aborting install diff --git a/platform.keystore b/platform.keystore new file mode 100644 index 0000000000000000000000000000000000000000..574b2203d6dc78b3853cf899c3c7a1f60c773507 Binary files /dev/null and b/platform.keystore differ