Add a language spinner

It doesn't do much yet...
This commit is contained in:
Bradlee Speice
2014-11-06 23:13:45 -05:00
parent 23bd5136b5
commit 88a40cbfbb
8 changed files with 135 additions and 65 deletions

View File

@ -0,0 +1,22 @@
package org.bspeice.minimalbible.activity.downloader.manager
import org.crosswire.common.util.Language
class LocaleManager(val rM: RefreshManager) {
val currentLanguage = Language.DEFAULT_LANG.getName()
val languageModuleMap = rM.flatModules
.map { it.getLanguage() ?: Language(Language.UNKNOWN_LANG_CODE) }
.groupBy { it.getName() }
val availableLanguages = languageModuleMap.map { it.getKey() }
val availableLanguagesList = availableLanguages.toSortedList {(left, right) ->
// Prioritize our current language first
if (left == currentLanguage)
-1
else if (right == currentLanguage)
1
else
left.compareTo(right)
}.toBlocking().first()
}

View File

@ -8,6 +8,7 @@ import rx.schedulers.Schedulers
import java.util.Calendar
import org.bspeice.minimalbible.activity.downloader.DownloadPrefs
import android.net.ConnectivityManager
import org.crosswire.jsword.book.BookComparators
/**
* Created by bspeice on 10/22/14.
@ -21,19 +22,23 @@ class RefreshManager(val installers: Collection<Installer>,
Observable.from(installers)
.map {
if (doReload()) {
it.reloadBookList()
it.reloadBookList() // TODO: Handle InstallException
}
mapOf(Pair(it, it.getBooks()))
}
.subscribeOn(Schedulers.io())
.cache();
val availableModulesFlat: Observable<Book>
get() = availableModules
val flatModules: Observable<Book> =
availableModules
// Map -> Lists
.flatMap { Observable.from(it.values()) }
// Lists -> Single list
.flatMap { Observable.from(it) };
.flatMap { Observable.from(it) }
val flatModulesSorted = flatModules.toSortedList {(book1, book2) ->
BookComparators.getInitialComparator().compare(book1, book2)
};
// Constructor - Split from the value creation because `subscribe` returns
// the subscriber object, not the underlying value
@ -43,8 +48,9 @@ class RefreshManager(val installers: Collection<Installer>,
val fifteenDaysAgo = Calendar.getInstance().getTime().getTime() - 1296000
fun doReload(enabledDownload: Boolean, lastUpdated: Long, onWifi: Boolean): Boolean =
if (!enabledDownload || !onWifi)
fun doReload(enabledDownload: Boolean, lastUpdated: Long,
networkState: Int? = ConnectivityManager.TYPE_DUMMY): Boolean =
if (!enabledDownload || networkState == ConnectivityManager.TYPE_WIFI)
false
else if (lastUpdated < fifteenDaysAgo)
true
@ -53,12 +59,7 @@ class RefreshManager(val installers: Collection<Installer>,
fun doReload(): Boolean = doReload(prefs.hasEnabledDownload(),
prefs.downloadRefreshedOn(),
// TODO: Functional is awesome, but this might be a bit ridiculous
(if (connManager?.getActiveNetworkInfo() != null)
connManager!!.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI
else
false)
)
connManager?.getActiveNetworkInfo()?.getType())
fun installerFromBook(b: Book): Observable<Installer> = Observable.just(
availableModules.filter {