mirror of https://github.com/tasks/tasks
More calendar picker updates
parent
135f628dae
commit
5f3b706b81
@ -1,78 +1,49 @@
|
|||||||
package org.tasks.calendars
|
package org.tasks.calendars
|
||||||
|
|
||||||
import android.Manifest
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.app.Dialog
|
import android.app.Dialog
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.viewModels
|
|
||||||
import com.google.accompanist.permissions.ExperimentalPermissionsApi
|
|
||||||
import com.google.accompanist.permissions.rememberMultiplePermissionsState
|
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import org.tasks.compose.CalendarPickerList
|
import org.tasks.compose.CalendarPicker
|
||||||
import org.tasks.compose.collectAsStateLifecycleAware
|
|
||||||
import org.tasks.dialogs.DialogBuilder
|
import org.tasks.dialogs.DialogBuilder
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class CalendarPicker : DialogFragment() {
|
class CalendarPicker : DialogFragment() {
|
||||||
private val viewModel: CalendarPickerViewModel by viewModels()
|
|
||||||
|
|
||||||
@Inject lateinit var dialogBuilder: DialogBuilder
|
@Inject lateinit var dialogBuilder: DialogBuilder
|
||||||
|
|
||||||
@OptIn(ExperimentalPermissionsApi::class)
|
|
||||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||||
return dialogBuilder
|
return dialogBuilder
|
||||||
.newDialog()
|
.newDialog()
|
||||||
.setContent {
|
.setContent {
|
||||||
val hasPermissions = rememberMultiplePermissionsState(
|
CalendarPicker(
|
||||||
permissions = listOf(Manifest.permission.WRITE_CALENDAR, Manifest.permission.READ_CALENDAR),
|
|
||||||
onPermissionsResult = { result ->
|
|
||||||
if (result.values.all { it }) {
|
|
||||||
viewModel.loadCalendars()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
if (hasPermissions.allPermissionsGranted) {
|
|
||||||
CalendarPickerList(
|
|
||||||
calendars = viewModel.viewState.collectAsStateLifecycleAware().value.calendars,
|
|
||||||
selected = arguments?.getString(EXTRA_SELECTED),
|
selected = arguments?.getString(EXTRA_SELECTED),
|
||||||
onClick = {
|
onSelected = {
|
||||||
targetFragment!!.onActivityResult(
|
targetFragment!!.onActivityResult(
|
||||||
targetRequestCode,
|
targetRequestCode,
|
||||||
Activity.RESULT_OK,
|
Activity.RESULT_OK,
|
||||||
Intent()
|
Intent().putExtra(EXTRA_CALENDAR_ID, it?.id)
|
||||||
.putExtra(EXTRA_CALENDAR_ID, it?.id)
|
|
||||||
.putExtra(EXTRA_CALENDAR_NAME, it?.name)
|
|
||||||
)
|
)
|
||||||
dismiss()
|
dismiss()
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
LaunchedEffect(hasPermissions) {
|
|
||||||
if (!hasPermissions.allPermissionsGranted) {
|
|
||||||
hasPermissions.launchMultiplePermissionRequest()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.show()
|
.show()
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val EXTRA_CALENDAR_ID = "extra_calendar_id"
|
const val EXTRA_CALENDAR_ID = "extra_calendar_id"
|
||||||
const val EXTRA_CALENDAR_NAME = "extra_calendar_name"
|
|
||||||
private const val EXTRA_SELECTED = "extra_selected"
|
private const val EXTRA_SELECTED = "extra_selected"
|
||||||
|
|
||||||
fun newCalendarPicker(target: Fragment?, rc: Int, selected: String?): CalendarPicker {
|
fun newCalendarPicker(target: Fragment?, rc: Int, selected: String?) =
|
||||||
val arguments = Bundle()
|
CalendarPicker().apply {
|
||||||
arguments.putString(EXTRA_SELECTED, selected)
|
arguments = Bundle().apply {
|
||||||
val fragment = CalendarPicker()
|
putString(EXTRA_SELECTED, selected)
|
||||||
fragment.arguments = arguments
|
}
|
||||||
fragment.setTargetFragment(target, rc)
|
setTargetFragment(target, rc)
|
||||||
return fragment
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue