1+ package org.permanent.permanent.ui
2+
3+ import android.app.Dialog
4+ import android.content.DialogInterface
5+ import android.content.Intent
6+ import android.graphics.Typeface
7+ import android.net.Uri
8+ import android.os.Bundle
9+ import android.view.LayoutInflater
10+ import android.view.View
11+ import android.view.ViewGroup
12+ import android.widget.FrameLayout
13+ import android.widget.TextView
14+ import androidx.core.content.ContextCompat
15+ import androidx.lifecycle.MutableLiveData
16+ import androidx.lifecycle.Observer
17+ import androidx.lifecycle.ViewModelProvider
18+ import com.google.android.material.bottomsheet.BottomSheetBehavior
19+ import com.google.android.material.bottomsheet.BottomSheetDialog
20+ import com.google.android.material.snackbar.Snackbar
21+ import org.permanent.permanent.BuildConfig
22+ import org.permanent.permanent.R
23+ import org.permanent.permanent.databinding.FragmentAccessRolesBinding
24+ import org.permanent.permanent.models.AccessRole
25+ import org.permanent.permanent.models.Share
26+ import org.permanent.permanent.network.models.Shareby_urlVO
27+ import org.permanent.permanent.ui.shareManagement.ShareManagementFragment
28+ import org.permanent.permanent.viewmodels.AccessRolesViewModel
29+ import org.permanent.permanent.viewmodels.SingleLiveEvent
30+
31+ class AccessRolesFragment : PermanentBottomSheetFragment () {
32+ private lateinit var binding: FragmentAccessRolesBinding
33+ private lateinit var viewModel: AccessRolesViewModel
34+ private val onAccessRoleUpdated = SingleLiveEvent <AccessRole ?>()
35+
36+ fun setBundleArguments (
37+ shareByUrlVo : Shareby_urlVO ,
38+ ) {
39+ val bundle = Bundle ()
40+ bundle.putParcelable(ShareManagementFragment .SHARE_BY_URL_VO_KEY , shareByUrlVo)
41+ this .arguments = bundle
42+ }
43+
44+ fun setBundleArguments (
45+ share : Share ,
46+ ) {
47+ val bundle = Bundle ()
48+ bundle.putParcelable(ShareManagementFragment .PARCELABLE_SHARE_KEY , share)
49+ this .arguments = bundle
50+ }
51+
52+ override fun onCreateView (
53+ inflater : LayoutInflater ,
54+ container : ViewGroup ? ,
55+ savedInstanceState : Bundle ?
56+ ): View {
57+ viewModel = ViewModelProvider (this )[AccessRolesViewModel ::class .java]
58+ binding = FragmentAccessRolesBinding .inflate(inflater, container, false )
59+ binding.executePendingBindings()
60+ binding.lifecycleOwner = this
61+ binding.viewModel = viewModel
62+ viewModel.setShareLink(arguments?.getParcelable(ShareManagementFragment .SHARE_BY_URL_VO_KEY ))
63+ viewModel.setShare(arguments?.getParcelable(ShareManagementFragment .PARCELABLE_SHARE_KEY ))
64+ initCurrentAccessRole()
65+
66+ return binding.root
67+ }
68+
69+ private fun initCurrentAccessRole () {
70+ when (viewModel.getCheckedAccessRole().value) {
71+ AccessRole .CONTRIBUTOR -> binding.radioGroup.check(R .id.rbContributor)
72+ AccessRole .EDITOR -> binding.radioGroup.check(R .id.rbEditor)
73+ AccessRole .CURATOR -> binding.radioGroup.check(R .id.rbCurator)
74+ AccessRole .OWNER -> binding.radioGroup.check(R .id.rbOwner)
75+ else -> {
76+ binding.radioGroup.check(R .id.rbViewer)
77+ }
78+ }
79+ }
80+
81+ override fun onCreateDialog (savedInstanceState : Bundle ? ): Dialog {
82+ val bottomSheetDialog = super .onCreateDialog(savedInstanceState) as BottomSheetDialog
83+ bottomSheetDialog.setOnShowListener { dialog: DialogInterface ->
84+ val dialogc = dialog as BottomSheetDialog
85+ val bottomSheet =
86+ dialogc.findViewById<FrameLayout >(com.google.android.material.R .id.design_bottom_sheet)
87+ BottomSheetBehavior .from(bottomSheet as FrameLayout )
88+ .setState(BottomSheetBehavior .STATE_EXPANDED )
89+ }
90+ return bottomSheetDialog
91+ }
92+
93+ private val showSnackbarSuccess = Observer <String > { message ->
94+ dialog?.window?.decorView?.let {
95+ val snackBar = Snackbar .make(it, message, Snackbar .LENGTH_LONG )
96+ val view: View = snackBar.view
97+ context?.let {
98+ view.setBackgroundColor(ContextCompat .getColor(it, R .color.paleGreen))
99+ snackBar.setTextColor(ContextCompat .getColor(it, R .color.green))
100+ }
101+ val snackbarTextTextView = view.findViewById(R .id.snackbar_text) as TextView
102+ snackbarTextTextView.setTypeface(snackbarTextTextView.typeface, Typeface .BOLD )
103+ snackBar.show()
104+ }
105+ }
106+
107+ private val showSnackbar = Observer <String > { message ->
108+ dialog?.window?.decorView?.let {
109+ Snackbar .make(it, message, Snackbar .LENGTH_LONG ).show()
110+ }
111+ }
112+
113+ private val onCloseSheetObserver = Observer <Void > {
114+ dismiss()
115+ }
116+
117+ private val onAccessRoleUpdatedObserver = Observer <AccessRole ?> {
118+ onAccessRoleUpdated.value = it
119+ dismiss()
120+ }
121+
122+ private val showAccessRolesDocObserver = Observer <Void > {
123+ val intent = Intent (Intent .ACTION_VIEW )
124+ intent.data = Uri .parse(BuildConfig .ACCESS_ROLES_URL )
125+ startActivity(intent)
126+ }
127+
128+ fun getOnAccessRoleUpdated (): MutableLiveData <AccessRole ?> = onAccessRoleUpdated
129+
130+ override fun connectViewModelEvents () {
131+ viewModel.getShowAccessRolesDocumentation().observe(this , showAccessRolesDocObserver)
132+ viewModel.getOnAccessRoleUpdated().observe(this , onAccessRoleUpdatedObserver)
133+ viewModel.getOnCloseSheetRequest().observe(this , onCloseSheetObserver)
134+ viewModel.getShowSnackbar().observe(this , showSnackbar)
135+ viewModel.getShowSnackbarSuccess().observe(this , showSnackbarSuccess)
136+ }
137+
138+ override fun disconnectViewModelEvents () {
139+ viewModel.getShowAccessRolesDocumentation().removeObserver(showAccessRolesDocObserver)
140+ viewModel.getOnAccessRoleUpdated().removeObserver(onAccessRoleUpdatedObserver)
141+ viewModel.getOnCloseSheetRequest().removeObserver(onCloseSheetObserver)
142+ viewModel.getShowSnackbar().observe(this , showSnackbar)
143+ viewModel.getShowSnackbarSuccess().observe(this , showSnackbarSuccess)
144+ }
145+
146+ override fun onResume () {
147+ super .onResume()
148+ connectViewModelEvents()
149+ }
150+
151+ override fun onPause () {
152+ super .onPause()
153+ disconnectViewModelEvents()
154+ }
155+ }
0 commit comments