#1307 autoformat post merge

This commit is contained in:
Sean Mac Gillicuddy 2019-07-31 12:37:44 +01:00
parent cc5f062067
commit 86877e4cc1
16 changed files with 108 additions and 117 deletions

View File

@ -10,7 +10,6 @@ import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.ViewModelProviders
import org.kiwix.kiwixmobile.base.BaseActivity
fun Activity.startActionMode(
menuId: Int,
@ -51,7 +50,8 @@ inline fun <reified T : Activity> Activity.start() {
startActivity(Intent(this, T::class.java))
}
inline fun <reified T : ViewModel> FragmentActivity.viewModel(viewModelFactory: ViewModelProvider.Factory) =
inline fun <reified T : ViewModel> FragmentActivity.viewModel(
viewModelFactory: ViewModelProvider.Factory
) =
ViewModelProviders.of(this, viewModelFactory)
.get(T::class.java)
.get(T::class.java)

View File

@ -15,16 +15,16 @@ import kotlinx.android.synthetic.main.activity_language.toolbar
import org.kiwix.kiwixmobile.R
import org.kiwix.kiwixmobile.base.BaseActivity
import org.kiwix.kiwixmobile.extensions.viewModel
import org.kiwix.kiwixmobile.language.viewmodel.Action.Select
import org.kiwix.kiwixmobile.language.viewmodel.State.Content
import org.kiwix.kiwixmobile.language.viewmodel.State.Loading
import org.kiwix.kiwixmobile.language.viewmodel.State.Saving
import org.kiwix.kiwixmobile.language.adapter.LanguageAdapter
import org.kiwix.kiwixmobile.language.adapter.LanguageDelegate.HeaderDelegate
import org.kiwix.kiwixmobile.language.adapter.LanguageDelegate.LanguageItemDelegate
import org.kiwix.kiwixmobile.language.viewmodel.Action
import org.kiwix.kiwixmobile.language.viewmodel.Action.Select
import org.kiwix.kiwixmobile.language.viewmodel.LanguageViewModel
import org.kiwix.kiwixmobile.language.viewmodel.State
import org.kiwix.kiwixmobile.language.viewmodel.State.Content
import org.kiwix.kiwixmobile.language.viewmodel.State.Loading
import org.kiwix.kiwixmobile.language.viewmodel.State.Saving
import org.kiwix.kiwixmobile.zim_manager.SimpleTextListener
import javax.inject.Inject
@ -38,8 +38,8 @@ class LanguageActivity : BaseActivity() {
private val languageAdapter =
LanguageAdapter(
LanguageItemDelegate { languageViewModel.actions.offer(Select(it)) },
HeaderDelegate()
LanguageItemDelegate { languageViewModel.actions.offer(Select(it)) },
HeaderDelegate()
)
override fun onCreate(savedInstanceState: Bundle?) {
@ -57,16 +57,14 @@ class LanguageActivity : BaseActivity() {
layoutManager = LinearLayoutManager(context, RecyclerView.VERTICAL, false)
setHasFixedSize(true)
}
languageViewModel.state.observe(this, Observer {
render(it)
})
languageViewModel.state.observe(this, Observer(::render))
compositeDisposable.add(
languageViewModel.effects.subscribe(
{
it.invokeWith(this)
},
Throwable::printStackTrace
)
languageViewModel.effects.subscribe(
{
it.invokeWith(this)
},
Throwable::printStackTrace
)
)
}
@ -106,5 +104,4 @@ class LanguageActivity : BaseActivity() {
}
return super.onOptionsItemSelected(item)
}
}

View File

