Add Release note to update

This commit is contained in:
tom5079
2019-05-13 21:29:38 +09:00
parent 161d1bdcdd
commit 48c190b449
7 changed files with 75 additions and 11 deletions

View File

@@ -7,10 +7,10 @@ android {
compileSdkVersion 28 compileSdkVersion 28
defaultConfig { defaultConfig {
applicationId "xyz.quaver.pupil" applicationId "xyz.quaver.pupil"
minSdkVersion 15 minSdkVersion 16
targetSdkVersion 28 targetSdkVersion 28
versionCode 2 versionCode 3
versionName "1.1" versionName "1.2"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
} }
buildTypes { buildTypes {
@@ -25,6 +25,8 @@ android {
} }
dependencies { dependencies {
def markwonVersion = "3.0.1"
implementation fileTree(dir: 'libs', include: ['*.jar']) implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.2.1' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.2.1'
@@ -37,6 +39,7 @@ dependencies {
implementation 'com.github.arimorty:floatingsearchview:2.1.1' implementation 'com.github.arimorty:floatingsearchview:2.1.1'
implementation 'androidx.appcompat:appcompat:1.0.2' implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation "ru.noties.markwon:core:${markwonVersion}"
testImplementation 'junit:junit:4.12' testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.0' androidTestImplementation 'androidx.test.ext:junit:1.1.0'
androidTestImplementation 'androidx.test:runner:1.1.1' androidTestImplementation 'androidx.test:runner:1.1.1'

View File

@@ -13,6 +13,7 @@ import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import xyz.quaver.hiyobi.getReader import xyz.quaver.hiyobi.getReader
import java.io.File import java.io.File
import java.util.*
/** /**
* Instrumented test, which will execute on an Android device. * Instrumented test, which will execute on an Android device.
@@ -40,6 +41,5 @@ class ExampleInstrumentedTest {
@Test @Test
fun test_doSearch() { fun test_doSearch() {
getReader(1414061)
} }
} }

View File

@@ -10,16 +10,20 @@ import android.content.pm.PackageManager
import android.graphics.Bitmap import android.graphics.Bitmap
import android.graphics.BitmapFactory import android.graphics.BitmapFactory
import android.net.Uri import android.net.Uri
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.os.Environment import android.os.Environment
import android.preference.PreferenceManager import android.preference.PreferenceManager
import android.text.* import android.text.*
import android.text.style.AlignmentSpan import android.text.style.AlignmentSpan
import android.util.Log
import android.view.View import android.view.View
import android.view.WindowManager import android.view.WindowManager
import android.widget.Toast
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat import androidx.core.app.ActivityCompat
import androidx.core.app.NotificationCompat
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.content.FileProvider import androidx.core.content.FileProvider
import androidx.core.content.res.ResourcesCompat 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.*
import kotlinx.android.synthetic.main.activity_main_content.* import kotlinx.android.synthetic.main.activity_main_content.*
import kotlinx.coroutines.* 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.hitomi.*
import xyz.quaver.pupil.adapters.GalleryBlockAdapter import xyz.quaver.pupil.adapters.GalleryBlockAdapter
import xyz.quaver.pupil.types.TagSuggestion 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.checkUpdate
import xyz.quaver.pupil.util.getApkUrl import xyz.quaver.pupil.util.getApkUrl
import java.io.File import java.io.File
import java.lang.StringBuilder
import java.util.*
import javax.net.ssl.HttpsURLConnection import javax.net.ssl.HttpsURLConnection
import kotlin.collections.ArrayList
class MainActivity : AppCompatActivity() { class MainActivity : AppCompatActivity() {
@@ -65,7 +75,7 @@ class MainActivity : AppCompatActivity() {
checkPermission() checkPermission()
update() checkUpdate()
main_appbar_layout.addOnOffsetChangedListener( main_appbar_layout.addOnOffsetChangedListener(
AppBarLayout.OnOffsetChangedListener { _, p1 -> 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) if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
return return
@@ -151,8 +204,13 @@ class MainActivity : AppCompatActivity() {
val dialog = AlertDialog.Builder(this@MainActivity).apply { val dialog = AlertDialog.Builder(this@MainActivity).apply {
setTitle(R.string.update_title) 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) { _, _ -> 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 dest = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), fileName)
val desturi = val desturi =
FileProvider.getUriForFile( FileProvider.getUriForFile(
@@ -168,6 +226,7 @@ class MainActivity : AppCompatActivity() {
setDescription(getString(R.string.update_notification_description)) setDescription(getString(R.string.update_notification_description))
setTitle(getString(R.string.app_name)) setTitle(getString(R.string.app_name))
setDestinationUri(Uri.fromFile(dest)) setDestinationUri(Uri.fromFile(dest))
setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE)
} }
val manager = getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager val manager = getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager

View File

@@ -15,7 +15,6 @@
<string name="settings_galleries_per_page">一回にロードするギャラリー数</string> <string name="settings_galleries_per_page">一回にロードするギャラリー数</string>
<string name="settings_search_title">検索設定</string> <string name="settings_search_title">検索設定</string>
<string name="settings_title">設定</string> <string name="settings_title">設定</string>
<string name="update_message">新バージョン%1$sをリリースしました\n(現バージョン: %2$s)\nアップデートしますか</string>
<string name="update_notification_description">アップデートダウンロード中</string> <string name="update_notification_description">アップデートダウンロード中</string>
<string name="update_title">新しいアップデートがあります</string> <string name="update_title">新しいアップデートがあります</string>
<string name="warning">注意</string> <string name="warning">注意</string>
@@ -27,4 +26,6 @@
<string name="settings_clear_history_summary">履歴数: %1$d</string> <string name="settings_clear_history_summary">履歴数: %1$d</string>
<string name="main_drawer_history">履歴</string> <string name="main_drawer_history">履歴</string>
<string name="main_drawer_home">トップ</string> <string name="main_drawer_home">トップ</string>
<string name="update_download_started">ダウンロード中</string>
<string name="update_release_note"># リリースノート(v%1$s)\n%2$s</string>
</resources> </resources>

View File

@@ -12,7 +12,6 @@
<string name="settings_galleries_per_page">한 번에 로드할 갤러리 수</string> <string name="settings_galleries_per_page">한 번에 로드할 갤러리 수</string>
<string name="settings_search_title">검색 설정</string> <string name="settings_search_title">검색 설정</string>
<string name="settings_title">설정</string> <string name="settings_title">설정</string>
<string name="update_message">버전 %1$s이 출시되었습니다.\n(현재 %2$s)\n업데이트 하시겠습니까?</string>
<string name="update_notification_description">apk 다운로드중&#8230;</string> <string name="update_notification_description">apk 다운로드중&#8230;</string>
<string name="update_title">업데이트가 있습니다!</string> <string name="update_title">업데이트가 있습니다!</string>
<string name="warning">경고</string> <string name="warning">경고</string>
@@ -27,4 +26,6 @@
<string name="settings_clear_history_summary">히스토리 %1$d개 저장됨</string> <string name="settings_clear_history_summary">히스토리 %1$d개 저장됨</string>
<string name="main_drawer_history">히스토리</string> <string name="main_drawer_history">히스토리</string>
<string name="main_drawer_home"></string> <string name="main_drawer_home"></string>
<string name="update_download_started">다운로드 중</string>
<string name="update_release_note"># 릴리즈 노트(v%1$s)\n%2$s</string>
</resources> </resources>

View File

@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<style name="NoActionBarAppTheme" parent="Theme.MaterialComponents.Light.NoActionBar"> <style name="NoActionBarAppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="android:windowFullscreen">true</item>
<item name="android:windowLightStatusBar">true</item> <item name="android:windowLightStatusBar">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@color/transparent</item> <item name="android:statusBarColor">@color/transparent</item>

View File

@@ -22,8 +22,9 @@
<string name="main_drawer_history">History</string> <string name="main_drawer_history">History</string>
<string name="update_title">Update available</string> <string name="update_title">Update available</string>
<string name="update_message">Version %1$s is available!\n(current version is %2$s)\nDo you want to update?</string> <string name="update_download_started">Download started</string>
<string name="update_notification_description">Downloading apk&#8230;</string> <string name="update_notification_description">Downloading apk&#8230;</string>
<string name="update_release_note"># Release Note(v%1$s)\n%2$s</string>
<string name="search_hint">Search galleries</string> <string name="search_hint">Search galleries</string>