From 275684c9ceaff8b696d1767a7d0b15c8534cdf76 Mon Sep 17 00:00:00 2001 From: Pupil Date: Fri, 14 Feb 2020 17:02:53 +0900 Subject: [PATCH] now able to install Debug and release builds in one device Fixed shrink serialization error --- app/build.gradle | 19 ++++++++++------ app/src/debug/res/values/strings.xml | 22 +++++++++++++++++++ .../java/xyz/quaver/pupil/ui/MainActivity.kt | 14 +++++------- .../xyz/quaver/pupil/ui/ReaderActivity.kt | 2 -- .../xyz/quaver/pupil/ui/SettingsActivity.kt | 10 ++++----- .../java/xyz/quaver/pupil/util/ConstValues.kt | 7 +++++- .../xyz/quaver/pupil/util/download/Cache.kt | 14 +++--------- .../java/xyz/quaver/pupil/util/history.kt | 16 ++++++-------- .../main/java/xyz/quaver/pupil/util/lock.kt | 9 ++++---- .../main/java/xyz/quaver/pupil/util/update.kt | 7 ++++-- build.gradle | 2 +- gradle.properties | 1 + 12 files changed, 70 insertions(+), 53 deletions(-) create mode 100644 app/src/debug/res/values/strings.xml diff --git a/app/build.gradle b/app/build.gradle index 598bcaa4..6d43957f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlinx-serialization' -if (file("google-services.json").exists()) { +if (file("src/google-services.json").exists() && file("src/debug/google-services.json").exists()) { logger.lifecycle("Firebase Enabled") apply plugin: 'com.google.gms.google-services' apply plugin: 'io.fabric' @@ -20,18 +20,23 @@ android { minSdkVersion 16 targetSdkVersion 29 versionCode 42 - versionName "4.6-beta1" + versionName "4.6-alpha1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true vectorDrawables.useSupportLibrary = true } buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + debug { + debuggable true + applicationIdSuffix ".debug" + versionNameSuffix "-DEBUG" + + buildConfigField('Boolean', 'CENSOR', 'false') } - buildTypes.each { - it.buildConfigField('boolean', 'CENSOR', 'false') + release { + minifyEnabled true + shrinkResources true + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } kotlinOptions { diff --git a/app/src/debug/res/values/strings.xml b/app/src/debug/res/values/strings.xml new file mode 100644 index 00000000..944c7613 --- /dev/null +++ b/app/src/debug/res/values/strings.xml @@ -0,0 +1,22 @@ + + + + + Pupil-Debug + \ No newline at end of file diff --git a/app/src/main/java/xyz/quaver/pupil/ui/MainActivity.kt b/app/src/main/java/xyz/quaver/pupil/ui/MainActivity.kt index 0d62572b..14f6c3a3 100644 --- a/app/src/main/java/xyz/quaver/pupil/ui/MainActivity.kt +++ b/app/src/main/java/xyz/quaver/pupil/ui/MainActivity.kt @@ -25,6 +25,7 @@ import android.net.Uri import android.os.Bundle import android.text.* import android.text.style.AlignmentSpan +import android.util.Log import android.view.KeyEvent import android.view.MotionEvent import android.view.View @@ -51,11 +52,7 @@ import io.fabric.sdk.android.Fabric import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.activity_main_content.* import kotlinx.coroutines.* -import kotlinx.serialization.ImplicitReflectionSerializer -import kotlinx.serialization.json.Json -import kotlinx.serialization.json.JsonConfiguration import kotlinx.serialization.list -import kotlinx.serialization.stringify import xyz.quaver.hitomi.GalleryBlock import xyz.quaver.hitomi.doSearch import xyz.quaver.hitomi.getGalleryIDsFromNozomi @@ -123,6 +120,7 @@ class MainActivity : AppCompatActivity() { val lockManager = try { LockManager(this) } catch (e: Exception) { + Log.i("PUPILD", e.toString()) android.app.AlertDialog.Builder(this).apply { setTitle(R.string.warning) setMessage(R.string.lock_corrupted) @@ -181,7 +179,7 @@ class MainActivity : AppCompatActivity() { override fun onDestroy() { super.onDestroy() - (main_recyclerview.adapter as GalleryBlockAdapter).timer.cancel() + (main_recyclerview?.adapter as? GalleryBlockAdapter)?.timer?.cancel() } override fun onResume() { @@ -695,7 +693,6 @@ class MainActivity : AppCompatActivity() { } private var suggestionJob : Job? = null - @UseExperimental(ImplicitReflectionSerializer::class) private fun setupSearchBar() { val searchInputView = findViewById(R.id.search_bar_text) //Change upper case letters to lower case @@ -719,12 +716,11 @@ class MainActivity : AppCompatActivity() { with(main_searchview as FloatingSearchView) { val favoritesFile = File(ContextCompat.getDataDir(context), "favorites_tags.json") - val json = Json(JsonConfiguration.Stable) val serializer = Tag.serializer().list if (!favoritesFile.exists()) { favoritesFile.createNewFile() - favoritesFile.writeText(json.stringify(Tags(listOf()))) + favoritesFile.writeText(json.stringify(serializer, Tags(listOf()))) } setOnMenuItemClickListener { @@ -842,7 +838,7 @@ class MainActivity : AppCompatActivity() { favorites.add(tag) } - favoritesFile.writeText(json.stringify(favorites)) + favoritesFile.writeText(json.stringify(serializer, favorites)) } } diff --git a/app/src/main/java/xyz/quaver/pupil/ui/ReaderActivity.kt b/app/src/main/java/xyz/quaver/pupil/ui/ReaderActivity.kt index 7af22aec..bde9a89e 100644 --- a/app/src/main/java/xyz/quaver/pupil/ui/ReaderActivity.kt +++ b/app/src/main/java/xyz/quaver/pupil/ui/ReaderActivity.kt @@ -38,7 +38,6 @@ import io.fabric.sdk.android.Fabric import kotlinx.android.synthetic.main.activity_reader.* import kotlinx.android.synthetic.main.activity_reader.view.* import kotlinx.android.synthetic.main.dialog_numberpicker.view.* -import kotlinx.serialization.ImplicitReflectionSerializer import xyz.quaver.Code import xyz.quaver.pupil.Pupil import xyz.quaver.pupil.R @@ -141,7 +140,6 @@ class ReaderActivity : AppCompatActivity() { super.onResume() } - @UseExperimental(ImplicitReflectionSerializer::class) override fun onCreateOptionsMenu(menu: Menu?): Boolean { menuInflater.inflate(R.menu.reader, menu) diff --git a/app/src/main/java/xyz/quaver/pupil/ui/SettingsActivity.kt b/app/src/main/java/xyz/quaver/pupil/ui/SettingsActivity.kt index aa09d8a4..ebcdbb77 100644 --- a/app/src/main/java/xyz/quaver/pupil/ui/SettingsActivity.kt +++ b/app/src/main/java/xyz/quaver/pupil/ui/SettingsActivity.kt @@ -30,9 +30,8 @@ import androidx.appcompat.app.AppCompatActivity import androidx.preference.PreferenceManager import com.google.android.material.snackbar.Snackbar import kotlinx.android.synthetic.main.settings_activity.* -import kotlinx.serialization.ImplicitReflectionSerializer -import kotlinx.serialization.json.Json -import kotlinx.serialization.parseList +import kotlinx.serialization.list +import kotlinx.serialization.serializer import net.rdrei.android.dirchooser.DirectoryChooserActivity import xyz.quaver.pupil.Pupil import xyz.quaver.pupil.R @@ -79,7 +78,6 @@ class SettingsActivity : AppCompatActivity() { return true } - @UseExperimental(ImplicitReflectionSerializer::class) override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { when(requestCode) { REQUEST_LOCK -> { @@ -96,13 +94,13 @@ class SettingsActivity : AppCompatActivity() { val uri = data?.data ?: return try { - val json = contentResolver.openInputStream(uri).use { inputStream -> + val str = contentResolver.openInputStream(uri).use { inputStream -> inputStream!! inputStream.readBytes().toString(Charset.defaultCharset()) } - (application as Pupil).favorites.addAll(Json.parseList(json).also { + (application as Pupil).favorites.addAll(json.parse(Int.serializer().list, str).also { Snackbar.make( window.decorView, getString(R.string.settings_restore_successful, it.size), diff --git a/app/src/main/java/xyz/quaver/pupil/util/ConstValues.kt b/app/src/main/java/xyz/quaver/pupil/util/ConstValues.kt index fecea791..38b24cf2 100644 --- a/app/src/main/java/xyz/quaver/pupil/util/ConstValues.kt +++ b/app/src/main/java/xyz/quaver/pupil/util/ConstValues.kt @@ -18,8 +18,13 @@ package xyz.quaver.pupil.util +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonConfiguration + const val REQUEST_LOCK = 38238 const val REQUEST_RESTORE = 16546 const val REQUEST_DOWNLOAD_FOLDER = 3874 const val REQUEST_DOWNLOAD_FOLDER_OLD = 3425 -const val REQUEST_WRITE_PERMISSION_AND_SAF = 13900 \ No newline at end of file +const val REQUEST_WRITE_PERMISSION_AND_SAF = 13900 + +val json = Json(JsonConfiguration.Stable) \ No newline at end of file diff --git a/app/src/main/java/xyz/quaver/pupil/util/download/Cache.kt b/app/src/main/java/xyz/quaver/pupil/util/download/Cache.kt index dd36f28c..46c94eeb 100644 --- a/app/src/main/java/xyz/quaver/pupil/util/download/Cache.kt +++ b/app/src/main/java/xyz/quaver/pupil/util/download/Cache.kt @@ -21,21 +21,17 @@ package xyz.quaver.pupil.util.download import android.content.Context import android.content.ContextWrapper import android.util.Base64 -import android.util.Log import androidx.preference.PreferenceManager import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.async import kotlinx.coroutines.withContext -import kotlinx.serialization.ImplicitReflectionSerializer -import kotlinx.serialization.json.Json -import kotlinx.serialization.parse -import kotlinx.serialization.stringify import xyz.quaver.Code import xyz.quaver.hitomi.GalleryBlock import xyz.quaver.hitomi.Reader import xyz.quaver.pupil.util.getCachedGallery import xyz.quaver.pupil.util.getDownloadDirectory +import xyz.quaver.pupil.util.json import java.io.File import java.net.URL @@ -50,7 +46,6 @@ class Cache(context: Context) : ContextWrapper(context) { it.mkdirs() } - @UseExperimental(ImplicitReflectionSerializer::class) fun getCachedMetadata(galleryID: Int) : Metadata? { val file = File(getCachedGallery(galleryID), ".metadata") @@ -58,7 +53,7 @@ class Cache(context: Context) : ContextWrapper(context) { return null return try { - Json.parse(file.readText()) + json.parse(Metadata.serializer(), file.readText()) } catch (e: Exception) { //File corrupted file.delete() @@ -66,14 +61,13 @@ class Cache(context: Context) : ContextWrapper(context) { } } - @UseExperimental(ImplicitReflectionSerializer::class) fun setCachedMetadata(galleryID: Int, metadata: Metadata) { val file = File(getCachedGallery(galleryID), ".metadata").also { if (!it.exists()) it.createNewFile() } - file.writeText(Json.stringify(metadata)) + file.writeText(json.stringify(Metadata.serializer(), metadata)) } suspend fun getThumbnail(galleryID: Int): String? { @@ -183,12 +177,10 @@ class Cache(context: Context) : ContextWrapper(context) { } fun getImages(galleryID: Int): List? { - val started = System.currentTimeMillis() val gallery = getCachedGallery(galleryID) val reader = getReaderOrNull(galleryID) ?: return null val images = gallery.listFiles() ?: return null - Log.i("PUPILD", "${System.currentTimeMillis() - started} ms") return reader.galleryInfo.indices.map { index -> images.firstOrNull { file -> file.name.startsWith("%05d".format(index)) } } diff --git a/app/src/main/java/xyz/quaver/pupil/util/history.kt b/app/src/main/java/xyz/quaver/pupil/util/history.kt index 665ccdfe..cb13c226 100644 --- a/app/src/main/java/xyz/quaver/pupil/util/history.kt +++ b/app/src/main/java/xyz/quaver/pupil/util/history.kt @@ -18,15 +18,14 @@ package xyz.quaver.pupil.util -import kotlinx.serialization.ImplicitReflectionSerializer -import kotlinx.serialization.json.Json -import kotlinx.serialization.json.JsonConfiguration -import kotlinx.serialization.parseList -import kotlinx.serialization.stringify +import kotlinx.serialization.list +import kotlinx.serialization.serializer import java.io.File class Histories(private val file: File) : ArrayList() { + val serializer = Int.serializer().list + init { if (!file.exists()) file.parentFile?.mkdirs() @@ -38,21 +37,20 @@ class Histories(private val file: File) : ArrayList() { } } - @UseExperimental(ImplicitReflectionSerializer::class) fun load() : Histories { return apply { super.clear() addAll( - Json(JsonConfiguration.Stable).parseList( + json.parse( + serializer, file.bufferedReader().use { it.readText() } ) ) } } - @UseExperimental(ImplicitReflectionSerializer::class) fun save() { - file.writeText(Json(JsonConfiguration.Stable).stringify(this)) + file.writeText(json.stringify(serializer, this)) } override fun add(element: Int): Boolean { diff --git a/app/src/main/java/xyz/quaver/pupil/util/lock.kt b/app/src/main/java/xyz/quaver/pupil/util/lock.kt index cba085c4..4f48b784 100644 --- a/app/src/main/java/xyz/quaver/pupil/util/lock.kt +++ b/app/src/main/java/xyz/quaver/pupil/util/lock.kt @@ -21,9 +21,10 @@ package xyz.quaver.pupil.util import android.content.Context import android.content.ContextWrapper import androidx.core.content.ContextCompat -import kotlinx.serialization.* +import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonConfiguration +import kotlinx.serialization.list import java.io.File import java.security.MessageDigest @@ -73,7 +74,6 @@ class LockManager(base: Context): ContextWrapper(base) { load() } - @UseExperimental(ImplicitReflectionSerializer::class) private fun load() { val lock = File(ContextCompat.getDataDir(this), "lock.json") @@ -82,17 +82,16 @@ class LockManager(base: Context): ContextWrapper(base) { lock.writeText("[]") } - locks = ArrayList(Json(JsonConfiguration.Stable).parseList(lock.readText())) + locks = ArrayList(json.parse(Lock.serializer().list, lock.readText())) } - @UseExperimental(ImplicitReflectionSerializer::class) private fun save() { val lock = File(ContextCompat.getDataDir(this), "lock.json") if (!lock.exists()) lock.createNewFile() - lock.writeText(Json(JsonConfiguration.Stable).stringify(locks?.toList() ?: listOf())) + lock.writeText(json.stringify(Lock.serializer().list, locks?.toList() ?: listOf())) } fun add(lock: Lock) { diff --git a/app/src/main/java/xyz/quaver/pupil/util/update.kt b/app/src/main/java/xyz/quaver/pupil/util/update.kt index 6d7c8cfb..94ae9ed1 100644 --- a/app/src/main/java/xyz/quaver/pupil/util/update.kt +++ b/app/src/main/java/xyz/quaver/pupil/util/update.kt @@ -32,7 +32,10 @@ import androidx.preference.PreferenceManager import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import kotlinx.serialization.json.* +import kotlinx.serialization.json.JsonArray +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.boolean +import kotlinx.serialization.json.content import ru.noties.markwon.Markwon import xyz.quaver.pupil.BuildConfig import xyz.quaver.pupil.R @@ -43,7 +46,7 @@ import java.util.* fun getReleases(url: String) : JsonArray { return try { URL(url).readText().let { - Json(JsonConfiguration.Stable).parse(JsonArray.serializer(), it) + json.parse(JsonArray.serializer(), it) } } catch (e: Exception) { JsonArray(emptyList()) diff --git a/build.gradle b/build.gradle index 495dc04c..a1f207cf 100644 --- a/build.gradle +++ b/build.gradle @@ -31,4 +31,4 @@ allprojects { task clean(type: Delete) { delete rootProject.buildDir -} +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index d5fb122a..dcb17194 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,3 +15,4 @@ kotlin.code.style=official android.enableJetifier=true org.gradle.jvmargs=-Xmx1024M -Dkotlin.daemon.jvm.options\="-Xmx1024M" android.useAndroidX=true +android.enableR8.fullMode=true \ No newline at end of file