Fix issues with chat title crash

Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
Mario Danic 2019-09-30 10:35:30 +02:00
parent b95bb003df
commit e1d9a24130
3 changed files with 38 additions and 42 deletions

View File

@ -38,8 +38,8 @@ android {
targetSdkVersion 28 targetSdkVersion 28
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
versionCode 116 versionCode 117
versionName "7.0.2" versionName "7.0.3"
flavorDimensions "default" flavorDimensions "default"
renderscriptTargetApi 19 renderscriptTargetApi 19
@ -199,8 +199,8 @@ dependencies {
implementation 'net.orange-box.storebox:storebox-lib:1.4.0' implementation 'net.orange-box.storebox:storebox-lib:1.4.0'
compileOnly 'org.projectlombok:lombok:1.18.8' compileOnly 'org.projectlombok:lombok:1.18.8'
annotationProcessor "org.projectlombok:lombok:1.18.8" annotationProcessor "org.projectlombok:lombok:1.18.8"
implementation 'com.jakewharton:butterknife:10.1.0' implementation 'com.jakewharton:butterknife:10.2.0'
kapt 'com.jakewharton:butterknife-compiler:10.1.0' kapt 'com.jakewharton:butterknife-compiler:10.2.0'
implementation 'com.github.HITGIF:TextFieldBoxes:1.4.5' implementation 'com.github.HITGIF:TextFieldBoxes:1.4.5'
implementation 'eu.davidea:flexible-adapter:5.1.0' implementation 'eu.davidea:flexible-adapter:5.1.0'
implementation 'eu.davidea:flexible-adapter-ui:1.0.0' implementation 'eu.davidea:flexible-adapter-ui:1.0.0'

View File

@ -111,31 +111,31 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
.OnMessageLongClickListener<IMessage>, MessageHolders.ContentChecker<IMessage> { .OnMessageLongClickListener<IMessage>, MessageHolders.ContentChecker<IMessage> {
@Inject @Inject
lateinit internal var ncApi: NcApi lateinit var ncApi: NcApi
@Inject @Inject
lateinit internal var userUtils: UserUtils lateinit var userUtils: UserUtils
@Inject @Inject
lateinit internal var appPreferences: AppPreferences lateinit var appPreferences: AppPreferences
@Inject @Inject
lateinit internal var context: Context lateinit var context: Context
@Inject @Inject
lateinit internal var eventBus: EventBus lateinit var eventBus: EventBus
@BindView(R.id.messagesListView) @BindView(R.id.messagesListView)
lateinit internal var messagesListView: MessagesList lateinit var messagesListView: MessagesList
@BindView(R.id.messageInputView) @BindView(R.id.messageInputView)
lateinit internal var messageInputView: MessageInput lateinit var messageInputView: MessageInput
@BindView(R.id.messageInput) @BindView(R.id.messageInput)
lateinit internal var messageInput: EmojiEditText lateinit var messageInput: EmojiEditText
@BindView(R.id.popupBubbleView) @BindView(R.id.popupBubbleView)
lateinit internal var popupBubble: PopupBubble lateinit var popupBubble: PopupBubble
@BindView(R.id.progressBar) @BindView(R.id.progressBar)
lateinit internal var loadingProgressBar: ProgressBar lateinit var loadingProgressBar: ProgressBar
@BindView(R.id.smileyButton) @BindView(R.id.smileyButton)
lateinit internal var smileyButton: ImageButton lateinit var smileyButton: ImageButton
@BindView(R.id.lobby_view) @BindView(R.id.lobby_view)
lateinit internal var lobbyView: RelativeLayout lateinit var lobbyView: RelativeLayout
@BindView(R.id.lobby_text_view) @BindView(R.id.lobby_text_view)
lateinit internal var conversationLobbyText: TextView lateinit var conversationLobbyText: TextView
private val disposableList = ArrayList<Disposable>() private val disposableList = ArrayList<Disposable>()
private var roomToken: String? = null private var roomToken: String? = null
private val conversationUser: UserEntity? private val conversationUser: UserEntity?
@ -425,10 +425,10 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
} }
}) })
messageInputView!!.setAttachmentsListener { showBrowserScreen(BrowserController.BrowserType.DAV_BROWSER) } messageInputView.setAttachmentsListener { showBrowserScreen(BrowserController.BrowserType.DAV_BROWSER) }
messageInputView!!.button.setOnClickListener { v -> submitMessage() } messageInputView.button.setOnClickListener { v -> submitMessage() }
messageInputView!!.button.contentDescription = resources!! messageInputView.button.contentDescription = resources!!
.getString(R.string.nc_description_send_message_button) .getString(R.string.nc_description_send_message_button)
if (currentConversation != null && currentConversation!!.roomId != null) { if (currentConversation != null && currentConversation!!.roomId != null) {
@ -560,7 +560,7 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
ApplicationWideCurrentRoomHolder.getInstance().isInCall = false ApplicationWideCurrentRoomHolder.getInstance().isInCall = false
ApplicationWideCurrentRoomHolder.getInstance().userInRoom = conversationUser ApplicationWideCurrentRoomHolder.getInstance().userInRoom = conversationUser
isLinkPreviewAllowed = appPreferences!!.areLinkPreviewsAllowed isLinkPreviewAllowed = appPreferences.areLinkPreviewsAllowed
emojiPopup = EmojiPopup.Builder.fromRootView(view).setOnEmojiPopupShownListener { emojiPopup = EmojiPopup.Builder.fromRootView(view).setOnEmojiPopupShownListener {
if (resources != null) { if (resources != null) {
@ -570,7 +570,7 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
}.setOnEmojiPopupDismissListener { }.setOnEmojiPopupDismissListener {
smileyButton.setColorFilter(resources!!.getColor(R.color.emoji_icons), smileyButton.setColorFilter(resources!!.getColor(R.color.emoji_icons),
PorterDuff.Mode.SRC_IN) PorterDuff.Mode.SRC_IN)
}.setOnEmojiClickListener { emoji, imageView -> messageInput!!.editableText.append(" ") }.build(messageInput!!) }.setOnEmojiClickListener { emoji, imageView -> messageInput.editableText.append(" ") }.build(messageInput)
if (activity != null) { if (activity != null) {
KeyboardUtils(activity!!, getView(), false) KeyboardUtils(activity!!, getView(), false)
@ -598,7 +598,7 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
override fun onDetach(view: View) { override fun onDetach(view: View) {
super.onDetach(view) super.onDetach(view)
ApplicationWideCurrentRoomHolder.getInstance().clear() ApplicationWideCurrentRoomHolder.getInstance().clear()
eventBus!!.unregister(this) eventBus.unregister(this)
if (activity != null) { if (activity != null) {
activity!!.findViewById<View>(R.id.toolbar).setOnClickListener(null) activity!!.findViewById<View>(R.id.toolbar).setOnClickListener(null)
@ -616,7 +616,7 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
} }
override fun getTitle(): String? { override fun getTitle(): String? {
if (currentConversation != null) { if (currentConversation != null && currentConversation!!.displayName != null) {
return EmojiCompat.get().process(currentConversation!!.displayName).toString() return EmojiCompat.get().process(currentConversation!!.displayName).toString()
} else { } else {
return "" return ""
@ -648,7 +648,7 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
private fun startPing() { private fun startPing() {
if (!conversationUser!!.hasSpreedFeatureCapability("no-ping")) { if (!conversationUser!!.hasSpreedFeatureCapability("no-ping")) {
ncApi!!.pingCall(credentials, ApiUtils.getUrlForCallPing(conversationUser.baseUrl, roomToken)) ncApi.pingCall(credentials, ApiUtils.getUrlForCallPing(conversationUser.baseUrl, roomToken))
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.repeatWhen { observable -> observable.delay(5000, TimeUnit.MILLISECONDS) } .repeatWhen { observable -> observable.delay(5000, TimeUnit.MILLISECONDS) }
@ -740,7 +740,7 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
} }
private fun leaveRoom() { private fun leaveRoom() {
ncApi!!.leaveRoom(credentials, ncApi.leaveRoom(credentials,
ApiUtils.getUrlForSettingMyselfAsActiveParticipant(conversationUser!!.baseUrl, ApiUtils.getUrlForSettingMyselfAsActiveParticipant(conversationUser!!.baseUrl,
roomToken)) roomToken))
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
@ -789,7 +789,7 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
} }
private fun submitMessage() { private fun submitMessage() {
val editable = messageInput!!.editableText val editable = messageInput.editableText
val mentionSpans = editable.getSpans(0, editable.length, val mentionSpans = editable.getSpans(0, editable.length,
Spans.MentionChipSpan::class.java) Spans.MentionChipSpan::class.java)
var mentionSpan: Spans.MentionChipSpan var mentionSpan: Spans.MentionChipSpan
@ -802,13 +802,13 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
editable.replace(editable.getSpanStart(mentionSpan), editable.getSpanEnd(mentionSpan), "@$mentionId") editable.replace(editable.getSpanStart(mentionSpan), editable.getSpanEnd(mentionSpan), "@$mentionId")
} }
messageInput!!.setText("") messageInput.setText("")
sendMessage(editable) sendMessage(editable)
} }
private fun sendMessage(message: CharSequence) { private fun sendMessage(message: CharSequence) {
ncApi!!.sendChatMessage(credentials, ApiUtils.getUrlForChat(conversationUser!!.baseUrl, roomToken), ncApi.sendChatMessage(credentials, ApiUtils.getUrlForChat(conversationUser!!.baseUrl, roomToken),
message, conversationUser.displayName) message, conversationUser.displayName)
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
@ -820,13 +820,11 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
override fun onNext(genericOverall: GenericOverall) { override fun onNext(genericOverall: GenericOverall) {
myFirstMessage = message myFirstMessage = message
if (popupBubble != null && popupBubble!!.isShown) { if (popupBubble.isShown) {
popupBubble!!.hide() popupBubble.hide()
} }
if (messagesListView != null) { messagesListView.smoothScrollToPosition(0)
messagesListView!!.smoothScrollToPosition(0)
}
} }
override fun onError(e: Throwable) { override fun onError(e: Throwable) {
@ -835,11 +833,11 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
if (Integer.toString(code).startsWith("2")) { if (Integer.toString(code).startsWith("2")) {
myFirstMessage = message myFirstMessage = message
if (popupBubble != null && popupBubble!!.isShown) { if (popupBubble.isShown) {
popupBubble!!.hide() popupBubble.hide()
} }
messagesListView!!.smoothScrollToPosition(0) messagesListView.smoothScrollToPosition(0)
} }
} }
} }
@ -926,7 +924,7 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
}) })
} else { } else {
ncApi!!.pullChatMessages(credentials, ncApi.pullChatMessages(credentials,
ApiUtils.getUrlForChat(conversationUser!!.baseUrl, roomToken), fieldMap) ApiUtils.getUrlForChat(conversationUser!!.baseUrl, roomToken), fieldMap)
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
@ -1206,9 +1204,7 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
val clipboardManager = activity!!.getSystemService(Context.CLIPBOARD_SERVICE) as android.content.ClipboardManager val clipboardManager = activity!!.getSystemService(Context.CLIPBOARD_SERVICE) as android.content.ClipboardManager
val clipData = android.content.ClipData.newPlainText( val clipData = android.content.ClipData.newPlainText(
resources!!.getString(R.string.nc_app_name), message.text) resources!!.getString(R.string.nc_app_name), message.text)
if (clipboardManager != null) { clipboardManager.primaryClip = clipData
clipboardManager.primaryClip = clipData
}
} }
} }

View File

@ -22,7 +22,7 @@
buildscript { buildscript {
ext { ext {
kotlinVersion = '1.3.41' kotlinVersion = '1.3.50'
} }
repositories { repositories {