Skip to content
This repository was archived by the owner on Jun 7, 2020. It is now read-only.

Commit 0c11cb5

Browse files
authored
Merge pull request #1552 from RocketChat/beta
[RELEASE] merge 2.5.1 to master
2 parents 68a1626 + be97e8f commit 0c11cb5

34 files changed

Lines changed: 653 additions & 279 deletions

File tree

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ android {
1212
applicationId "chat.rocket.android"
1313
minSdkVersion versions.minSdk
1414
targetSdkVersion versions.targetSdk
15-
versionCode 2034
16-
versionName "2.5.0"
15+
versionCode 2035
16+
versionName "2.5.1"
1717
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
1818
multiDexEnabled true
1919

app/src/main/java/chat/rocket/android/authentication/domain/model/LoginDeepLinkInfo.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import timber.log.Timber
1111
@Parcelize
1212
data class LoginDeepLinkInfo(
1313
val url: String,
14-
val userId: String,
15-
val token: String
14+
val userId: String?,
15+
val token: String?
1616
) : Parcelable
1717

1818
fun Intent.getLoginDeepLinkInfo(): LoginDeepLinkInfo? {

app/src/main/java/chat/rocket/android/authentication/login/presentation/LoginPresenter.kt

Lines changed: 280 additions & 157 deletions
Large diffs are not rendered by default.

app/src/main/java/chat/rocket/android/authentication/login/presentation/LoginView.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,21 @@ interface LoginView : LoadingView, MessageView {
190190
*/
191191
fun setupGitlabButtonListener(gitlabUrl: String, state: String)
192192

193+
/**
194+
* Shows the "login by WordPress" view if it is enable by the server settings.
195+
*
196+
* REMARK: We must set up the Gitlab button listener before enabling it [setupWordpressButtonListener].
197+
*/
198+
fun enableLoginByWordpress()
199+
200+
/**
201+
* Setups the WordPress button when tapped.
202+
*
203+
* @param wordpressUrl The WordPress OAuth URL to authenticate with.
204+
* @param state A random string generated by the app, which you'll verify later (to protect against forgery attacks).
205+
*/
206+
fun setupWordpressButtonListener(wordpressUrl: String, state: String)
207+
193208
/**
194209
* Adds a custom OAuth button in the oauth view.
195210
*

app/src/main/java/chat/rocket/android/authentication/login/ui/LoginFragment.kt

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,24 @@ class LoginFragment : Fragment(), LoginView {
443443
}
444444
}
445445

446+
override fun enableLoginByWordpress() {
447+
ui {
448+
button_wordpress.isClickable = true
449+
}
450+
}
451+
452+
override fun setupWordpressButtonListener(wordpressUrl: String, state: String) {
453+
ui { activity ->
454+
button_wordpress.setOnClickListener {
455+
startActivityForResult(
456+
activity.oauthWebViewIntent(wordpressUrl, state),
457+
REQUEST_CODE_FOR_OAUTH
458+
)
459+
activity.overridePendingTransition(R.anim.slide_up, R.anim.hold)
460+
}
461+
}
462+
}
463+
446464
override fun addCustomOauthServiceButton(
447465
customOauthUrl: String,
448466
state: String,
@@ -488,11 +506,11 @@ class LoginFragment : Fragment(), LoginView {
488506
override fun setupFabListener() {
489507
ui {
490508
button_fab.isVisible = true
491-
button_fab.setOnClickListener({
509+
button_fab.setOnClickListener {
492510
button_fab.hide()
493511
showRemainingSocialAccountsView()
494512
scrollToBottom()
495-
})
513+
}
496514
}
497515
}
498516

app/src/main/java/chat/rocket/android/authentication/server/ui/ServerFragment.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ class ServerFragment : Fragment(), ServerView {
104104

105105
override fun onDestroyView() {
106106
super.onDestroyView()
107+
// reset deep link info, so user can come back and log to another server...
108+
deepLinkInfo = null
107109
relative_layout.viewTreeObserver.removeOnGlobalLayoutListener(layoutListener)
108110
}
109111

@@ -144,9 +146,9 @@ class ServerFragment : Fragment(), ServerView {
144146
hideLoading()
145147
AlertDialog.Builder(it)
146148
.setMessage(getString(R.string.msg_ver_not_recommended, BuildConfig.RECOMMENDED_SERVER_VERSION))
147-
.setPositiveButton(R.string.msg_ok, { _, _ ->
149+
.setPositiveButton(R.string.msg_ok) { _, _ ->
148150
performConnect()
149-
})
151+
}
150152
.create()
151153
.show()
152154
}

app/src/main/java/chat/rocket/android/authentication/ui/AuthenticationActivity.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,7 @@ class AuthenticationActivity : AppCompatActivity(), HasSupportFragmentInjector {
5656
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
5757
super.onActivityResult(requestCode, resultCode, data)
5858
val currentFragment = supportFragmentManager.findFragmentById(R.id.fragment_container)
59-
if (currentFragment != null) {
60-
currentFragment.onActivityResult(requestCode, resultCode, data)
61-
}
59+
currentFragment?.onActivityResult(requestCode, resultCode, data)
6260
}
6361

6462
override fun supportFragmentInjector(): AndroidInjector<Fragment> {

app/src/main/java/chat/rocket/android/chatroom/adapter/BaseViewHolder.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import android.view.View
66
import android.view.ViewGroup
77
import androidx.appcompat.app.AppCompatActivity
88
import androidx.core.view.children
9+
import androidx.lifecycle.Lifecycle
910
import androidx.recyclerview.widget.RecyclerView
1011
import chat.rocket.android.R
1112
import chat.rocket.android.chatroom.ui.bottomsheet.MessageActionsBottomSheet
@@ -94,9 +95,11 @@ abstract class BaseViewHolder<T : BaseUiModel<*>>(
9495
view.context?.let {
9596
if (it is ContextThemeWrapper && it.baseContext is AppCompatActivity) {
9697
with(it.baseContext as AppCompatActivity) {
97-
val actionsBottomSheet = MessageActionsBottomSheet()
98-
actionsBottomSheet.addItems(menuItems, this@BaseViewHolder)
99-
actionsBottomSheet.show(supportFragmentManager, null)
98+
if (this.lifecycle.currentState.isAtLeast(Lifecycle.State.RESUMED)) {
99+
val actionsBottomSheet = MessageActionsBottomSheet()
100+
actionsBottomSheet.addItems(menuItems, this@BaseViewHolder)
101+
actionsBottomSheet.show(supportFragmentManager, null)
102+
}
100103
}
101104
}
102105
}

app/src/main/java/chat/rocket/android/chatroom/adapter/ChatRoomAdapter.kt

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,9 @@ import java.security.InvalidParameterException
1818
class ChatRoomAdapter(
1919
private val roomType: String? = null,
2020
private val roomName: String? = null,
21-
private val presenter: ChatRoomPresenter? = null,
21+
private val actionSelectListener: OnActionSelected? = null,
2222
private val enableActions: Boolean = true,
23-
private val reactionListener: EmojiReactionListener? = null,
24-
private val context: Context? = null
23+
private val reactionListener: EmojiReactionListener? = null
2524
) : RecyclerView.Adapter<BaseViewHolder<*>>() {
2625
private val dataSet = ArrayList<BaseUiModel<*>>()
2726

@@ -70,7 +69,7 @@ class ChatRoomAdapter(
7069
BaseUiModel.ViewType.MESSAGE_REPLY -> {
7170
val view = parent.inflate(R.layout.item_message_reply)
7271
MessageReplyViewHolder(view, actionsListener, reactionListener) { roomName, permalink ->
73-
presenter?.openDirectMessage(roomName, permalink)
72+
actionSelectListener?.openDirectMessage(roomName, permalink)
7473
}
7574
}
7675
else -> {
@@ -212,52 +211,53 @@ class ChatRoomAdapter(
212211
message.apply {
213212
when (item.itemId) {
214213
R.id.action_message_info -> {
215-
presenter?.messageInfo(id)
214+
actionSelectListener?.showMessageInfo(id)
216215
}
217216
R.id.action_message_reply -> {
218217
if (roomName != null && roomType != null) {
219-
presenter?.citeMessage(roomName, roomType, id, true)
218+
actionSelectListener?.citeMessage(roomName, roomType, id, true)
220219
}
221220
}
222221
R.id.action_message_quote -> {
223222
if (roomName != null && roomType != null) {
224-
presenter?.citeMessage(roomName, roomType, id, false)
223+
actionSelectListener?.citeMessage(roomName, roomType, id, false)
225224
}
226225
}
227226
R.id.action_message_copy -> {
228-
presenter?.copyMessage(id)
227+
actionSelectListener?.copyMessage(id)
229228
}
230229
R.id.action_message_edit -> {
231-
presenter?.editMessage(roomId, id, message.message)
230+
actionSelectListener?.editMessage(roomId, id, message.message)
232231
}
233232
R.id.action_message_star -> {
234-
if (!item.isChecked) {
235-
presenter?.starMessage(id)
236-
} else {
237-
presenter?.unstarMessage(id)
238-
}
233+
actionSelectListener?.toogleStar(id, !item.isChecked)
239234
}
240235
R.id.action_message_unpin -> {
241-
if (!item.isChecked) {
242-
presenter?.pinMessage(id)
243-
} else {
244-
presenter?.unpinMessage(id)
245-
}
236+
actionSelectListener?.tooglePin(id, !item.isChecked)
246237
}
247238
R.id.action_message_delete -> {
248-
context?.let {
249-
val builder = AlertDialog.Builder(it)
250-
builder.setTitle(it.getString(R.string.msg_delete_message))
251-
.setMessage(it.getString(R.string.msg_delete_description))
252-
.setPositiveButton(it.getString(R.string.msg_ok)) { _, _ -> presenter?.deleteMessage(roomId, id) }
253-
.setNegativeButton(it.getString(R.string.msg_cancel)) { _, _ -> }
254-
.show()
255-
}
239+
actionSelectListener?.deleteMessage(roomId, id)
240+
}
241+
R.id.action_menu_msg_react -> {
242+
actionSelectListener?.showReactions(id)
243+
}
244+
else -> {
245+
TODO("Not implemented")
256246
}
257-
R.id.action_menu_msg_react -> presenter?.showReactions(id)
258-
else -> TODO("Not implemented")
259247
}
260248
}
261249
}
262250
}
251+
252+
interface OnActionSelected {
253+
fun showMessageInfo(id: String)
254+
fun citeMessage(roomName: String, roomType: String, messageId: String, mentionAuthor: Boolean)
255+
fun copyMessage(id: String)
256+
fun editMessage(roomId: String, messageId: String, text: String)
257+
fun toogleStar(id: String, star: Boolean)
258+
fun tooglePin(id: String, pin: Boolean)
259+
fun deleteMessage(roomId: String, id: String)
260+
fun showReactions(id: String)
261+
fun openDirectMessage(roomName: String, message: String)
262+
}
263263
}

app/src/main/java/chat/rocket/android/chatroom/adapter/UrlPreviewViewHolder.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
package chat.rocket.android.chatroom.adapter
22

3-
import android.net.Uri
43
import android.view.View
54
import androidx.core.view.isVisible
65
import chat.rocket.android.chatroom.uimodel.UrlPreviewUiModel
7-
import chat.rocket.android.util.extensions.openTabbedUrl
86
import chat.rocket.android.emoji.EmojiReactionListener
97
import chat.rocket.android.util.extensions.content
8+
import chat.rocket.android.util.extensions.openTabbedUrl
109
import kotlinx.android.synthetic.main.message_url_preview.view.*
1110

1211
class UrlPreviewViewHolder(itemView: View,
@@ -42,7 +41,7 @@ class UrlPreviewViewHolder(itemView: View,
4241

4342
private val onClickListener = { view: View ->
4443
if (data != null) {
45-
view.openTabbedUrl(Uri.parse(data!!.rawData.url))
44+
view.openTabbedUrl(data!!.rawData.url)
4645
}
4746
}
4847
}

0 commit comments

Comments
 (0)