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

Commit 13bcf27b authored by Moez Bhatti's avatar Moez Bhatti
Browse files

Create QkDialog to simplify showing menus

parent 0027dfd8
Loading
Loading
Loading
Loading
+50 −0
Original line number Diff line number Diff line
package common

import android.app.Activity
import android.app.AlertDialog
import android.content.Context
import android.support.annotation.StringRes
import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView
import common.util.extensions.dpToPx
import common.util.extensions.setPadding
import injection.appComponent
import javax.inject.Inject

/**
 * Wrapper around AlertDialog which makes it easier to display lists that use our UI
 */
class QkDialog @Inject constructor(private val context: Context, val adapter: MenuItemAdapter) {

    var title: String? = null

    init {
        appComponent.inject(this)
    }

    fun show(activity: Activity) {
        val recyclerView = RecyclerView(context)
        recyclerView.layoutManager = LinearLayoutManager(context)
        recyclerView.adapter = adapter
        recyclerView.setPadding(top = 8.dpToPx(context), bottom = 8.dpToPx(context))

        val dialog = AlertDialog.Builder(activity)
                .setTitle(title)
                .setView(recyclerView)
                .create()

        val clicks = adapter.menuItemClicks
                .subscribe { dialog.dismiss() }

        dialog.setOnDismissListener {
            clicks.dispose()
        }

        dialog.show()
    }

    fun setTitle(@StringRes title: Int) {
        this.title = context.getString(title)
    }

}
 No newline at end of file
