From 48c190b449dc6131ee5476a8d6fed7bcffc7d1ba Mon Sep 17 00:00:00 2001 From: tom5079 Date: Mon, 13 May 2019 21:29:38 +0900 Subject: [PATCH] Add Release note to update --- app/build.gradle | 9 ++- .../quaver/pupil/ExampleInstrumentedTest.kt | 2 +- .../java/xyz/quaver/pupil/MainActivity.kt | 65 ++++++++++++++++++- app/src/main/res/values-ja/strings.xml | 3 +- app/src/main/res/values-ko/strings.xml | 3 +- app/src/main/res/values-v23/styles.xml | 1 - app/src/main/res/values/strings.xml | 3 +- 7 files changed, 75 insertions(+), 11 deletions(-) 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 @@