diff --git a/app/build.gradle b/app/build.gradle
index 405be41f..396af997 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -7,10 +7,10 @@ android {
compileSdkVersion 28
defaultConfig {
applicationId "xyz.quaver.pupil"
- minSdkVersion 15
+ minSdkVersion 16
targetSdkVersion 28
- versionCode 2
- versionName "1.1"
+ versionCode 3
+ versionName "1.2"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
@@ -25,6 +25,8 @@ android {
}
dependencies {
+ def markwonVersion = "3.0.1"
+
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.2.1'
@@ -37,6 +39,7 @@ dependencies {
implementation 'com.github.arimorty:floatingsearchview:2.1.1'
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
+ implementation "ru.noties.markwon:core:${markwonVersion}"
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
androidTestImplementation 'androidx.test:runner:1.1.1'
diff --git a/app/src/androidTest/java/xyz/quaver/pupil/ExampleInstrumentedTest.kt b/app/src/androidTest/java/xyz/quaver/pupil/ExampleInstrumentedTest.kt
index 16060355..41211cc7 100644
--- a/app/src/androidTest/java/xyz/quaver/pupil/ExampleInstrumentedTest.kt
+++ b/app/src/androidTest/java/xyz/quaver/pupil/ExampleInstrumentedTest.kt
@@ -13,6 +13,7 @@ import org.junit.Test
import org.junit.runner.RunWith
import xyz.quaver.hiyobi.getReader
import java.io.File
+import java.util.*
/**
* Instrumented test, which will execute on an Android device.
@@ -40,6 +41,5 @@ class ExampleInstrumentedTest {
@Test
fun test_doSearch() {
- getReader(1414061)
}
}
diff --git a/app/src/main/java/xyz/quaver/pupil/MainActivity.kt b/app/src/main/java/xyz/quaver/pupil/MainActivity.kt
index 5e4042b2..1b48419e 100644
--- a/app/src/main/java/xyz/quaver/pupil/MainActivity.kt
+++ b/app/src/main/java/xyz/quaver/pupil/MainActivity.kt
@@ -10,16 +10,20 @@ import android.content.pm.PackageManager
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.net.Uri
+import android.os.Build
import android.os.Bundle
import android.os.Environment
import android.preference.PreferenceManager
import android.text.*
import android.text.style.AlignmentSpan
+import android.util.Log
import android.view.View
import android.view.WindowManager
+import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
+import androidx.core.app.NotificationCompat
import androidx.core.content.ContextCompat
import androidx.core.content.FileProvider
import androidx.core.content.res.ResourcesCompat
@@ -33,6 +37,9 @@ import com.google.android.material.appbar.AppBarLayout
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.activity_main_content.*
import kotlinx.coroutines.*
+import kotlinx.serialization.json.JsonObject
+import kotlinx.serialization.json.content
+import ru.noties.markwon.Markwon
import xyz.quaver.hitomi.*
import xyz.quaver.pupil.adapters.GalleryBlockAdapter
import xyz.quaver.pupil.types.TagSuggestion
@@ -41,7 +48,10 @@ import xyz.quaver.pupil.util.SetLineOverlap
import xyz.quaver.pupil.util.checkUpdate
import xyz.quaver.pupil.util.getApkUrl
import java.io.File
+import java.lang.StringBuilder
+import java.util.*
import javax.net.ssl.HttpsURLConnection
+import kotlin.collections.ArrayList
class MainActivity : AppCompatActivity() {
@@ -65,7 +75,7 @@ class MainActivity : AppCompatActivity() {
checkPermission()
- update()
+ checkUpdate()
main_appbar_layout.addOnOffsetChangedListener(
AppBarLayout.OnOffsetChangedListener { _, p1 ->
@@ -139,7 +149,50 @@ class MainActivity : AppCompatActivity() {
}
}
- private fun update() {
+ private fun checkUpdate() {
+
+ fun extractReleaseNote(update: JsonObject, locale: String) : String {
+ val markdown = update["body"]!!.content
+
+ val target = when(locale) {
+ "ko" -> "한국어"
+ "ja" -> "日本語"
+ else -> "English"
+ }
+
+ val releaseNote = Regex("^# Release Note.+$")
+ val language = Regex("^## $target$")
+ val end = Regex("^#.+$")
+
+ var releaseNoteFlag = false
+ var languageFlag = false
+
+ val result = StringBuilder()
+
+ for(line in markdown.split('\n')) {
+ if (releaseNote.matches(line)) {
+ releaseNoteFlag = true
+ continue
+ }
+
+ if (releaseNoteFlag) {
+ if (language.matches(line)) {
+ languageFlag = true
+ continue
+ }
+ }
+
+ if (languageFlag) {
+ if (end.matches(line))
+ break
+
+ result.append(line+"\n")
+ }
+ }
+
+ return getString(R.string.update_release_note, update["tag_name"]?.content, result.toString())
+ }
+
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
return
@@ -151,8 +204,13 @@ class MainActivity : AppCompatActivity() {
val dialog = AlertDialog.Builder(this@MainActivity).apply {
setTitle(R.string.update_title)
- setMessage(getString(R.string.update_message, update["tag_name"], BuildConfig.VERSION_NAME))
+ val msg = extractReleaseNote(update, Locale.getDefault().language)
+ setMessage(Markwon.create(context).toMarkdown(msg))
setPositiveButton(android.R.string.yes) { _, _ ->
+ Toast.makeText(
+ context, getString(R.string.update_download_started), Toast.LENGTH_SHORT
+ ).show()
+
val dest = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), fileName)
val desturi =
FileProvider.getUriForFile(
@@ -168,6 +226,7 @@ class MainActivity : AppCompatActivity() {
setDescription(getString(R.string.update_notification_description))
setTitle(getString(R.string.app_name))
setDestinationUri(Uri.fromFile(dest))
+ setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE)
}
val manager = getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index eacd6842..f79d7c26 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -15,7 +15,6 @@
一回にロードするギャラリー数
検索設定
設定
- 新バージョン%1$sをリリースしました\n(現バージョン: %2$s)\nアップデートしますか?
アップデートダウンロード中
新しいアップデートがあります
注意
@@ -27,4 +26,6 @@
履歴数: %1$d
履歴
トップ
+ ダウンロード中
+ # リリースノート(v%1$s)\n%2$s
\ No newline at end of file
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index e4872bb0..309a4a2d 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -12,7 +12,6 @@
한 번에 로드할 갤러리 수
검색 설정
설정
- 버전 %1$s이 출시되었습니다.\n(현재 %2$s)\n업데이트 하시겠습니까?
apk 다운로드중…
업데이트가 있습니다!
경고
@@ -27,4 +26,6 @@
히스토리 %1$d개 저장됨
히스토리
홈
+ 다운로드 중
+ # 릴리즈 노트(v%1$s)\n%2$s
\ No newline at end of file
diff --git a/app/src/main/res/values-v23/styles.xml b/app/src/main/res/values-v23/styles.xml
index 9c3f02d2..0cce6118 100644
--- a/app/src/main/res/values-v23/styles.xml
+++ b/app/src/main/res/values-v23/styles.xml
@@ -1,7 +1,6 @@