Restrict theme picker for QKSMS+

This commit is contained in:
Moez Bhatti
2018-03-27 15:31:11 -04:00
parent 66346562c0
commit 40ae8d61c3
7 changed files with 45 additions and 15 deletions
@@ -29,14 +29,14 @@ class ThemePagerAdapter @Inject constructor(private val context: Context) : Page
override fun instantiateItem(container: ViewGroup, position: Int): Any {
return when (position) {
1 -> container.findViewById(R.id.rgbPicker)
1 -> container.findViewById(R.id.hsvPicker)
else -> container.findViewById(R.id.materialColors)
}
}
override fun getPageTitle(position: Int): CharSequence? {
return when (position) {
1 -> context.getString(R.string.theme_rgb)
1 -> context.getString(R.string.theme_plus)
else -> context.getString(R.string.theme_material)
}
}
@@ -19,6 +19,7 @@
package feature.themepicker
import android.os.Bundle
import android.support.design.widget.Snackbar
import android.support.v7.widget.LinearLayoutManager
import com.jakewharton.rxbinding2.view.clicks
import com.moez.QKSMS.R
@@ -29,11 +30,12 @@ import common.util.extensions.setBackgroundTint
import common.util.extensions.setTint
import common.util.extensions.setVisible
import injection.appComponent
import io.reactivex.subjects.PublishSubject
import io.reactivex.subjects.Subject
import kotlinx.android.synthetic.main.theme_picker_activity.*
import kotlinx.android.synthetic.main.theme_picker_hsv.*
import javax.inject.Inject
class ThemePickerActivity : QkThemedActivity<ThemePickerViewModel>(), ThemePickerView {
override val viewModelClass = ThemePickerViewModel::class
@@ -41,6 +43,7 @@ class ThemePickerActivity : QkThemedActivity<ThemePickerViewModel>(), ThemePicke
override val hsvThemeSelectedIntent by lazy { picker.selectedColor }
override val hsvThemeClearedIntent by lazy { clear.clicks() }
override val hsvThemeAppliedIntent by lazy { apply.clicks() }
override val viewQksmsPlusIntent: Subject<Unit> = PublishSubject.create()
@Inject lateinit var themeAdapter: ThemeAdapter
@Inject lateinit var themePagerAdapter: ThemePagerAdapter
@@ -74,6 +77,13 @@ class ThemePickerActivity : QkThemedActivity<ThemePickerViewModel>(), ThemePicke
.subscribe { color -> clear.setTint(color) }
}
override fun showQksmsPlusSnackbar() {
Snackbar.make(contentView, R.string.toast_qksms_plus, Snackbar.LENGTH_LONG).run {
setAction(R.string.button_more, { viewQksmsPlusIntent.onNext(Unit) })
show()
}
}
override fun render(state: ThemePickerState) {
tabs.setThreadId(state.threadId)
@@ -20,6 +20,7 @@ package feature.themepicker
import common.base.QkView
import io.reactivex.Observable
import io.reactivex.subjects.Subject
interface ThemePickerView : QkView<ThemePickerState> {
@@ -27,7 +28,9 @@ interface ThemePickerView : QkView<ThemePickerState> {
val hsvThemeSelectedIntent: Observable<Int>
val hsvThemeClearedIntent: Observable<*>
val hsvThemeAppliedIntent: Observable<*>
val viewQksmsPlusIntent: Subject<Unit>
fun setCurrentTheme(color: Int)
fun showQksmsPlusSnackbar()
}
@@ -22,7 +22,9 @@ import android.content.Intent
import com.f2prateek.rx.preferences2.Preference
import com.uber.autodispose.android.lifecycle.scope
import com.uber.autodispose.kotlin.autoDisposable
import common.Navigator
import common.base.QkViewModel
import common.util.BillingManager
import common.util.Colors
import injection.appComponent
import io.reactivex.rxkotlin.Observables
@@ -32,7 +34,9 @@ import javax.inject.Inject
class ThemePickerViewModel(intent: Intent) : QkViewModel<ThemePickerView, ThemePickerState>(ThemePickerState()) {
@Inject lateinit var billingManager: BillingManager
@Inject lateinit var colors: Colors
@Inject lateinit var navigator: Navigator
@Inject lateinit var prefs: Preferences
private val threadId = intent.extras?.getLong("threadId") ?: 0L
@@ -74,8 +78,20 @@ class ThemePickerViewModel(intent: Intent) : QkViewModel<ThemePickerView, ThemeP
// Update the theme, when apply is clicked
view.hsvThemeAppliedIntent
.withLatestFrom(view.hsvThemeSelectedIntent, { _, color -> color })
.withLatestFrom(billingManager.plusStatus, { color, upgradeStatus ->
if (upgradeStatus == BillingManager.UpgradeStatus.REGULAR) {
view.showQksmsPlusSnackbar()
} else {
theme.set(color)
}
})
.autoDisposable(view.scope())
.subscribe { color -> theme.set(color) }
.subscribe()
// Show QKSMS+ activity
view.viewQksmsPlusIntent
.autoDisposable(view.scope())
.subscribe { navigator.showQksmsPlusActivity() }
// Reset the theme
view.hsvThemeClearedIntent