Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a1dfba2e authored by moezbhatti's avatar moezbhatti
Browse files

Ask to be Default SMS app before asking for SMS permission

parent 1e3d6bc9
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -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)
@@ -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() {
+13 −18
Original line number Diff line number Diff line
@@ -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
@@ -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)
@@ -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()
                    }
                }