+5 −16
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import com.moez.QKSMS.R
import com.uber.autodispose.android.lifecycle.scope
import com.uber.autodispose.kotlin.autoDisposable
import common.MenuItemAdapter
import common.QkDialog
import common.base.QkThemedActivity
import common.util.extensions.autoScrollToStart
import common.util.extensions.dpToPx
@@ -66,7 +67,7 @@ class ComposeActivity : QkThemedActivity<ComposeViewModel>(), ComposeView {
    override val infoIntent: Subject<Unit> = PublishSubject.create()
    override val messageClickIntent: Subject<Message> by lazy { messageAdapter.clicks }
    override val messageLongClickIntent: Subject<Message> by lazy { messageAdapter.longClicks }
    override val menuItemIntent: Subject<Int> by lazy { menuItemAdapter.menuItemClicks }
    override val menuItemIntent: Subject<Int> by lazy { dialog.adapter.menuItemClicks }
    override val attachmentDeletedIntent: Subject<Uri> by lazy { attachmentAdapter.attachmentDeleted }
    override val textChangedIntent by lazy { message.textChanges() }
    override val attachIntent by lazy { attach.clicks() }
@@ -74,8 +75,8 @@ class ComposeActivity : QkThemedActivity<ComposeViewModel>(), ComposeView {

    @Inject lateinit var chipsAdapter: ChipsAdapter
    @Inject lateinit var contactsAdapter: ContactAdapter
    @Inject lateinit var dialog: QkDialog
    @Inject lateinit var messageAdapter: MessagesAdapter
    @Inject lateinit var menuItemAdapter: MenuItemAdapter
    @Inject lateinit var attachmentAdapter: AttachmentAdapter

    init {
@@ -205,20 +206,8 @@ class ComposeActivity : QkThemedActivity<ComposeViewModel>(), ComposeView {
    }

    override fun showMenu(menuItems: List<common.MenuItem>) {
        val recyclerView = RecyclerView(this)
        recyclerView.layoutManager = LinearLayoutManager(this)
        recyclerView.adapter = menuItemAdapter
        recyclerView.setPadding(0, 8.dpToPx(this), 0, 8.dpToPx(this))

        val dialog = AlertDialog.Builder(this)
                .setView(recyclerView)
                .create()
                .apply { show() }

        menuItemAdapter.data = menuItems
        menuItemAdapter.menuItemClicks
                .autoDisposable(scope())
                .subscribe { dialog.dismiss() }
        dialog.adapter.data = menuItems
        dialog.show(this)
    }

    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
+8 −23
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@ import android.os.Bundle
import android.support.design.widget.Snackbar
import android.support.v7.app.ActionBarDrawerToggle
import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView
import android.support.v7.widget.helper.ItemTouchHelper
import android.view.Gravity
import android.view.Menu
@@ -37,12 +36,11 @@ import com.jakewharton.rxbinding2.widget.textChanges
import com.moez.QKSMS.R
import com.uber.autodispose.android.lifecycle.scope
import com.uber.autodispose.kotlin.autoDisposable
import common.MenuItemAdapter
import common.Navigator
import common.QkDialog
import common.base.QkThemedActivity
import common.util.extensions.autoScrollToStart
import common.util.extensions.dismissKeyboard
import common.util.extensions.dpToPx
import common.util.extensions.setBackgroundTint
import common.util.extensions.setTint
import common.util.extensions.setVisible
@@ -62,8 +60,8 @@ class MainActivity : QkThemedActivity<MainViewModel>(), MainView {

    @Inject lateinit var navigator: Navigator
    @Inject lateinit var conversationsAdapter: ConversationsAdapter
    @Inject lateinit var dialog: QkDialog
    @Inject lateinit var itemTouchCallback: ConversationItemTouchCallback
    @Inject lateinit var menuItemAdapter: MenuItemAdapter

    override val viewModelClass = MainViewModel::class
    override val queryChangedIntent by lazy { toolbarSearch.textChanges() }
@@ -85,7 +83,7 @@ class MainActivity : QkThemedActivity<MainViewModel>(), MainView {
    }
    override val conversationClickIntent by lazy { conversationsAdapter.clicks }
    override val conversationLongClickIntent by lazy { conversationsAdapter.longClicks }
    override val conversationMenuItemIntent by lazy { menuItemAdapter.menuItemClicks }
    override val conversationMenuItemIntent by lazy { dialog.adapter.menuItemClicks }
    override val confirmDeleteIntent: Subject<Unit> = PublishSubject.create()
    override val swipeConversationIntent by lazy { itemTouchCallback.swipes }
    override val undoSwipeConversationIntent: Subject<Unit> = PublishSubject.create()
@@ -96,7 +94,6 @@ class MainActivity : QkThemedActivity<MainViewModel>(), MainView {
            setAction(R.string.button_undo, { undoSwipeConversationIntent.onNext(Unit) })
        }
    }
    private var conversationMenuDialog: AlertDialog? = null

    init {
        appComponent.inject(this)
@@ -199,7 +196,6 @@ class MainActivity : QkThemedActivity<MainViewModel>(), MainView {
                if (recyclerView.adapter !== conversationsAdapter) recyclerView.adapter = conversationsAdapter
                conversationsAdapter.flowable = state.page.data
                itemTouchHelper.attachToRecyclerView(recyclerView)
                menuItemAdapter.data = state.page.menu
                empty.setText(when (state.page.showClearButton) {
                    true -> R.string.inbox_search_empty_text
                    false -> R.string.inbox_empty_text
@@ -212,7 +208,6 @@ class MainActivity : QkThemedActivity<MainViewModel>(), MainView {
                if (recyclerView.adapter !== conversationsAdapter) recyclerView.adapter = conversationsAdapter
                conversationsAdapter.flowable = state.page.data
                itemTouchHelper.attachToRecyclerView(null)
                menuItemAdapter.data = state.page.menu
                empty.setText(R.string.archived_empty_text)
                compose.setVisible(true)
            }
@@ -221,7 +216,6 @@ class MainActivity : QkThemedActivity<MainViewModel>(), MainView {
                if (!scheduled.isSelected) toolbarSearch.setText(R.string.title_scheduled)
                recyclerView.adapter = null
                itemTouchHelper.attachToRecyclerView(null)
                menuItemAdapter.data = ArrayList()
                empty.setText(R.string.scheduled_empty_text)
                compose.setVisible(false)
            }
@@ -241,20 +235,6 @@ class MainActivity : QkThemedActivity<MainViewModel>(), MainView {

        if (drawerLayout.isDrawerOpen(Gravity.START) && !state.drawerOpen) drawerLayout.closeDrawer(Gravity.START)
        else if (!drawerLayout.isDrawerVisible(Gravity.START) && state.drawerOpen) drawerLayout.openDrawer(Gravity.START)

        if (conversationMenuDialog?.isShowing == true && menuItemAdapter.data.isEmpty()) {
            conversationMenuDialog?.dismiss()
            conversationMenuDialog = null
        } else if (conversationMenuDialog?.isShowing != true && menuItemAdapter.data.isNotEmpty()) {
            val recyclerView = RecyclerView(this)
            recyclerView.layoutManager = LinearLayoutManager(this)
            recyclerView.adapter = menuItemAdapter
            recyclerView.setPadding(0, 8.dpToPx(this), 0, 8.dpToPx(this))
            conversationMenuDialog = AlertDialog.Builder(this).setView(recyclerView).create().apply {
                setOnDismissListener { conversationMenuItemIntent.onNext(-1) }
                show()
            }
        }
    }

    override fun clearSearch() {
@@ -262,6 +242,11 @@ class MainActivity : QkThemedActivity<MainViewModel>(), MainView {
        toolbarSearch.text = null
    }

    override fun showDialog(menuItems: List<common.MenuItem>) {
        dialog.adapter.data = menuItems
        dialog.show(this)
    }

    override fun showDeleteDialog() {
        AlertDialog.Builder(this)
                .setTitle(R.string.dialog_delete_title)
+1 −4
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@
 */
package feature.main

import common.MenuItem
import io.reactivex.Flowable
import model.Conversation

@@ -33,12 +32,10 @@ sealed class MainPage
data class Inbox(
        val showClearButton: Boolean = false,
        val data: Flowable<List<Conversation>>? = null,
        val menu: List<MenuItem> = ArrayList(),
        val showArchivedSnackbar: Boolean = false) : MainPage()

data class Archived(
        val data: Flowable<List<Conversation>>? = null,
        val menu: List<MenuItem> = ArrayList()) : MainPage()
        val data: Flowable<List<Conversation>>? = null) : MainPage()

data class Scheduled(
        val data: Any? = null) : MainPage()
 No newline at end of file
+2 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@
 */
package feature.main

import common.MenuItem
import common.base.QkView
import io.reactivex.Observable

@@ -36,6 +37,7 @@ interface MainView : QkView<MainState> {
    val undoSwipeConversationIntent: Observable<Unit>

    fun clearSearch()
    fun showDialog(menuItems: List<MenuItem>)
    fun showDeleteDialog()

}
Loading