Skip to content

Commit

Permalink
save saved epub file info in pref so that the list can be accessed later
Browse files Browse the repository at this point in the history
  • Loading branch information
plateaukao committed Jan 9, 2022
1 parent 3dca870 commit 73e227a
Show file tree
Hide file tree
Showing 8 changed files with 80 additions and 21 deletions.
32 changes: 25 additions & 7 deletions app/src/main/java/de/baumann/browser/activity/BrowserActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,15 @@ import android.widget.TextView.OnEditorActionListener
import androidx.activity.ComponentActivity
import androidx.activity.viewModels
import androidx.core.content.edit
import androidx.core.net.toUri
import androidx.core.view.isVisible
import androidx.documentfile.provider.DocumentFile
import androidx.lifecycle.lifecycleScope
import de.baumann.browser.Ninja.R
import de.baumann.browser.Ninja.databinding.*
import de.baumann.browser.browser.*
import de.baumann.browser.database.*
import de.baumann.browser.epub.EpubFileInfo
import de.baumann.browser.epub.EpubManager
import de.baumann.browser.preference.*
import de.baumann.browser.service.ClearService
Expand Down Expand Up @@ -609,7 +612,9 @@ open class BrowserActivity : ComponentActivity(), BrowserController, OnClickList

private fun saveEpub(fileUri: Uri) {
lifecycleScope.launch(Dispatchers.Main) {
val bookName = if (isNewEpubFile) epubManager.getBookName() else ""
val isNewFile = (DocumentFile.fromSingleUri(this@BrowserActivity, fileUri)?.length() ?: 0).toInt() == 0

val bookName = if (isNewFile) epubManager.getBookName() else ""
val chapterName = epubManager.getChapterName(ninjaWebView.title)

val progressDialog = ProgressDialog(this@BrowserActivity, R.style.TouchAreaDialog).apply {
Expand All @@ -619,15 +624,20 @@ open class BrowserActivity : ComponentActivity(), BrowserController, OnClickList

val rawHtml = ninjaWebView.getRawHtml()
epubManager.saveEpub(
isNewEpubFile,
isNewFile,
fileUri,
rawHtml,
bookName,
chapterName,
ninjaWebView.url ?: "") {
ninjaWebView.url ?: "") { savedBookName ->
progressDialog.dismiss()
HelperUnit.openFile(this@BrowserActivity, fileUri, Constants.MIME_TYPE_EPUB)
isNewEpubFile = false

// save epub file info to preference
val bookUri = fileUri.toString()
if (config.savedEpubFileInfos.none { it.uri == bookUri }) {
config.savedEpubFileInfos = config.savedEpubFileInfos + EpubFileInfo(savedBookName, bookUri)
}
}
}
}
Expand Down Expand Up @@ -1559,9 +1569,17 @@ open class BrowserActivity : ComponentActivity(), BrowserController, OnClickList
}

