Loading presentation/src/main/java/com/moez/QKSMS/feature/main/MainActivity.kt +8 −8 Original line number Diff line number Diff line Loading @@ -283,18 +283,18 @@ class MainActivity : QkThemedActivity(), MainView { } when { !state.smsPermission -> { snackbarTitle?.setText(R.string.main_permission_required) snackbarMessage?.setText(R.string.main_permission_sms) snackbarButton?.setText(R.string.main_permission_allow) } !state.defaultSms -> { snackbarTitle?.setText(R.string.main_default_sms_title) snackbarMessage?.setText(R.string.main_default_sms_message) snackbarButton?.setText(R.string.main_default_sms_change) } !state.smsPermission -> { snackbarTitle?.setText(R.string.main_permission_required) snackbarMessage?.setText(R.string.main_permission_sms) snackbarButton?.setText(R.string.main_permission_allow) } !state.contactPermission -> { snackbarTitle?.setText(R.string.main_permission_required) snackbarMessage?.setText(R.string.main_permission_contacts) Loading @@ -319,9 +319,9 @@ class MainActivity : QkThemedActivity(), MainView { override fun requestPermissions() { ActivityCompat.requestPermissions(this, arrayOf( Manifest.permission.READ_CONTACTS, Manifest.permission.READ_SMS, Manifest.permission.SEND_SMS), 0) Manifest.permission.SEND_SMS, Manifest.permission.READ_CONTACTS), 0) } override fun clearSearch() { Loading presentation/src/main/java/com/moez/QKSMS/feature/main/MainViewModel.kt +13 −18 Original line number Diff line number Diff line Loading @@ -45,7 +45,6 @@ import com.moez.QKSMS.util.Preferences import com.uber.autodispose.kotlin.autoDisposable import io.reactivex.Observable import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.rxkotlin.Observables import io.reactivex.rxkotlin.plusAssign import io.reactivex.rxkotlin.withLatestFrom import io.reactivex.schedulers.Schedulers Loading Loading @@ -115,36 +114,32 @@ class MainViewModel @Inject constructor( override fun bindView(view: MainView) { super.bindView(view) if (!permissionManager.hasReadSms() || !permissionManager.hasContacts()) { view.requestPermissions() when { !permissionManager.isDefaultSms() -> navigator.showDefaultSmsDialog() !permissionManager.hasReadSms() || !permissionManager.hasContacts() -> view.requestPermissions() } // If the default SMS state or permission states change, update the ViewState view.activityResumedIntent val permissions = view.activityResumedIntent .observeOn(Schedulers.io()) .map { Triple(permissionManager.isDefaultSms(), permissionManager.hasReadSms(), permissionManager.hasContacts()) } .distinctUntilChanged() .share() // If the default SMS state or permission states change, update the ViewState permissions .doOnNext { (defaultSms, smsPermission, contactPermission) -> newState { copy(defaultSms = defaultSms, smsPermission = smsPermission, contactPermission = contactPermission) } } .autoDisposable(view.scope()) .subscribe() // If the SMS permission state changes from false to true, sync messages view.activityResumedIntent .observeOn(Schedulers.io()) .map { permissionManager.hasReadSms() } .distinctUntilChanged() // If we go from not having all permissions to having them, sync messages permissions .skip(1) .filter { hasSms -> hasSms } .filter { it.first && it.second && it.third } .take(1) .autoDisposable(view.scope()) .subscribe { syncMessages.execute(Unit) if (!permissionManager.isDefaultSms()) { navigator.showDefaultSmsDialog() } } .subscribe { syncMessages.execute(Unit) } view.queryChangedIntent .debounce(200, TimeUnit.MILLISECONDS) Loading Loading @@ -325,8 +320,8 @@ class MainViewModel @Inject constructor( view.snackbarButtonIntent .withLatestFrom(state) { _, state -> when { !state.smsPermission -> view.requestPermissions() !state.defaultSms -> navigator.showDefaultSmsDialog() !state.smsPermission -> view.requestPermissions() !state.contactPermission -> view.requestPermissions() } } Loading Loading
presentation/src/main/java/com/moez/QKSMS/feature/main/MainActivity.kt +8 −8 Original line number Diff line number Diff line Loading @@ -283,18 +283,18 @@ class MainActivity : QkThemedActivity(), MainView { } when { !state.smsPermission -> { snackbarTitle?.setText(R.string.main_permission_required) snackbarMessage?.setText(R.string.main_permission_sms) snackbarButton?.setText(R.string.main_permission_allow) } !state.defaultSms -> { snackbarTitle?.setText(R.string.main_default_sms_title) snackbarMessage?.setText(R.string.main_default_sms_message) snackbarButton?.setText(R.string.main_default_sms_change) } !state.smsPermission -> { snackbarTitle?.setText(R.string.main_permission_required) snackbarMessage?.setText(R.string.main_permission_sms) snackbarButton?.setText(R.string.main_permission_allow) } !state.contactPermission -> { snackbarTitle?.setText(R.string.main_permission_required) snackbarMessage?.setText(R.string.main_permission_contacts) Loading @@ -319,9 +319,9 @@ class MainActivity : QkThemedActivity(), MainView { override fun requestPermissions() { ActivityCompat.requestPermissions(this, arrayOf( Manifest.permission.READ_CONTACTS, Manifest.permission.READ_SMS, Manifest.permission.SEND_SMS), 0) Manifest.permission.SEND_SMS, Manifest.permission.READ_CONTACTS), 0) } override fun clearSearch() { Loading
presentation/src/main/java/com/moez/QKSMS/feature/main/MainViewModel.kt +13 −18 Original line number Diff line number Diff line Loading @@ -45,7 +45,6 @@ import com.moez.QKSMS.util.Preferences import com.uber.autodispose.kotlin.autoDisposable import io.reactivex.Observable import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.rxkotlin.Observables import io.reactivex.rxkotlin.plusAssign import io.reactivex.rxkotlin.withLatestFrom import io.reactivex.schedulers.Schedulers Loading Loading @@ -115,36 +114,32 @@ class MainViewModel @Inject constructor( override fun bindView(view: MainView) { super.bindView(view) if (!permissionManager.hasReadSms() || !permissionManager.hasContacts()) { view.requestPermissions() when { !permissionManager.isDefaultSms() -> navigator.showDefaultSmsDialog() !permissionManager.hasReadSms() || !permissionManager.hasContacts() -> view.requestPermissions() } // If the default SMS state or permission states change, update the ViewState view.activityResumedIntent val permissions = view.activityResumedIntent .observeOn(Schedulers.io()) .map { Triple(permissionManager.isDefaultSms(), permissionManager.hasReadSms(), permissionManager.hasContacts()) } .distinctUntilChanged() .share() // If the default SMS state or permission states change, update the ViewState permissions .doOnNext { (defaultSms, smsPermission, contactPermission) -> newState { copy(defaultSms = defaultSms, smsPermission = smsPermission, contactPermission = contactPermission) } } .autoDisposable(view.scope()) .subscribe() // If the SMS permission state changes from false to true, sync messages view.activityResumedIntent .observeOn(Schedulers.io()) .map { permissionManager.hasReadSms() } .distinctUntilChanged() // If we go from not having all permissions to having them, sync messages permissions .skip(1) .filter { hasSms -> hasSms } .filter { it.first && it.second && it.third } .take(1) .autoDisposable(view.scope()) .subscribe { syncMessages.execute(Unit) if (!permissionManager.isDefaultSms()) { navigator.showDefaultSmsDialog() } } .subscribe { syncMessages.execute(Unit) } view.queryChangedIntent .debounce(200, TimeUnit.MILLISECONDS) Loading Loading @@ -325,8 +320,8 @@ class MainViewModel @Inject constructor( view.snackbarButtonIntent .withLatestFrom(state) { _, state -> when { !state.smsPermission -> view.requestPermissions() !state.defaultSms -> navigator.showDefaultSmsDialog() !state.smsPermission -> view.requestPermissions() !state.contactPermission -> view.requestPermissions() } } Loading