Skip to content

Commit 48d1e9c

Browse files
committed
use showBottomSheetDialog
Signed-off-by: alperozturk <[email protected]>
1 parent 0e78de0 commit 48d1e9c

File tree

5 files changed

+98
-39
lines changed

5 files changed

+98
-39
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package it.niedermann.owncloud.notes.accountswitcher
2+
3+
import com.owncloud.android.lib.resources.users.Status
4+
import it.niedermann.owncloud.notes.accountswitcher.repository.UserStatusRepository
5+
import it.niedermann.owncloud.notes.branding.BrandedBottomSheetDialogFragment
6+
7+
enum class AccountSwitcherBottomSheetTag(tag: String) {
8+
ONLINE_STATUS("fragment_set_status"),
9+
MESSAGE_STATUS("fragment_set_status_message");
10+
11+
fun fragment(
12+
repository: UserStatusRepository,
13+
currentStatus: Status
14+
): BrandedBottomSheetDialogFragment {
15+
return when (this) {
16+
ONLINE_STATUS -> {
17+
SetOnlineStatusBottomSheet(repository, currentStatus)
18+
}
19+
20+
MESSAGE_STATUS -> {
21+
SetStatusMessageBottomSheet(repository, currentStatus)
22+
}
23+
}
24+
}
25+
}

app/src/main/java/it/niedermann/owncloud/notes/accountswitcher/AccountSwitcherDialog.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,17 @@
2222

2323
import it.niedermann.owncloud.notes.NotesApplication;
2424
import it.niedermann.owncloud.notes.R;
25+
import it.niedermann.owncloud.notes.accountswitcher.repository.UserStatusRepository;
26+
import it.niedermann.owncloud.notes.branding.BrandedBottomSheetDialogFragment;
2527
import it.niedermann.owncloud.notes.branding.BrandedDialogFragment;
2628
import it.niedermann.owncloud.notes.branding.BrandingUtil;
2729
import it.niedermann.owncloud.notes.databinding.DialogAccountSwitcherBinding;
2830
import it.niedermann.owncloud.notes.manageaccounts.ManageAccountsActivity;
2931
import it.niedermann.owncloud.notes.persistence.NotesRepository;
3032
import it.niedermann.owncloud.notes.persistence.entity.Account;
3133
import it.niedermann.owncloud.notes.share.helper.AvatarLoader;
34+
import it.niedermann.owncloud.notes.util.ActivityExtensionsKt;
35+
import kotlin.Unit;
3236