private var isNewEpubFile = false
private fun showSaveEpubDialog() = dialogManager.showSaveEpubDialog { isNew ->
isNewEpubFile = isNew
epubManager.showEpubFilePicker()
private fun showSaveEpubDialog() = dialogManager.showSaveEpubDialog { chooseFromPicker ->
if (chooseFromPicker) {
epubManager.showEpubFilePicker()
} else {
if (config.savedEpubFileInfos.isEmpty()) {
NinjaToast.show(this@BrowserActivity, "No saved epubs")
epubManager.showEpubFilePicker()
} else {
dialogManager.showSelectSavedEpubDialog { saveEpub(it.toUri()) }
}
}
}

private fun showMenuDialog(): Boolean {
Expand Down
16 changes: 16 additions & 0 deletions app/src/main/java/de/baumann/browser/epub/EpubFileInfo.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package de.baumann.browser.epub

data class EpubFileInfo(
val title: String,
val uri: String
) {
fun toPrefString(): String = "$title$SEPARATOR$uri"

companion object {
private const val SEPARATOR = ":$:"
fun fromString(fileString: String): EpubFileInfo {
val terms = fileString.split(SEPARATOR)
return EpubFileInfo(terms[0], terms[1])
}
}
}
5 changes: 2 additions & 3 deletions app/src/main/java/de/baumann/browser/epub/EpubManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ class EpubManager(private val context: Context) {
bookName: String,
chapterName: String,
currentUrl: String,
doneAction: () -> Unit
doneAction: (String) -> Unit
) {
val webUri = Uri.parse(currentUrl)
val domain = webUri.host ?: "EinkBro"
Expand All @@ -78,9 +78,8 @@ class EpubManager(private val context: Context) {

saveBook(book, fileUri)

doneAction.invoke(book.title)
}

doneAction.invoke()
}

private fun createBook(domain: String, bookName: String): Book = Book().apply {
Expand Down
16 changes: 16 additions & 0 deletions app/src/main/java/de/baumann/browser/preference/ConfigManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import android.content.SharedPreferences
import android.os.Build
import android.print.PrintAttributes
import androidx.core.content.edit
import de.baumann.browser.epub.EpubFileInfo
import de.baumann.browser.util.Constants
import de.baumann.browser.util.TranslationLanguage
import de.baumann.browser.view.Orientation
Expand Down Expand Up @@ -273,6 +274,10 @@ class ConfigManager(
get() = sp.getStringSet(K_ADBLOCK_SITES, mutableSetOf()) ?: mutableSetOf()
set(value) = sp.edit { putStringSet(K_ADBLOCK_SITES, value) }

var savedEpubFileInfos: List<EpubFileInfo>
get() = sp.getString(K_SAVED_EPUBS, "")?.toEpubFileInfoList() ?: mutableListOf()
set(value) = sp.edit { putString(K_SAVED_EPUBS, toEpubFileInfosString(value))}

var darkMode:DarkMode
get() = DarkMode.values()[sp.getString(K_DARK_MODE, "0")?.toInt() ?: 0]
set(value) = sp.edit { putString(K_DARK_MODE, value.ordinal.toString()) }
Expand Down Expand Up @@ -336,9 +341,20 @@ class ConfigManager(
const val K_TOUCH_AREA_OFFSET = "sp_touch_area_offset"
const val K_TOUCH_AREA_ACTION_SWITCH = "sp_touch_area_action_switch"
const val K_TOUCH_AREA_HIDE_WHEN_INPUT = "sp_touch_area_hide_when_input"
const val K_SAVED_EPUBS = "sp_saved_epubs"

private const val ALBUM_INFO_SEPARATOR = "::::"
private const val EPUB_FILE_INFO_SEPARATOR = "::::"
}

private fun String.toEpubFileInfoList(): MutableList<EpubFileInfo> =
if (this.isEmpty() || this == EPUB_FILE_INFO_SEPARATOR) mutableListOf()
else this.split(EPUB_FILE_INFO_SEPARATOR).map { fileString ->
EpubFileInfo.fromString(fileString)
}.toMutableList()

private fun toEpubFileInfosString(list: List<EpubFileInfo>): String =
list.joinToString(separator = EPUB_FILE_INFO_SEPARATOR) { it.toPrefString() }
}

enum class PaperSize(val sizeString: String, val mediaSize: PrintAttributes.MediaSize) {
Expand Down
20 changes: 15 additions & 5 deletions app/src/main/java/de/baumann/browser/view/dialog/DialogManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -41,23 +41,33 @@ class DialogManager(
}
}

fun showSaveEpubDialog(onNextAction: (Boolean) -> Unit) {
fun showSaveEpubDialog(chooseFromPicker: (Boolean) -> Unit) {
val options = arrayOf(
activity.resources.getString(R.string.existing_epub),
activity.resources.getString(R.string.a_new_epub)
activity.resources.getString(R.string.select_saved_epub),
activity.resources.getString(R.string.new_epub_or_from_picker)
)

val builder = AlertDialog.Builder(activity, R.style.TouchAreaDialog)
builder.setTitle(activity.resources.getString(R.string.save_to))
builder.setItems(options) { _, index ->
when(index) {
0 -> onNextAction(false)
1 -> onNextAction(true)
0 -> chooseFromPicker(false)
1 -> chooseFromPicker(true)
}
}
builder.show()
}

fun showSelectSavedEpubDialog(onNextAction: (String) -> Unit) {
val options = config.savedEpubFileInfos.map { it.title }.toTypedArray()
val uris = config.savedEpubFileInfos.map { it.uri }

AlertDialog.Builder(activity, R.style.TouchAreaDialog).apply {
setTitle(activity.resources.getString(R.string.save_to))
setItems(options) { _, index -> onNextAction(uris[index]) }
}.show()
}

fun showSavePdfDialog(
url: String,
savePdf: (String, String) -> Unit,
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/res/values-zh-rCN/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -350,8 +350,8 @@
<string name="toolbar_setting">工具栏\n设置</string>
<string name="menu_save_epub">另存为 epub</string>
<string name="save_to">另存为...</string>
<string name="existing_epub">已有的 Epub</string>
<string name="a_new_epub">新建 Epub</string>
<string name="select_saved_epub">已存的 Epub</string>
<string name="new_epub_or_from_picker">新 Epub 或開啟 Picker</string>
<string name="title">章节名</string>
<string name="title_in_toc">目录里的章节名</string>
<string name="book_name">书名</string>
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/res/values-zh-rTW/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -293,8 +293,8 @@
<string name="toolbar_setting">工具列\n設定</string>
<string name="menu_save_epub">儲存epub</string>
<string name="save_to">儲存至...</string>
<string name="existing_epub">既有的 Epub</string>
<string name="a_new_epub">新建立的 Epub</string>
<string name="select_saved_epub">選擇之前儲存的 Epub</string>
<string name="new_epub_or_from_picker">新 Epub或開啟 Picker</string>
<string name="title">章節標題</string>
<string name="title_in_toc">目錄中的章節名稱</string>
<string name="book_name">書籍名稱</string>
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -426,8 +426,8 @@
<string name="toolbar_setting">Toolbar setting</string>
<string name="menu_save_epub">save epub</string>
<string name="save_to">Save to...</string>
<string name="existing_epub">Existing Epub</string>
<string name="a_new_epub">a new Epub</string>
<string name="select_saved_epub">Select Saved Epub</string>
<string name="new_epub_or_from_picker">new Epub or from picker</string>
<string name="title">Chapter name</string>
<string name="title_in_toc">chapter name in Table of Content</string>
<string name="book_name">Book Name</string>
Expand Down

0 comments on commit 73e227a

Please sign in to comment.