@ -9,22 +9,21 @@ import org.kiwix.kiwixmobile.language.adapter.LanguageListViewHolder.HeaderViewH
import org.kiwix.kiwixmobile.language.adapter.LanguageListViewHolder.LanguageViewHolder
import org.kiwix.kiwixmobile.zim_manager.library_view.adapter.base.AbsDelegateAdapter
sealed class LanguageDelegate<I : LanguageListItem, VH : LanguageListViewHolder<I>> :
AbsDelegateAdapter<I, LanguageListItem, VH> {
sealed class LanguageDelegate<I : LanguageListItem, out VH : LanguageListViewHolder<I>> :
AbsDelegateAdapter<I, LanguageListItem, VH> {
class HeaderDelegate : LanguageDelegate<HeaderItem, HeaderViewHolder>() {
override val itemClass = HeaderItem::class.java
override fun createViewHolder(parent: ViewGroup) =
HeaderViewHolder(parent.inflate(R.layout.header_date, false))
}
class LanguageItemDelegate(private val clickAction: (LanguageItem) -> Unit) : LanguageDelegate<LanguageItem, LanguageViewHolder>() {
class LanguageItemDelegate(private val clickAction: (LanguageItem) -> Unit) :
LanguageDelegate<LanguageItem, LanguageViewHolder>() {
override val itemClass = LanguageItem::class.java
override fun createViewHolder(parent: ViewGroup) =
LanguageViewHolder(parent.inflate(R.layout.item_language, false), clickAction)
}
}

View File

@ -12,7 +12,6 @@ sealed class LanguageListItem {
const val SELECTED = Long.MAX_VALUE
const val OTHER = Long.MIN_VALUE
}
}
data class LanguageItem(

View File

@ -12,13 +12,13 @@ import org.kiwix.kiwixmobile.language.adapter.LanguageListItem.HeaderItem
import org.kiwix.kiwixmobile.language.adapter.LanguageListItem.LanguageItem
import org.kiwix.kiwixmobile.zim_manager.library_view.adapter.base.BaseViewHolder
sealed class LanguageListViewHolder<T : LanguageListItem>(override val containerView: View) :
BaseViewHolder<T>(containerView) {
sealed class LanguageListViewHolder<in T : LanguageListItem>(override val containerView: View) :
BaseViewHolder<T>(containerView) {
class HeaderViewHolder(view: View) : LanguageListViewHolder<HeaderItem>(view) {
override fun bind(item: HeaderItem) {
header_date.setText(
if (item.id == HeaderItem.SELECTED) R.string.your_languages
else R.string.other_languages
if (item.id == HeaderItem.SELECTED) R.string.your_languages
else R.string.other_languages
)
}
}
@ -32,11 +32,10 @@ sealed class LanguageListViewHolder<T : LanguageListItem>(override val container
item_language_name.text = language.language
item_language_localized_name.text = language.languageLocalized
item_language_books_count.text = containerView.resources.getQuantityString(
R.plurals.books_count, language.occurencesOfLanguage, language.occurencesOfLanguage
R.plurals.books_count, language.occurencesOfLanguage, language.occurencesOfLanguage
)
item_language_checkbox.isChecked = language.active
item_language_clickable_area.setOnClickListener { clickAction(item) }
}
}
}

View File

@ -28,16 +28,16 @@ class LanguageViewModel @Inject constructor(
init {
compositeDisposable.addAll(
actions.map { reduce(it, state.value!!) }
.distinctUntilChanged()
.subscribe(state::postValue, Throwable::printStackTrace),
languageDao.languages().filter { it.isNotEmpty() }
.subscribe(
{
actions.offer(UpdateLanguages(it))
},
Throwable::printStackTrace
)
actions.map { reduce(it, state.value!!) }
.distinctUntilChanged()
.subscribe(state::postValue, Throwable::printStackTrace),
languageDao.languages().filter { it.isNotEmpty() }
.subscribe(
{
actions.offer(UpdateLanguages(it))
},
Throwable::printStackTrace
)
)
}
@ -71,9 +71,9 @@ class LanguageViewModel @Inject constructor(
private fun saveAll(currentState: Content): State {
effects.offer(
SaveLanguagesAndFinish(
currentState.items, languageDao
)
SaveLanguagesAndFinish(
currentState.items, languageDao
)
)
return Saving
}
@ -87,5 +87,4 @@ class LanguageViewModel @Inject constructor(
filter: String,
currentState: Content
) = currentState.updateFilter(filter)
}

View File

@ -31,9 +31,9 @@ data class SaveLanguagesAndFinish(
override fun invokeWith(activity: Activity) {
Flowable.fromCallable { languageDao.insert(languages) }
.subscribeOn(Schedulers.io())
.subscribe({
activity.finish()
}, Throwable::printStackTrace)
.subscribeOn(Schedulers.io())
.subscribe({
activity.finish()
}, Throwable::printStackTrace)
}
}

View File

@ -12,12 +12,12 @@ sealed class State {
val items: List<Language>,
val filter: String = "",
val viewItems: List<LanguageListItem> = createViewList(
items, filter
items, filter
)
) : State() {
fun select(languageItem: LanguageItem) = Content(
items.map { if (it.id == languageItem.id) it.copy(active = !it.active) else it },
filter
items.map { if (it.id == languageItem.id) it.copy(active = !it.active) else it },
filter
)
fun updateFilter(filter: String) = Content(items, filter)
@ -27,7 +27,7 @@ sealed class State {
items: List<Language>,
filter: String
) = activeItems(
items, filter
items, filter
) + otherItems(items, filter)
private fun activeItems(
@ -35,7 +35,7 @@ sealed class State {
filter: String
) =
createLanguageSection(
items, filter, { it.active }, HeaderItem.SELECTED
items, filter, Language::active, HeaderItem.SELECTED
)
private fun otherItems(
@ -43,7 +43,7 @@ sealed class State {
filter: String
) =
createLanguageSection(
items, filter, { !it.active }, HeaderItem.OTHER
items, filter, { !it.active }, HeaderItem.OTHER
)
private fun createLanguageSection(
@ -52,12 +52,10 @@ sealed class State {
filterCondition: (Language) -> Boolean,
headerId: Long
) = items.filter(filterCondition)
.filter { filter.isEmpty() or it.matches(filter) }
.takeIf { it.isNotEmpty() }
?.let { listOf(HeaderItem(headerId)) + it.map { language -> LanguageItem(language) } }
?: emptyList()
.filter { filter.isEmpty() or it.matches(filter) }
.takeIf { it.isNotEmpty() }
?.let { listOf(HeaderItem(headerId)) + it.map { language -> LanguageItem(language) } }
?: emptyList()
}
}
}

View File

@ -131,9 +131,9 @@ class LibraryFragment : BaseFragment() {
}
NOT_CONNECTED -> {
if (libraryAdapter.itemCount > 0) {
context.toast(R.string.no_network_connection)
context.toast(string.no_network_connection)
} else {
libraryErrorText.setText(R.string.no_network_connection)
libraryErrorText.setText(string.no_network_connection)
libraryErrorText.visibility = VISIBLE
}
}
@ -144,8 +144,8 @@ class LibraryFragment : BaseFragment() {
libraryAdapter.items = it!!
if (it.isEmpty()) {
libraryErrorText.setText(
if (isNotConnected) R.string.no_network_connection
else R.string.no_items_msg
if (isNotConnected) string.no_network_connection
else string.no_items_msg
)
libraryErrorText.visibility = VISIBLE
TestingUtils.unbindResource(LibraryFragment::class.java)
@ -156,7 +156,7 @@ class LibraryFragment : BaseFragment() {
private fun refreshFragment() {
if (isNotConnected) {
context.toast(R.string.no_network_connection)
context.toast(string.no_network_connection)
} else {
zimManageViewModel.requestDownloadLibrary.onNext(Unit)
}
@ -170,8 +170,8 @@ class LibraryFragment : BaseFragment() {
sharedPreferenceUtil.putPrefStorage(storageDevice.name)
sharedPreferenceUtil.putPrefStorageTitle(
getString(
if (storageDevice.isInternal) R.string.internal_storage
else R.string.external_storage
if (storageDevice.isInternal) string.internal_storage
else string.external_storage
)
)
}
@ -180,19 +180,19 @@ class LibraryFragment : BaseFragment() {
when {
notEnoughSpaceAvailable(item) -> {
context.toast(
getString(R.string.download_no_space) +
"\n" + getString(R.string.space_available) + " " +
getString(string.download_no_space) +
"\n" + getString(string.space_available) + " " +
LibraryUtils.bytesToHuman(spaceAvailable)
)
libraryList.snack(
R.string.download_change_storage,
R.string.open,
string.download_change_storage,
string.open,
::showStorageSelectDialog
)
return
}
isNotConnected -> {
context.toast(R.string.no_network_connection)
context.toast(string.no_network_connection)
return
}
noWifiWithWifiOnlyPreferenceSet -> {

View File

@ -18,7 +18,6 @@
package org.kiwix.kiwixmobile.zim_manager.library_view.adapter
import android.view.ViewGroup
import org.kiwix.kiwixmobile.R
import org.kiwix.kiwixmobile.R.layout
import org.kiwix.kiwixmobile.extensions.inflate
import org.kiwix.kiwixmobile.utils.BookUtils
@ -39,7 +38,7 @@ sealed class LibraryDelegate<I : LibraryListItem, out VH : LibraryViewHolder<I>>
override fun createViewHolder(parent: ViewGroup) =
LibraryBookViewHolder(
parent.inflate(R.layout.library_item, false),
parent.inflate(layout.library_item, false),
bookUtils,
clickAction
)

View File

@ -27,7 +27,7 @@ class AdapterDelegateManager<T> {
for (index in 0..delegates.size()) {
val valueAt = delegates.valueAt(index)
if (valueAt?.isFor(item) == true) {
return index;
return index
}
}
throw RuntimeException("No delegate registered for $item")

View File

@ -88,8 +88,8 @@ fun language(
languageCode: String = "",
languageCodeISO2: String = ""
) = Language(
id, isActive, occurencesOfLanguage, language, languageLocalized, languageCode,
languageCodeISO2
id, isActive, occurencesOfLanguage, language, languageLocalized, languageCode,
languageCodeISO2
)
fun languageItem(language: Language = language()) =

View File

@ -48,7 +48,7 @@ class LanguageDelegateTest {
mockkStatic("org.kiwix.kiwixmobile.extensions.ViewGroupExtensionsKt")
every { parent.inflate(R.layout.header_date, false) } returns mockk(relaxed = true)
assertThat(HeaderDelegate().createViewHolder(parent))
.isInstanceOf(HeaderViewHolder::class.java)
.isInstanceOf(HeaderViewHolder::class.java)
}
}
@ -56,7 +56,7 @@ class LanguageDelegateTest {
inner class LanguageItemDelegateTests {
@Test
fun `class is lanuguage item`() {
assertThat(LanguageItemDelegate({}).itemClass).isEqualTo(LanguageItem::class.java)
assertThat(LanguageItemDelegate {}.itemClass).isEqualTo(LanguageItem::class.java)
}
@Test
@ -66,7 +66,7 @@ class LanguageDelegateTest {
every { parent.inflate(R.layout.item_language, false) } returns mockk(relaxed = true)
val clickAction = mockk<(LanguageItem) -> Unit>()
assertThat(LanguageItemDelegate(clickAction).createViewHolder(parent))
.isInstanceOf(LanguageViewHolder::class.java)
.isInstanceOf(LanguageViewHolder::class.java)
}
}
}

View File

@ -69,33 +69,33 @@ class LanguageViewModelTest {
@Test
fun `initial state is Loading`() {
languageViewModel.state.test()
.assertValueHistory(Loading)
.assertValueHistory(Loading)
}
@Test
fun `an empty languages emission does not send update action`() {
languageViewModel.actions.test()
.also {
languages.offer(listOf())
}
.assertValues()
.also {
languages.offer(listOf())
}
.assertValues()
}
@Test
fun `a languages emission sends update action`() {
val expectedList = listOf(language())
languageViewModel.actions.test()
.also {
languages.offer(expectedList)
}
.assertValues(UpdateLanguages(expectedList))
.also {
languages.offer(expectedList)
}
.assertValues(UpdateLanguages(expectedList))
}
@Test
fun `UpdateLanguages Action changes state to Content when Loading`() {
languageViewModel.actions.offer(UpdateLanguages(listOf()))
languageViewModel.state.test()
.assertValueHistory(Content(listOf()))
.assertValueHistory(Content(listOf()))
}
@Test
@ -103,7 +103,7 @@ class LanguageViewModelTest {
languageViewModel.actions.offer(UpdateLanguages(listOf()))
languageViewModel.actions.offer(UpdateLanguages(listOf()))
languageViewModel.state.test()
.assertValueHistory(Content(listOf()))
.assertValueHistory(Content(listOf()))
}
@Test
@ -111,14 +111,14 @@ class LanguageViewModelTest {
languageViewModel.actions.offer(UpdateLanguages(listOf()))
languageViewModel.actions.offer(Filter("filter"))
languageViewModel.state.test()
.assertValueHistory(Content(listOf(), filter = "filter"))
.assertValueHistory(Content(listOf(), filter = "filter"))
}
@Test
fun `Filter Action has no effect on other states`() {
languageViewModel.actions.offer(Filter(""))
languageViewModel.state.test()
.assertValueHistory(Loading)
.assertValueHistory(Loading)
}
@Test
@ -126,32 +126,32 @@ class LanguageViewModelTest {
languageViewModel.actions.offer(UpdateLanguages(listOf(language())))
languageViewModel.actions.offer(Select(languageItem()))
languageViewModel.state.test()
.assertValueHistory(Content(listOf(language(isActive = true))))
.assertValueHistory(Content(listOf(language(isActive = true))))
}
@Test
fun `Select Action has no effect on other states`() {
languageViewModel.actions.offer(Select(languageItem()))
languageViewModel.state.test()
.assertValueHistory(Loading)
.assertValueHistory(Loading)
}
@Test
fun `SaveAll changes Content to Saving with SideEffect SaveLanguagesAndFinish`() {
languageViewModel.actions.offer(UpdateLanguages(listOf()))
languageViewModel.effects.test()
.also {
languageViewModel.actions.offer(SaveAll)
}
.assertValues(SaveLanguagesAndFinish(listOf(), newLanguagesDao))
.also {
languageViewModel.actions.offer(SaveAll)
}
.assertValues(SaveLanguagesAndFinish(listOf(), newLanguagesDao))
languageViewModel.state.test()
.assertValueHistory(Saving)
.assertValueHistory(Saving)
}
@Test
fun `SaveAll has no effect on other states`() {
languageViewModel.actions.offer(SaveAll)
languageViewModel.state.test()
.assertValueHistory(Loading)
.assertValueHistory(Loading)
}
}

View File

@ -33,25 +33,25 @@ class StateTest {
fun `creates language list items with headers for active and inactive languages`() {
val content = Content(listOf(language(), language(isActive = true)))
assertThat(content.viewItems).isEqualTo(
listOf(
HeaderItem(Long.MAX_VALUE),
LanguageItem(language(isActive = true)),
HeaderItem(Long.MIN_VALUE),
LanguageItem(language())
)
listOf(
HeaderItem(Long.MAX_VALUE),
LanguageItem(language(isActive = true)),
HeaderItem(Long.MIN_VALUE),
LanguageItem(language())
)
)
}
@Test
fun `filters out based on filter`() {
val content = Content(
listOf(language(language = "matchesFilter"), language(isActive = true))
listOf(language(language = "matchesFilter"), language(isActive = true))
).updateFilter("matches")
assertThat(content.viewItems).isEqualTo(
listOf(
HeaderItem(Long.MIN_VALUE),
LanguageItem(language(language = "matchesFilter"))
)
listOf(
HeaderItem(Long.MIN_VALUE),
LanguageItem(language(language = "matchesFilter"))
)
)
}
}

View File

@ -29,6 +29,7 @@ class LanguageTest {
@Nested
inner class Equals {
@Test
@Suppress("UnusedEquals", "ReplaceCallWithBinaryOperator") //cannot == Unit
fun `throws exception when object is not language item`() {
assertThrows(ClassCastException::class.java) { language().equals(Unit) }
}
@ -46,9 +47,9 @@ class LanguageTest {
@Test
fun `is equal when language and active are equal`() {
assertThat(
language(language = "lang", isActive = true) == language(
language = "lang", isActive = true
)
language(language = "lang", isActive = true) == language(
language = "lang", isActive = true
)
).isTrue()
}
}