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