Skip to content

Commit 36e0c13

Browse files
authored
Merge pull request #3677 from nextcloud/use-default-constructor
Fix: Use of parameterized constructor with fragments
2 parents d863674 + 3866bee commit 36e0c13

5 files changed

Lines changed: 202 additions & 187 deletions

File tree

app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4259,12 +4259,7 @@ class ChatActivity :
42594259

42604260
val chatApiVersion = ApiUtils.getChatApiVersion(spreedCapabilities, intArrayOf(ApiUtils.API_V1, 1))
42614261

4262-
val newFragment: DialogFragment = DateTimePickerFragment.newInstance(
4263-
roomToken,
4264-
message!!.id,
4265-
chatViewModel,
4266-
chatApiVersion
4267-
)
4262+
val newFragment: DialogFragment = DateTimePickerFragment.newInstance(roomToken, message!!.id, chatApiVersion)
42684263
newFragment.show(supportFragmentManager, DateTimePickerFragment.TAG)
42694264
}
42704265

app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -978,10 +978,7 @@ class ConversationsListActivity :
978978
updateFilterConversationButtonColor()
979979

980980
binding.filterConversationsButton.setOnClickListener {
981-
val newFragment: DialogFragment = FilterConversationFragment.newInstance(
982-
filterState,
983-
this
984-
)
981+
val newFragment = FilterConversationFragment.newInstance(filterState)
985982
newFragment.show(supportFragmentManager, FilterConversationFragment.TAG)
986983
}
987984

app/src/main/java/com/nextcloud/talk/ui/dialog/DateTimePickerFragment.kt

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import com.google.android.material.timepicker.TimeFormat
3737
import com.nextcloud.android.common.ui.theme.utils.ColorRole
3838
import com.nextcloud.talk.R
3939
import com.nextcloud.talk.application.NextcloudTalkApplication
40+
import com.nextcloud.talk.chat.ChatActivity
4041
import com.nextcloud.talk.chat.viewmodels.ChatViewModel
4142
import com.nextcloud.talk.databinding.DialogDateTimePickerBinding
4243
import com.nextcloud.talk.ui.theme.ViewThemeUtils
@@ -47,18 +48,15 @@ import javax.inject.Inject
4748