3337
/**
3438
* Displays all available {@link Account} entries and provides basic operations for them, like adding or switching
@@ -75,6 +79,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) {
7579
binding.accountHost.setText(Uri.parse(currentLocalAccount.getUrl()).getHost());
7680
AvatarLoader.INSTANCE.load(requireContext(), binding.currentAccountItemAvatar, currentLocalAccount);
7781
binding.accountLayout.setOnClickListener((v) -> dismiss());
82+
7883
binding.onlineStatus.setOnClickListener(v -> {
7984
final var setOnlineStatusBottomSheet = new SetOnlineStatusBottomSheet();
8085
setOnlineStatusBottomSheet.show(requireActivity().getSupportFragmentManager(), "fragment_set_status");
@@ -123,6 +128,20 @@ public Dialog onCreateDialog(Bundle savedInstanceState) {
123128
return builder.create();
124129
}
125130

131+
private void showBottomSheetDialog(@NonNull AccountSwitcherBottomSheetTag tag) {
132+
ActivityExtensionsKt.ssoAccount(requireActivity(), account -> {
133+
if (account == null) {
134+
return Unit.INSTANCE;
135+
}
136+
final var repository = new UserStatusRepository(requireContext(), account);
137+
138+
final var fragment = tag.fragment(repository, )
139+
fragment.show(requireActivity().getSupportFragmentManager(), tag.name());
140+
dismiss();
141+
return Unit.INSTANCE;
142+
});
143+
}
144+
126145
public static DialogFragment newInstance(long currentAccountId) {
127146
final var dialog = new AccountSwitcherDialog();
128147

app/src/main/java/it/niedermann/owncloud/notes/accountswitcher/SetOnlineStatusBottomSheet.kt

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import androidx.core.content.ContextCompat
1313
import androidx.lifecycle.lifecycleScope
1414
import com.google.android.material.card.MaterialCardView
1515
import com.nextcloud.android.common.ui.theme.utils.ColorRole
16-
import com.nextcloud.android.sso.helper.SingleAccountHelper
1716
import com.owncloud.android.lib.resources.users.Status
1817
import com.owncloud.android.lib.resources.users.StatusType
1918
import it.niedermann.owncloud.notes.R
@@ -27,7 +26,10 @@ import kotlinx.coroutines.Dispatchers
2726
import kotlinx.coroutines.launch
2827
import kotlinx.coroutines.withContext
2928

30-
class SetOnlineStatusBottomSheet :
29+
class SetOnlineStatusBottomSheet(
30+
private val repository: UserStatusRepository,
31+
private val currentStatus: Status
32+
) :
3133
BrandedBottomSheetDialogFragment(R.layout.set_online_status_bottom_sheet) {
3234

3335
companion object {
@@ -36,12 +38,12 @@ class SetOnlineStatusBottomSheet :
3638

3739
private lateinit var binding: SetOnlineStatusBottomSheetBinding
3840
private var cardViews: Triple<MaterialCardView, TextView, ImageView>? = null
39-
private var repository: UserStatusRepository? = null
4041

4142
@SuppressLint("DefaultLocale")
4243
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
4344
super.onViewCreated(view, savedInstanceState)
4445

46+
visualizeStatus(currentStatus.status)
4547
initRepository()
4648
setupStatusClickListeners()
4749
}
@@ -62,35 +64,20 @@ class SetOnlineStatusBottomSheet :
6264

6365
private fun initRepository() {
6466
lifecycleScope.launch(Dispatchers.IO) {
65-
val ssoAccount =
66-
SingleAccountHelper.getCurrentSingleSignOnAccount(requireContext()) ?: return@launch
67-
repository = UserStatusRepository(requireContext(), ssoAccount)
68-
val currentStatus =
69-
repository?.fetchUserStatus() ?: Status(StatusType.OFFLINE, "", "", -1)
70-
71-
val capabilities = repository?.getCapabilities()
72-
73-
if (capabilities?.isUserStatusSupportsBusy == true) {
67+
val capabilities = repository.getCapabilities()
68+
if (capabilities.isUserStatusSupportsBusy) {
7469
binding.busyStatus.visibility = View.VISIBLE
7570
} else {
7671
binding.busyStatus.visibility = View.GONE
7772
}
78-
79-
withContext(Dispatchers.Main) {
80-
updateCurrentStatusViews(currentStatus)
81-
}
8273
}
8374
}
8475

85-
private fun updateCurrentStatusViews(it: Status) {
86-
visualizeStatus(it.status)
87-
}
88-
8976
private fun setStatus(statusType: StatusType) {
9077
lifecycleScope.launch(Dispatchers.IO) {
91-
val result = repository?.setStatusType(statusType)
78+
val result = repository.setStatusType(statusType)
9279
withContext(Dispatchers.Main) {
93-
if (result == true) {
80+
if (result) {
9481
dismiss()
9582
} else {
9683
showErrorSnackbar()
@@ -140,10 +127,19 @@ class SetOnlineStatusBottomSheet :
140127
dndHeadline,
141128
invisibleHeadline
142129
)
143-
val color = ContextCompat.getColor(ctx, com.nextcloud.android.common.ui.R.color.high_emphasis_text)
130+
val color = ContextCompat.getColor(
131+
ctx,
132+
com.nextcloud.android.common.ui.R.color.high_emphasis_text
133+
)
144134
headlines.forEach { it.setTextColor(color) }
145135
listOf(awayIcon, dndIcon, invisibleIcon).forEach { it.imageTintList = null }
146-
listOf(onlineStatus, awayStatus, busyStatus, dndStatus, invisibleStatus).forEach { it.isChecked = false }
136+
listOf(
137+
onlineStatus,
138+
awayStatus,
139+
busyStatus,
140+
dndStatus,
141+
invisibleStatus
142+
).forEach { it.isChecked = false }
147143
}
148144
}
149145
}

app/src/main/java/it/niedermann/owncloud/notes/accountswitcher/SetStatusMessageBottomSheet.kt

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,10 @@ import android.widget.AdapterView.OnItemSelectedListener
2121
import android.widget.ArrayAdapter
2222
import androidx.lifecycle.lifecycleScope
2323
import androidx.recyclerview.widget.LinearLayoutManager
24-
import com.nextcloud.android.sso.helper.SingleAccountHelper
2524
import com.owncloud.android.lib.common.utils.Log_OC
2625
import com.owncloud.android.lib.resources.users.ClearAt
2726
import com.owncloud.android.lib.resources.users.PredefinedStatus
2827
import com.owncloud.android.lib.resources.users.Status
29-
import com.owncloud.android.lib.resources.users.StatusType
3028
import com.vanniktech.emoji.EmojiManager
3129
import com.vanniktech.emoji.EmojiPopup
3230
import com.vanniktech.emoji.google.GoogleEmojiProvider
@@ -64,7 +62,10 @@ private const val LAST_SECOND_OF_MINUTE = 59
6462
private const val CLEAR_AT_TYPE_PERIOD = "period"
6563
private const val CLEAR_AT_TYPE_END_OF = "end-of"
6664

67-
class SetStatusMessageBottomSheet :
65+
class SetStatusMessageBottomSheet(
66+
private val repository: UserStatusRepository,
67+
private val currentStatus: Status
68+
) :
6869
BrandedBottomSheetDialogFragment(R.layout.set_status_message_bottom_sheet),
6970
PredefinedStatusClickListener {
7071
companion object {
@@ -73,7 +74,6 @@ class SetStatusMessageBottomSheet :
7374

7475
private lateinit var binding: SetStatusMessageBottomSheetBinding
7576

76-
private var repository: UserStatusRepository? = null
7777
private lateinit var adapter: PredefinedStatusListAdapter
7878
private var selectedPredefinedMessageId: String? = null
7979
private var clearAt: Long? = -1
@@ -86,14 +86,8 @@ class SetStatusMessageBottomSheet :
8686

8787
private fun initRepository() {
8888
lifecycleScope.launch(Dispatchers.IO) {
89-
val ssoAccount =
90-
SingleAccountHelper.getCurrentSingleSignOnAccount(requireContext()) ?: return@launch
91-
repository = UserStatusRepository(requireContext(), ssoAccount)
92-
val predefinedStatus = repository?.fetchPredefinedStatuses() ?: arrayListOf()
93-
val currentStatus = repository?.fetchUserStatus() ?: Status(StatusType.OFFLINE, "", "", -1)
94-
89+
val predefinedStatus = repository.fetchPredefinedStatuses()
9590
withContext(Dispatchers.Main) {
96-
updateCurrentStatusViews(currentStatus)
9791
initPredefinedStatusAdapter(predefinedStatus)
9892
}
9993
}
@@ -111,7 +105,7 @@ class SetStatusMessageBottomSheet :
111105
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
112106
super.onViewCreated(view, savedInstanceState)
113107
initRepository()
114-
108+
updateCurrentStatusViews(currentStatus)
115109
binding.clearStatus.setOnClickListener { clearStatus() }
116110
binding.setStatus.setOnClickListener { setStatusMessage() }
117111
binding.emoji.setOnClickListener { popup.show() }
@@ -264,20 +258,20 @@ class SetStatusMessageBottomSheet :
264258

265259
private fun clearStatus() {
266260
lifecycleScope.launch(Dispatchers.IO) {
267-
val result = repository?.clearStatus()
261+
val result = repository.clearStatus()
268262
dismiss(result)
269263
}
270264
}
271265

272266
private fun setStatusMessage() {
273267
if (selectedPredefinedMessageId != null) {
274268
lifecycleScope.launch(Dispatchers.IO) {
275-
val result = repository?.setPredefinedStatus(selectedPredefinedMessageId!!, clearAt)
269+
val result = repository.setPredefinedStatus(selectedPredefinedMessageId!!, clearAt)
276270
dismiss(result)
277271
}
278272
} else {
279273
lifecycleScope.launch(Dispatchers.IO) {
280-
val result = repository?.setCustomStatus(
274+
val result = repository.setCustomStatus(
281275
binding.customStatusInput.text.toString(),
282276
binding.emoji.text.toString(),
283277
clearAt
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package it.niedermann.owncloud.notes.util
2+
3+
import androidx.core.app.ComponentActivity
4+
import androidx.lifecycle.lifecycleScope
5+
import com.nextcloud.android.sso.helper.SingleAccountHelper
6+
import com.nextcloud.android.sso.model.SingleSignOnAccount
7+
import com.owncloud.android.lib.common.utils.Log_OC
8+
import kotlinx.coroutines.Dispatchers
9+
import kotlinx.coroutines.launch
10+
import kotlinx.coroutines.withContext
11+
12+
fun ComponentActivity.ssoAccount(onCompleted: (SingleSignOnAccount?) -> Unit) {
13+
lifecycleScope.launch(Dispatchers.IO) {
14+
val result = try {
15+
val account = SingleAccountHelper.getCurrentSingleSignOnAccount(this@ssoAccount)
16+
account
17+
} catch (t: Throwable) {
18+
Log_OC.e("ComponentActivityExtension", "cant get sso account: $t")
19+
null
20+
}
21+
withContext(Dispatchers.Main) {
22+
onCompleted(result)
23+
}
24+
}
25+
}

0 commit comments

Comments
 (0)