Skip to content

Commit

Permalink
Merge 0e95cc3 into c6f34f6
Browse files Browse the repository at this point in the history
  • Loading branch information
xizzhu committed Apr 12, 2019
2 parents c6f34f6 + 0e95cc3 commit 149c2bd
Show file tree
Hide file tree
Showing 28 changed files with 208 additions and 275 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class BookmarksTest : BaseUnitTest() {
@Test
fun testGetTextForDisplay() {
val expected = "Genesis 1:1\nIn the beginning God created the heaven and the earth."
val actual = BookmarkForDisplay(MockContents.kjvVerses[0].verseIndex, MockContents.kjvVerses[0].text, 12345678L).getTextForDisplay().toString()
val actual = BookmarkForDisplay(MockContents.kjvVerses[0].verseIndex, MockContents.kjvVerses[0].text, 12345678L).textForDisplay.toString()
assertEquals(expected, actual)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class NotesTest : BaseUnitTest() {
@Test
fun testGetVerseForDisplay() {
val expected = "Genesis 1:1 In the beginning God created the heaven and the earth."
val actual = NoteForDisplay(MockContents.kjvVerses[0].verseIndex, MockContents.kjvVerses[0].text, "", 12345678L).getVerseForDisplay().toString()
val actual = NoteForDisplay(MockContents.kjvVerses[0].verseIndex, MockContents.kjvVerses[0].text, "", 12345678L).textForDisplay.toString()
assertEquals(expected, actual)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ class ReadingInteractorTest : BaseUnitTest() {
assertNotNull(intent)
assertEquals(Intent.ACTION_SEND, intent.action)
assertEquals("text/plain", intent.type)
assertEquals(expectedName, intent.component.className)
assertEquals(expectedPackageName, intent.`package`)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,14 @@ class VerseDetailTest : BaseUnitTest() {
@Test
fun testGetStringForDisplay() {
val expected = "KJV, Genesis 1:1\nIn the beginning God created the heaven and the earth."
val actual = VerseDetail(MockContents.kjvVerses[0], false, "").getTextForDisplay().toString()
val actual = VerseDetail(MockContents.kjvVerses[0], false, "").textForDisplay.toString()
assertEquals(expected, actual)
}

@Test
fun testGetStringForDisplayWithParallelTranslation() {
val expected = "KJV, Genesis 1:1\nIn the beginning God created the heaven and the earth.\n\n中文和合本, 创世记 1:1\n起初神创造天地。"
val actual = VerseDetail(MockContents.kjvVersesWithCuvParallel[0], false, "").getTextForDisplay().toString()
val actual = VerseDetail(MockContents.kjvVersesWithCuvParallel[0], false, "").textForDisplay.toString()
assertEquals(expected, actual)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,36 +29,36 @@ import org.junit.runner.RunWith

@RunWith(AndroidJUnit4::class)
@SmallTest
class VerseForReadingTest: BaseUnitTest() {
class VerseForReadingTest : BaseUnitTest() {
@Test
fun testGetIndexForDisplay() {
assertEquals("1", VerseForReading(MockContents.kjvVerses[0], 9).getIndexForDisplay())
assertEquals("1", VerseForReading(MockContents.kjvVerses[0], 9).indexForDisplay)

assertEquals(" 1", VerseForReading(MockContents.kjvVerses[0], 10).getIndexForDisplay())
assertEquals("10", VerseForReading(MockContents.kjvVerses[9], 10).getIndexForDisplay())
assertEquals("99", VerseForReading(Verse(VerseIndex(1, 2, 98), Verse.Text("", "", ""), emptyList()), 99).getIndexForDisplay())
assertEquals(" 1", VerseForReading(MockContents.kjvVerses[0], 10).indexForDisplay)
assertEquals("10", VerseForReading(MockContents.kjvVerses[9], 10).indexForDisplay)
assertEquals("99", VerseForReading(Verse(VerseIndex(1, 2, 98), Verse.Text("", "", ""), emptyList()), 99).indexForDisplay)

assertEquals(" 1", VerseForReading(MockContents.kjvVerses[0], 100).getIndexForDisplay())
assertEquals(" 10", VerseForReading(MockContents.kjvVerses[9], 100).getIndexForDisplay())
assertEquals("100", VerseForReading(Verse(VerseIndex(1, 2, 99), Verse.Text("", "", ""), emptyList()), 100).getIndexForDisplay())
assertEquals(" 1", VerseForReading(MockContents.kjvVerses[0], 100).indexForDisplay)
assertEquals(" 10", VerseForReading(MockContents.kjvVerses[9], 100).indexForDisplay)
assertEquals("100", VerseForReading(Verse(VerseIndex(1, 2, 99), Verse.Text("", "", ""), emptyList()), 100).indexForDisplay)
}

@Test
fun testGetIndexForDisplayWithParallelTranslations() {
assertTrue(VerseForReading(MockContents.kjvVersesWithCuvParallel[0], 1).getIndexForDisplay().isEmpty())
assertTrue(VerseForReading(MockContents.kjvVersesWithCuvParallel[0], 1).indexForDisplay.isEmpty())
}

@Test
fun testGetTextForDisplay() {
val expected = "In the beginning God created the heaven and the earth."
val actual = VerseForReading(MockContents.kjvVerses[0], 1).getTextForDisplay().toString()
val actual = VerseForReading(MockContents.kjvVerses[0], 1).textForDisplay.toString()
assertEquals(expected, actual)
}

@Test
fun testGetTextForDisplayWithParallelTranslations() {
val expected = "KJV 1:1\nIn the beginning God created the heaven and the earth.\n\n中文和合本 1:1\n起初神创造天地。"
val actual = VerseForReading(MockContents.kjvVersesWithCuvParallel[0], 1).getTextForDisplay().toString()
val actual = VerseForReading(MockContents.kjvVersesWithCuvParallel[0], 1).textForDisplay.toString()
assertEquals(expected, actual)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import org.junit.runner.RunWith

@RunWith(AndroidJUnit4::class)
@SmallTest
class SearchResultTest: BaseUnitTest() {
class SearchResultTest : BaseUnitTest() {
@Test
fun testToSearchResult() {
val expected = listOf(SearchedVerse(MockContents.kjvVerses[0].verseIndex,
Expand All @@ -42,7 +42,7 @@ class SearchResultTest: BaseUnitTest() {
val bookName = MockContents.kjvVerses[0].text.bookName
val text = MockContents.kjvVerses[0].text.text
val expected = "$bookName ${verseIndex.chapterIndex + 1}:${verseIndex.verseIndex + 1}\n$text"
val actual = SearchedVerse(verseIndex, bookName, text, "").getTextForDisplay().toString()
val actual = SearchedVerse(verseIndex, bookName, text, "").textForDisplay.toString()
assertEquals(expected, actual)
}
}
28 changes: 11 additions & 17 deletions app/src/main/kotlin/me/xizzhu/android/joshua/bookmarks/Bookmarks.kt
Original file line number Diff line number Diff line change
Expand Up @@ -28,25 +28,19 @@ data class BookmarkForDisplay(val verseIndex: VerseIndex, val text: Verse.Text,
private val SPANNABLE_STRING_BUILDER = SpannableStringBuilder()
}

private var textForDisplay: CharSequence? = null
val textForDisplay: CharSequence by lazy {
SPANNABLE_STRING_BUILDER.clear()
SPANNABLE_STRING_BUILDER.clearSpans()

fun getTextForDisplay(): CharSequence {
if (textForDisplay == null) {
SPANNABLE_STRING_BUILDER.clear()
SPANNABLE_STRING_BUILDER.clearSpans()
// format:
// <book name> <chapter verseIndex>:<verse verseIndex>
// <verse text>
SPANNABLE_STRING_BUILDER.append(text.bookName).append(' ')
.append((verseIndex.chapterIndex + 1).toString()).append(':').append((verseIndex.verseIndex + 1).toString())
SPANNABLE_STRING_BUILDER.setSpan(BOOK_NAME_SIZE_SPAN, 0, SPANNABLE_STRING_BUILDER.length, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)

// format:
// <book name> <chapter verseIndex>:<verse verseIndex>
// <verse text>
SPANNABLE_STRING_BUILDER.append(text.bookName).append(' ')
.append((verseIndex.chapterIndex + 1).toString()).append(':').append((verseIndex.verseIndex + 1).toString())
SPANNABLE_STRING_BUILDER.setSpan(BOOK_NAME_SIZE_SPAN, 0, SPANNABLE_STRING_BUILDER.length, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)
SPANNABLE_STRING_BUILDER.append('\n').append(text.text)

SPANNABLE_STRING_BUILDER.append('\n').append(text.text)

textForDisplay = SPANNABLE_STRING_BUILDER.subSequence(0, SPANNABLE_STRING_BUILDER.length)
}

return textForDisplay!!
return@lazy SPANNABLE_STRING_BUILDER.subSequence(0, SPANNABLE_STRING_BUILDER.length)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import android.os.Bundle
import me.xizzhu.android.joshua.R
import me.xizzhu.android.joshua.ui.LoadingSpinner
import me.xizzhu.android.joshua.ui.LoadingSpinnerPresenter
import me.xizzhu.android.joshua.ui.bindView
import me.xizzhu.android.joshua.utils.BaseSettingsActivity
import javax.inject.Inject

Expand All @@ -33,15 +34,14 @@ class BookmarksActivity : BaseSettingsActivity() {
@Inject
lateinit var bookmarksPresenter: BookmarksPresenter

private lateinit var loadingSpinner: LoadingSpinner
private lateinit var bookmarksListView: BookmarksListView
private val loadingSpinner: LoadingSpinner by bindView(R.id.loading_spinner)
private val bookmarksListView: BookmarksListView by bindView(R.id.bookmarks)

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

setContentView(R.layout.activity_bookmarks)
loadingSpinner = findViewById(R.id.loading_spinner)
bookmarksListView = findViewById<BookmarksListView>(R.id.bookmarks).apply { setPresenter(bookmarksPresenter) }
bookmarksListView.setPresenter(bookmarksPresenter)

observeSettings(bookmarksInteractor)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ private class BookmarkItemViewHolder(inflater: LayoutInflater, parent: ViewGroup

text.setTextColor(settings.getPrimaryTextColor(resources))
text.setTextSize(TypedValue.COMPLEX_UNIT_PX, settings.getBodyTextSize(resources).toFloat())
text.text = bookmark.getTextForDisplay()
text.text = bookmark.textForDisplay
}

override fun onClick(v: View) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,32 +68,22 @@ class BibleReadingRepository(private val localReadingStorage: LocalReadingStorag
}

suspend fun readBookNames(translationShortName: String): List<String> {
var bookNames = bookNamesCache.get(translationShortName)
if (bookNames == null) {
bookNames = localReadingStorage.readBookNames(translationShortName)
bookNamesCache.put(translationShortName, bookNames)
}
return bookNames
return bookNamesCache.get(translationShortName)
?: localReadingStorage.readBookNames(translationShortName)
.also { bookNamesCache.put(translationShortName, it) }
}

suspend fun readBookShortNames(translationShortName: String): List<String> {
var bookShortNames = bookShortNamesCache.get(translationShortName)
if (bookShortNames == null) {
bookShortNames = localReadingStorage.readBookShortNames(translationShortName)
bookShortNamesCache.put(translationShortName, bookShortNames)
}
return bookShortNames
return bookShortNamesCache.get(translationShortName)
?: localReadingStorage.readBookShortNames(translationShortName)
.also { bookShortNamesCache.put(translationShortName, it) }
}

suspend fun readVerses(translationShortName: String, bookIndex: Int, chapterIndex: Int): List<Verse> {
val key = "$translationShortName-$bookIndex-$chapterIndex"
var verses = versesCache.get(key)
if (verses == null) {
verses = localReadingStorage.readVerses(
translationShortName, bookIndex, chapterIndex, readBookNames(translationShortName)[bookIndex])
versesCache.put(key, verses)
}
return verses
return versesCache.get(key) ?: localReadingStorage.readVerses(
translationShortName, bookIndex, chapterIndex, readBookNames(translationShortName)[bookIndex])
.also { versesCache.put(key, it) }
}

suspend fun readVerses(translationShortName: String, parallelTranslations: List<String>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,13 +127,8 @@ private suspend fun <T> Call<T>.await(): T = suspendCancellableCoroutine { cont
enqueue(object : Callback<T> {
override fun onResponse(call: Call<T>, response: Response<T>) {
if (response.isSuccessful) {
val body = response.body()
if (body != null) {
cont.resume(body)
} else {
cont.resumeWithException(
KotlinNullPointerException("Missing response body from ${call.request()}"))
}
response.body()?.let { cont.resume(it) }
?: cont.resumeWithException(KotlinNullPointerException("Missing response body from ${call.request()}"))
} else {
cont.resumeWithException(HttpException(response))
}
Expand Down
26 changes: 10 additions & 16 deletions app/src/main/kotlin/me/xizzhu/android/joshua/notes/Notes.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,24 +29,18 @@ data class NoteForDisplay(val verseIndex: VerseIndex, val text: Verse.Text, val
private val SPANNABLE_STRING_BUILDER = SpannableStringBuilder()
}

private var textForDisplay: CharSequence? = null
val textForDisplay: CharSequence by lazy {
SPANNABLE_STRING_BUILDER.clear()
SPANNABLE_STRING_BUILDER.clearSpans()

fun getVerseForDisplay(): CharSequence {
if (textForDisplay == null) {
SPANNABLE_STRING_BUILDER.clear()
SPANNABLE_STRING_BUILDER.clearSpans()
// format:
// <book name> <chapter index>:<verse index> <verse text>
SPANNABLE_STRING_BUILDER.append(text.bookName).append(' ')
.append((verseIndex.chapterIndex + 1).toString()).append(':').append((verseIndex.verseIndex + 1).toString())
SPANNABLE_STRING_BUILDER.setSpan(BOOK_NAME_STYLE_SPAN, 0, SPANNABLE_STRING_BUILDER.length, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)

// format:
// <book name> <chapter index>:<verse index> <verse text>
SPANNABLE_STRING_BUILDER.append(text.bookName).append(' ')
.append((verseIndex.chapterIndex + 1).toString()).append(':').append((verseIndex.verseIndex + 1).toString())
SPANNABLE_STRING_BUILDER.setSpan(BOOK_NAME_STYLE_SPAN, 0, SPANNABLE_STRING_BUILDER.length, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)
SPANNABLE_STRING_BUILDER.append(' ').append(text.text)

SPANNABLE_STRING_BUILDER.append(' ').append(text.text)

textForDisplay = SPANNABLE_STRING_BUILDER.subSequence(0, SPANNABLE_STRING_BUILDER.length)
}

return textForDisplay!!
return@lazy SPANNABLE_STRING_BUILDER.subSequence(0, SPANNABLE_STRING_BUILDER.length)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import android.os.Bundle
import me.xizzhu.android.joshua.R
import me.xizzhu.android.joshua.ui.LoadingSpinner
import me.xizzhu.android.joshua.ui.LoadingSpinnerPresenter
import me.xizzhu.android.joshua.ui.bindView
import me.xizzhu.android.joshua.utils.BaseSettingsActivity
import javax.inject.Inject

Expand All @@ -33,15 +34,14 @@ class NotesActivity : BaseSettingsActivity() {
@Inject
lateinit var notesPresenter: NotesPresenter

private lateinit var loadingSpinner: LoadingSpinner
private lateinit var notesListView: NotesListView
private val loadingSpinner: LoadingSpinner by bindView(R.id.loading_spinner)
private val notesListView: NotesListView by bindView(R.id.notes)

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

setContentView(R.layout.activity_notes)
loadingSpinner = findViewById(R.id.loading_spinner)
notesListView = findViewById<NotesListView>(R.id.notes).apply { setPresenter(notesPresenter) }
notesListView.setPresenter(notesPresenter)

observeSettings(notesInteractor)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ private class NoteItemViewHolder(inflater: LayoutInflater, parent: ViewGroup,
with(verse) {
setTextColor(textColor)
setTextSize(TypedValue.COMPLEX_UNIT_PX, settings.getCaptionTextSize(resources).toFloat())
text = note.getVerseForDisplay()
text = note.textForDisplay
}
with(text) {
setTextColor(textColor)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import android.os.Bundle
import me.xizzhu.android.joshua.R
import me.xizzhu.android.joshua.ui.LoadingSpinner
import me.xizzhu.android.joshua.ui.LoadingSpinnerPresenter
import me.xizzhu.android.joshua.ui.bindView
import me.xizzhu.android.joshua.utils.BaseSettingsActivity
import javax.inject.Inject

Expand All @@ -33,17 +34,14 @@ class ReadingProgressActivity : BaseSettingsActivity() {
@Inject
lateinit var readingProgressPresenter: ReadingProgressPresenter

private lateinit var loadingSpinner: LoadingSpinner
private lateinit var readingProgressListView: ReadingProgressListView
private val loadingSpinner: LoadingSpinner by bindView(R.id.loading_spinner)
private val readingProgressListView: ReadingProgressListView by bindView(R.id.reading_progress_list)

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

setContentView(R.layout.activity_reading_progress)
loadingSpinner = findViewById(R.id.loading_spinner)
readingProgressListView = findViewById<ReadingProgressListView>(R.id.reading_progress_list).apply {
setPresenter(readingProgressPresenter)
}
readingProgressListView.setPresenter(readingProgressPresenter)

observeSettings(readingProgressInteractor)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import me.xizzhu.android.joshua.reading.toolbar.ReadingToolbar
import me.xizzhu.android.joshua.reading.toolbar.ToolbarPresenter
import me.xizzhu.android.joshua.reading.verse.VersePresenter
import me.xizzhu.android.joshua.reading.verse.VerseViewPager
import me.xizzhu.android.joshua.ui.bindView
import me.xizzhu.android.joshua.utils.BaseSettingsActivity
import javax.inject.Inject

Expand All @@ -55,26 +56,23 @@ class ReadingActivity : BaseSettingsActivity() {
@Inject
lateinit var searchButtonPresenter: SearchButtonPresenter

private lateinit var drawerToggle: ActionBarDrawerToggle
private lateinit var drawerLayout: ReadingDrawerLayout
private lateinit var toolbar: ReadingToolbar
private lateinit var chapterListView: ChapterListView
private lateinit var verseViewPager: VerseViewPager
private lateinit var verseDetailView: VerseDetailViewLayout
private lateinit var search: SearchFloatingActionButton
private val drawerToggle: ActionBarDrawerToggle by lazy { ActionBarDrawerToggle(this, drawerLayout, toolbar, 0, 0) }
private val drawerLayout: ReadingDrawerLayout by bindView(R.id.drawer_layout)
private val toolbar: ReadingToolbar by bindView(R.id.toolbar)
private val chapterListView: ChapterListView by bindView(R.id.chapter_list_view)
private val verseViewPager: VerseViewPager by bindView(R.id.verse_view_pager)
private val verseDetailView: VerseDetailViewLayout by bindView(R.id.verse_detail_view)
private val search: SearchFloatingActionButton by bindView(R.id.search)

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

setContentView(R.layout.activity_reading)
drawerLayout = findViewById(R.id.drawer_layout)
toolbar = findViewById<ReadingToolbar>(R.id.toolbar).apply { setPresenter(toolbarPresenter) }
chapterListView = findViewById<ChapterListView>(R.id.chapter_list_view).apply { setPresenter(chapterListPresenter) }
verseViewPager = findViewById<VerseViewPager>(R.id.verse_view_pager).apply { setPresenter(versePresenter) }
verseDetailView = findViewById<VerseDetailViewLayout>(R.id.verse_detail_view).apply { setPresenter(verseDetailPresenter) }
search = findViewById<SearchFloatingActionButton>(R.id.search).apply { setPresenter(searchButtonPresenter) }

drawerToggle = ActionBarDrawerToggle(this, drawerLayout, toolbar, 0, 0)
toolbar.setPresenter(toolbarPresenter)
chapterListView.setPresenter(chapterListPresenter)
verseViewPager.setPresenter(versePresenter)
verseDetailView.setPresenter(verseDetailPresenter)
search.setPresenter(searchButtonPresenter)
drawerLayout.addDrawerListener(drawerToggle)

observeSettings(readingInteractor)
Expand Down
Loading

0 comments on commit 149c2bd

Please sign in to comment.