Loading presentation/src/main/java/com/moez/QKSMS/feature/conversationinfo/ConversationInfoController.kt +3 −1 Original line number Original line Diff line number Diff line Loading @@ -90,7 +90,9 @@ class ConversationInfoController( showBackButton(true) showBackButton(true) } } override fun contactClicks(): Observable<Long> = recipientAdapter.contactClicks override fun recipientClicks(): Observable<Long> = recipientAdapter.recipientClicks override fun recipientLongClicks(): Observable<Long> = recipientAdapter.recipientLongClicks override fun themeClicks(): Observable<Long> = recipientAdapter.themeClicks override fun themeClicks(): Observable<Long> = recipientAdapter.themeClicks Loading presentation/src/main/java/com/moez/QKSMS/feature/conversationinfo/ConversationInfoPresenter.kt +18 −1 Original line number Original line Diff line number Diff line Loading @@ -18,9 +18,13 @@ */ */ package com.moez.QKSMS.feature.conversationinfo package com.moez.QKSMS.feature.conversationinfo import android.content.Context import androidx.lifecycle.Lifecycle import androidx.lifecycle.Lifecycle import com.moez.QKSMS.R import com.moez.QKSMS.common.Navigator import com.moez.QKSMS.common.Navigator import com.moez.QKSMS.common.base.QkPresenter import com.moez.QKSMS.common.base.QkPresenter import com.moez.QKSMS.common.util.ClipboardUtils import com.moez.QKSMS.common.util.extensions.makeToast import com.moez.QKSMS.extensions.asObservable import com.moez.QKSMS.extensions.asObservable import com.moez.QKSMS.extensions.mapNotNull import com.moez.QKSMS.extensions.mapNotNull import com.moez.QKSMS.interactor.DeleteConversations import com.moez.QKSMS.interactor.DeleteConversations Loading @@ -32,6 +36,7 @@ import com.moez.QKSMS.repository.ConversationRepository import com.moez.QKSMS.repository.MessageRepository import com.moez.QKSMS.repository.MessageRepository import com.uber.autodispose.android.lifecycle.scope import com.uber.autodispose.android.lifecycle.scope import com.uber.autodispose.autoDisposable import com.uber.autodispose.autoDisposable import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.rxkotlin.plusAssign import io.reactivex.rxkotlin.plusAssign import io.reactivex.rxkotlin.withLatestFrom import io.reactivex.rxkotlin.withLatestFrom import io.reactivex.subjects.BehaviorSubject import io.reactivex.subjects.BehaviorSubject Loading @@ -42,6 +47,7 @@ import javax.inject.Named class ConversationInfoPresenter @Inject constructor( class ConversationInfoPresenter @Inject constructor( @Named("threadId") threadId: Long, @Named("threadId") threadId: Long, messageRepo: MessageRepository, messageRepo: MessageRepository, private val context: Context, private val conversationRepo: ConversationRepository, private val conversationRepo: ConversationRepository, private val deleteConversations: DeleteConversations, private val deleteConversations: DeleteConversations, private val markArchived: MarkArchived, private val markArchived: MarkArchived, Loading Loading @@ -100,7 +106,7 @@ class ConversationInfoPresenter @Inject constructor( super.bindIntents(view) super.bindIntents(view) // Add or display the contact // Add or display the contact view.contactClicks() view.recipientClicks() .mapNotNull(conversationRepo::getRecipient) .mapNotNull(conversationRepo::getRecipient) .doOnNext { recipient -> .doOnNext { recipient -> recipient.contact?.lookupKey?.let(navigator::showContact) recipient.contact?.lookupKey?.let(navigator::showContact) Loading @@ -109,6 +115,17 @@ class ConversationInfoPresenter @Inject constructor( .autoDisposable(view.scope(Lifecycle.Event.ON_DESTROY)) // ... this should be the default .autoDisposable(view.scope(Lifecycle.Event.ON_DESTROY)) // ... this should be the default .subscribe() .subscribe() // Copy phone number view.recipientLongClicks() .mapNotNull(conversationRepo::getRecipient) .map { recipient -> recipient.address } .observeOn(AndroidSchedulers.mainThread()) .autoDisposable(view.scope()) .subscribe { address -> ClipboardUtils.copy(context, address) context.makeToast(R.string.info_copied_address) } // Show the theme settings for the conversation // Show the theme settings for the conversation view.themeClicks() view.themeClicks() .autoDisposable(view.scope()) .autoDisposable(view.scope()) Loading presentation/src/main/java/com/moez/QKSMS/feature/conversationinfo/ConversationInfoView.kt +2 −1 Original line number Original line Diff line number Diff line Loading @@ -23,7 +23,8 @@ import io.reactivex.Observable interface ConversationInfoView : QkViewContract<ConversationInfoState> { interface ConversationInfoView : QkViewContract<ConversationInfoState> { fun contactClicks(): Observable<Long> fun recipientClicks(): Observable<Long> fun recipientLongClicks(): Observable<Long> fun themeClicks(): Observable<Long> fun themeClicks(): Observable<Long> fun nameClicks(): Observable<*> fun nameClicks(): Observable<*> fun nameChanges(): Observable<String> fun nameChanges(): Observable<String> Loading presentation/src/main/java/com/moez/QKSMS/feature/conversationinfo/ConversationRecipientAdapter.kt +9 −2 Original line number Original line Diff line number Diff line Loading @@ -36,7 +36,8 @@ class ConversationRecipientAdapter @Inject constructor( private val colors: Colors private val colors: Colors ) : QkRealmAdapter<Recipient>() { ) : QkRealmAdapter<Recipient>() { val contactClicks: Subject<Long> = PublishSubject.create() val recipientClicks: Subject<Long> = PublishSubject.create() val recipientLongClicks: Subject<Long> = PublishSubject.create() val themeClicks: Subject<Long> = PublishSubject.create() val themeClicks: Subject<Long> = PublishSubject.create() override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): QkViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): QkViewHolder { Loading @@ -45,7 +46,13 @@ class ConversationRecipientAdapter @Inject constructor( return QkViewHolder(view).apply { return QkViewHolder(view).apply { view.setOnClickListener { view.setOnClickListener { val recipient = getItem(adapterPosition) ?: return@setOnClickListener val recipient = getItem(adapterPosition) ?: return@setOnClickListener contactClicks.onNext(recipient.id) recipientClicks.onNext(recipient.id) } view.setOnLongClickListener { val recipient = getItem(adapterPosition) ?: return@setOnLongClickListener false recipientLongClicks.onNext(recipient.id) return@setOnLongClickListener true } } view.theme.setOnClickListener { view.theme.setOnClickListener { Loading presentation/src/main/res/values/strings.xml +1 −0 Original line number Original line Diff line number Diff line Loading @@ -136,6 +136,7 @@ <string name="message_status_failed">Failed to send. Tap to try again</string> <string name="message_status_failed">Failed to send. Tap to try again</string> <string name="info_title">Details</string> <string name="info_title">Details</string> <string name="info_copied_address">Address copied</string> <string name="info_name">Conversation title</string> <string name="info_name">Conversation title</string> <string name="info_notifications">Notifications</string> <string name="info_notifications">Notifications</string> <string name="info_theme">Theme</string> <string name="info_theme">Theme</string> Loading Loading
presentation/src/main/java/com/moez/QKSMS/feature/conversationinfo/ConversationInfoController.kt +3 −1 Original line number Original line Diff line number Diff line Loading @@ -90,7 +90,9 @@ class ConversationInfoController( showBackButton(true) showBackButton(true) } } override fun contactClicks(): Observable<Long> = recipientAdapter.contactClicks override fun recipientClicks(): Observable<Long> = recipientAdapter.recipientClicks override fun recipientLongClicks(): Observable<Long> = recipientAdapter.recipientLongClicks override fun themeClicks(): Observable<Long> = recipientAdapter.themeClicks override fun themeClicks(): Observable<Long> = recipientAdapter.themeClicks Loading
presentation/src/main/java/com/moez/QKSMS/feature/conversationinfo/ConversationInfoPresenter.kt +18 −1 Original line number Original line Diff line number Diff line Loading @@ -18,9 +18,13 @@ */ */ package com.moez.QKSMS.feature.conversationinfo package com.moez.QKSMS.feature.conversationinfo import android.content.Context import androidx.lifecycle.Lifecycle import androidx.lifecycle.Lifecycle import com.moez.QKSMS.R import com.moez.QKSMS.common.Navigator import com.moez.QKSMS.common.Navigator import com.moez.QKSMS.common.base.QkPresenter import com.moez.QKSMS.common.base.QkPresenter import com.moez.QKSMS.common.util.ClipboardUtils import com.moez.QKSMS.common.util.extensions.makeToast import com.moez.QKSMS.extensions.asObservable import com.moez.QKSMS.extensions.asObservable import com.moez.QKSMS.extensions.mapNotNull import com.moez.QKSMS.extensions.mapNotNull import com.moez.QKSMS.interactor.DeleteConversations import com.moez.QKSMS.interactor.DeleteConversations Loading @@ -32,6 +36,7 @@ import com.moez.QKSMS.repository.ConversationRepository import com.moez.QKSMS.repository.MessageRepository import com.moez.QKSMS.repository.MessageRepository import com.uber.autodispose.android.lifecycle.scope import com.uber.autodispose.android.lifecycle.scope import com.uber.autodispose.autoDisposable import com.uber.autodispose.autoDisposable import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.rxkotlin.plusAssign import io.reactivex.rxkotlin.plusAssign import io.reactivex.rxkotlin.withLatestFrom import io.reactivex.rxkotlin.withLatestFrom import io.reactivex.subjects.BehaviorSubject import io.reactivex.subjects.BehaviorSubject Loading @@ -42,6 +47,7 @@ import javax.inject.Named class ConversationInfoPresenter @Inject constructor( class ConversationInfoPresenter @Inject constructor( @Named("threadId") threadId: Long, @Named("threadId") threadId: Long, messageRepo: MessageRepository, messageRepo: MessageRepository, private val context: Context, private val conversationRepo: ConversationRepository, private val conversationRepo: ConversationRepository, private val deleteConversations: DeleteConversations, private val deleteConversations: DeleteConversations, private val markArchived: MarkArchived, private val markArchived: MarkArchived, Loading Loading @@ -100,7 +106,7 @@ class ConversationInfoPresenter @Inject constructor( super.bindIntents(view) super.bindIntents(view) // Add or display the contact // Add or display the contact view.contactClicks() view.recipientClicks() .mapNotNull(conversationRepo::getRecipient) .mapNotNull(conversationRepo::getRecipient) .doOnNext { recipient -> .doOnNext { recipient -> recipient.contact?.lookupKey?.let(navigator::showContact) recipient.contact?.lookupKey?.let(navigator::showContact) Loading @@ -109,6 +115,17 @@ class ConversationInfoPresenter @Inject constructor( .autoDisposable(view.scope(Lifecycle.Event.ON_DESTROY)) // ... this should be the default .autoDisposable(view.scope(Lifecycle.Event.ON_DESTROY)) // ... this should be the default .subscribe() .subscribe() // Copy phone number view.recipientLongClicks() .mapNotNull(conversationRepo::getRecipient) .map { recipient -> recipient.address } .observeOn(AndroidSchedulers.mainThread()) .autoDisposable(view.scope()) .subscribe { address -> ClipboardUtils.copy(context, address) context.makeToast(R.string.info_copied_address) } // Show the theme settings for the conversation // Show the theme settings for the conversation view.themeClicks() view.themeClicks() .autoDisposable(view.scope()) .autoDisposable(view.scope()) Loading
presentation/src/main/java/com/moez/QKSMS/feature/conversationinfo/ConversationInfoView.kt +2 −1 Original line number Original line Diff line number Diff line Loading @@ -23,7 +23,8 @@ import io.reactivex.Observable interface ConversationInfoView : QkViewContract<ConversationInfoState> { interface ConversationInfoView : QkViewContract<ConversationInfoState> { fun contactClicks(): Observable<Long> fun recipientClicks(): Observable<Long> fun recipientLongClicks(): Observable<Long> fun themeClicks(): Observable<Long> fun themeClicks(): Observable<Long> fun nameClicks(): Observable<*> fun nameClicks(): Observable<*> fun nameChanges(): Observable<String> fun nameChanges(): Observable<String> Loading
presentation/src/main/java/com/moez/QKSMS/feature/conversationinfo/ConversationRecipientAdapter.kt +9 −2 Original line number Original line Diff line number Diff line Loading @@ -36,7 +36,8 @@ class ConversationRecipientAdapter @Inject constructor( private val colors: Colors private val colors: Colors ) : QkRealmAdapter<Recipient>() { ) : QkRealmAdapter<Recipient>() { val contactClicks: Subject<Long> = PublishSubject.create() val recipientClicks: Subject<Long> = PublishSubject.create() val recipientLongClicks: Subject<Long> = PublishSubject.create() val themeClicks: Subject<Long> = PublishSubject.create() val themeClicks: Subject<Long> = PublishSubject.create() override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): QkViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): QkViewHolder { Loading @@ -45,7 +46,13 @@ class ConversationRecipientAdapter @Inject constructor( return QkViewHolder(view).apply { return QkViewHolder(view).apply { view.setOnClickListener { view.setOnClickListener { val recipient = getItem(adapterPosition) ?: return@setOnClickListener val recipient = getItem(adapterPosition) ?: return@setOnClickListener contactClicks.onNext(recipient.id) recipientClicks.onNext(recipient.id) } view.setOnLongClickListener { val recipient = getItem(adapterPosition) ?: return@setOnLongClickListener false recipientLongClicks.onNext(recipient.id) return@setOnLongClickListener true } } view.theme.setOnClickListener { view.theme.setOnClickListener { Loading
presentation/src/main/res/values/strings.xml +1 −0 Original line number Original line Diff line number Diff line Loading @@ -136,6 +136,7 @@ <string name="message_status_failed">Failed to send. Tap to try again</string> <string name="message_status_failed">Failed to send. Tap to try again</string> <string name="info_title">Details</string> <string name="info_title">Details</string> <string name="info_copied_address">Address copied</string> <string name="info_name">Conversation title</string> <string name="info_name">Conversation title</string> <string name="info_notifications">Notifications</string> <string name="info_notifications">Notifications</string> <string name="info_theme">Theme</string> <string name="info_theme">Theme</string> Loading