4849
@Suppress("TooManyFunctions")
4950
@AutoInjector(NextcloudTalkApplication::class)
50-
class DateTimePickerFragment(
51-
token: String,
52-
id: String,
53-
chatViewModel: ChatViewModel,
54-
private val chatApiVersion: Int
55-
) : DialogFragment() {
51+
class DateTimePickerFragment : DialogFragment() {
52+
5653
lateinit var binding: DialogDateTimePickerBinding
5754
private var dialogView: View? = null
58-
private var viewModel = chatViewModel
55+
private lateinit var viewModel: ChatViewModel
5956
private var currentTimeStamp: Long? = null
60-
private var roomToken = token
61-
private var messageId = id
57+
private lateinit var roomToken: String
58+
private lateinit var messageId: String
59+
private var chatApiVersion: Int = -1
6260
private var laterTodayTimeStamp = 0L
6361
private var tomorrowTimeStamp = 0L
6462
private var weekendTimeStamp = 0L
@@ -73,6 +71,12 @@ class DateTimePickerFragment(
7371
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
7472
binding = DialogDateTimePickerBinding.inflate(LayoutInflater.from(context))
7573
dialogView = binding.root
74+
viewModel = (requireActivity() as ChatActivity).chatViewModel
75+
arguments?.let {
76+
roomToken = it.getString(TOKEN_ARG, "")
77+
messageId = it.getString(ID_ARG, "")
78+
chatApiVersion = it.getInt(CHAT_API_VERSION_ARG)
79+
}
7680
return MaterialAlertDialogBuilder(requireContext()).setView(dialogView).create()
7781
}
7882

@@ -304,14 +308,20 @@ class DateTimePickerFragment(
304308
private const val ONE_SEC = 1000
305309
private const val HOUR_EIGHT_AM = 8
306310
private const val HOUR_SIX_PM = 18
311+
private const val TOKEN_ARG = "TOKEN_ARG"
312+
private const val ID_ARG = "ID_ARG"
313+
private const val CHAT_API_VERSION_ARG = "CHAT_API_VERSION_ARG"
307314

308315
@JvmStatic
309-
fun newInstance(token: String, id: String, chatViewModel: ChatViewModel, chatApiVersion: Int) =
310-
DateTimePickerFragment(
311-
token,
312-
id,
313-
chatViewModel,
314-
chatApiVersion
315-
)
316+
fun newInstance(token: String, id: String, chatApiVersion: Int): DateTimePickerFragment {
317+
val args = Bundle()
318+
args.putString(TOKEN_ARG, token)
319+
args.putString(ID_ARG, id)
320+
args.putInt(CHAT_API_VERSION_ARG, chatApiVersion)
321+
322+
val dateTimePickerFragment = DateTimePickerFragment()
323+
dateTimePickerFragment.arguments = args
324+
return dateTimePickerFragment
325+
}
316326
}
317327
}

app/src/main/java/com/nextcloud/talk/ui/dialog/FilterConversationFragment.kt

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package com.nextcloud.talk.ui.dialog
2121

2222
import android.app.Dialog
23+
import android.os.Build
2324
import android.os.Bundle
2425
import android.view.LayoutInflater
2526
import android.view.View
@@ -38,14 +39,10 @@ import com.nextcloud.talk.utils.UserIdUtils
3839
import javax.inject.Inject
3940

4041
@AutoInjector(NextcloudTalkApplication::class)
41-
class FilterConversationFragment(
42-
savedFilterState: MutableMap<String, Boolean>,
43-
conversationsListActivity: ConversationsListActivity
44-
) : DialogFragment() {
42+
class FilterConversationFragment : DialogFragment() {
4543
lateinit var binding: DialogFilterConversationBinding
4644
private var dialogView: View? = null
47-
private var filterState = savedFilterState
48-
private var conversationsList = conversationsListActivity
45+
private lateinit var filterState: HashMap<String, Boolean>
4946

5047
@Inject
5148
lateinit var userManager: UserManager
@@ -58,7 +55,11 @@ class FilterConversationFragment(
5855
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
5956
binding = DialogFilterConversationBinding.inflate(LayoutInflater.from(context))
6057
dialogView = binding.root
61-
58+
filterState = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
59+
arguments?.getSerializable(FILTER_STATE_ARG, HashMap::class.java) as HashMap<String, Boolean>
60+
} else {
61+
arguments?.getSerializable(FILTER_STATE_ARG) as HashMap<String, Boolean>
62+
}
6263
return MaterialAlertDialogBuilder(requireContext()).setView(dialogView).create()
6364
}
6465

@@ -120,15 +121,21 @@ class FilterConversationFragment(
120121
arbitraryStorageManager.storeStorageSetting(accountId, MENTION, mentionValue.toString(), "")
121122
arbitraryStorageManager.storeStorageSetting(accountId, UNREAD, unreadValue.toString(), "")
122123

123-
conversationsList.filterConversation()
124+
(requireActivity() as ConversationsListActivity).filterConversation()
124125
}
125126

126127
companion object {
128+
private const val FILTER_STATE_ARG = "FILTER_STATE_ARG"
129+
127130
@JvmStatic
128-
fun newInstance(
129-
savedFilterState: MutableMap<String, Boolean>,
130-
conversationsListActivity: ConversationsListActivity
131-
) = FilterConversationFragment(savedFilterState, conversationsListActivity)
131+
fun newInstance(savedFilterState: MutableMap<String, Boolean>): FilterConversationFragment {
132+
val filterConversationFragment = FilterConversationFragment()
133+
val args = Bundle()
134+
args.putSerializable(FILTER_STATE_ARG, HashMap(savedFilterState))
135+
filterConversationFragment.arguments = args
136+
return filterConversationFragment
137+
}
138+
132139
val TAG: String = FilterConversationFragment::class.java.simpleName
133140
const val MENTION: String = "mention"
134141
const val UNREAD: String = "unread"

0 commit comments

Comments
 (0)