mirror of https://github.com/tasks/tasks
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
4.8 KiB
Kotlin
122 lines
4.8 KiB
Kotlin
package org.tasks.ui
|
|
|
|
import android.app.Dialog
|
|
import android.content.Intent
|
|
import android.content.res.Configuration
|
|
import android.os.Bundle
|
|
import android.view.LayoutInflater
|
|
import android.view.View
|
|
import android.view.ViewGroup
|
|
import android.widget.FrameLayout
|
|
import androidx.fragment.app.activityViewModels
|
|
import androidx.lifecycle.Lifecycle
|
|
import androidx.lifecycle.flowWithLifecycle
|
|
import androidx.lifecycle.lifecycleScope
|
|
import androidx.recyclerview.widget.DefaultItemAnimator
|
|
import androidx.recyclerview.widget.LinearLayoutManager
|
|
import androidx.recyclerview.widget.RecyclerView
|
|
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
|
import com.google.android.material.bottomsheet.BottomSheetDialog
|
|
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
|
import com.todoroo.astrid.adapter.NavigationDrawerAdapter
|
|
import com.todoroo.astrid.api.Filter
|
|
import com.todoroo.astrid.api.FilterListItem
|
|
import dagger.hilt.android.AndroidEntryPoint
|
|
import kotlinx.coroutines.flow.launchIn
|
|
import kotlinx.coroutines.flow.onEach
|
|
import org.tasks.R
|
|
import org.tasks.billing.PurchaseActivity
|
|
import org.tasks.extensions.Context.openUri
|
|
import org.tasks.filters.NavigationDrawerAction
|
|
import org.tasks.intents.TaskIntents
|
|
import org.tasks.preferences.Preferences
|
|
import javax.inject.Inject
|
|
|
|
@AndroidEntryPoint
|
|
class NavigationDrawerFragment : BottomSheetDialogFragment() {
|
|
@Inject lateinit var adapter: NavigationDrawerAdapter
|
|
@Inject lateinit var preferences: Preferences
|
|
|
|
override fun getTheme() = R.style.CustomBottomSheetDialog
|
|
|
|
private lateinit var recyclerView: RecyclerView
|
|
private val viewModel: NavigationDrawerViewModel by activityViewModels()
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
arguments?.getParcelable<Filter>(EXTRA_SELECTED)?.let {
|
|
viewModel.setSelected(it)
|
|
}
|
|
}
|
|
|
|
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
|
val dialog = super.onCreateDialog(savedInstanceState) as BottomSheetDialog
|
|
dialog.setOnShowListener {
|
|
val bottomSheet =
|
|
dialog.findViewById<FrameLayout>(com.google.android.material.R.id.design_bottom_sheet)
|
|
val behavior = BottomSheetBehavior.from(bottomSheet!!)
|
|
behavior.skipCollapsed = true
|
|
if (preferences.isTopAppBar) {
|
|
behavior.state = BottomSheetBehavior.STATE_EXPANDED
|
|
} else if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
|
behavior.state = BottomSheetBehavior.STATE_HALF_EXPANDED
|
|
}
|
|
}
|
|
return dialog
|
|
}
|
|
|
|
override fun onCreateView(
|
|
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
|
|
): View? {
|
|
val layout = inflater.inflate(R.layout.fragment_navigation_drawer, container, false)
|
|
recyclerView = layout.findViewById(R.id.recycler_view)
|
|
(recyclerView.itemAnimator as DefaultItemAnimator).supportsChangeAnimations = false
|
|
adapter.setOnClick(this::onFilterItemSelected)
|
|
recyclerView.layoutManager = LinearLayoutManager(context)
|
|
recyclerView.adapter = adapter
|
|
viewModel
|
|
.viewState
|
|
.flowWithLifecycle(lifecycle, Lifecycle.State.RESUMED)
|
|
.onEach {
|
|
adapter.setSelected(it.selected)
|
|
adapter.submitList(it.filters)
|
|
}
|
|
.launchIn(lifecycleScope)
|
|
return layout
|
|
}
|
|
|
|
private fun onFilterItemSelected(item: FilterListItem?) {
|
|
if (item is Filter) {
|
|
viewModel.setSelected(item)
|
|
activity?.startActivity(TaskIntents.getTaskListIntent(activity, item))
|
|
} else if (item is NavigationDrawerAction) {
|
|
when (item.requestCode) {
|
|
REQUEST_PURCHASE ->
|
|
startActivity(Intent(context, PurchaseActivity::class.java))
|
|
REQUEST_DONATE -> context?.openUri(R.string.url_donate)
|
|
else -> item.intent?.let {
|
|
activity?.startActivityForResult(it, item.requestCode)
|
|
}
|
|
}
|
|
}
|
|
dismiss()
|
|
}
|
|
|
|
companion object {
|
|
const val REQUEST_NEW_LIST = 10100
|
|
const val REQUEST_SETTINGS = 10101
|
|
const val REQUEST_PURCHASE = 10102
|
|
const val REQUEST_DONATE = 10103
|
|
const val REQUEST_NEW_PLACE = 10104
|
|
const val REQUEST_NEW_FILTER = 101015
|
|
private const val EXTRA_SELECTED = "extra_selected"
|
|
|
|
fun newNavigationDrawer(selected: Filter?): NavigationDrawerFragment {
|
|
val fragment = NavigationDrawerFragment()
|
|
fragment.arguments = Bundle().apply {
|
|
putParcelable(EXTRA_SELECTED, selected)
|
|
}
|
|
return fragment
|
|
}
|
|
}
|
|
} |