diff --git a/.idea/misc.xml b/.idea/misc.xml
index be2c23c15..b36c7ce25 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/.idea/modules.xml b/.idea/modules.xml
index ae4d0b4f0..dd4cd1d1b 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -4,7 +4,8 @@
-
+
+
diff --git a/app/build.gradle b/app/build.gradle
index 217b106c1..2c976dea8 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -39,8 +39,8 @@ android {
targetSdkVersion 28
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
- versionCode 80001090 // 0-50=Alpha / 51-98=RC / 90-99=stable
- versionName "8.0.10"
+ versionCode 80010000 // 0-50=Alpha / 51-98=RC / 90-99=stable
+ versionName "8.1.0 Alhpa 1"
flavorDimensions "default"
renderscriptTargetApi 19
diff --git a/app/src/main/java/com/nextcloud/talk/activities/MagicCallActivity.kt b/app/src/main/java/com/nextcloud/talk/activities/MagicCallActivity.kt
index 0a864f24b..5075ebace 100644
--- a/app/src/main/java/com/nextcloud/talk/activities/MagicCallActivity.kt
+++ b/app/src/main/java/com/nextcloud/talk/activities/MagicCallActivity.kt
@@ -37,16 +37,26 @@ import com.nextcloud.talk.R
import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.controllers.CallController
import com.nextcloud.talk.controllers.CallNotificationController
+import com.nextcloud.talk.controllers.ChatController
import com.nextcloud.talk.events.ConfigurationChangeEvent
import com.nextcloud.talk.utils.bundle.BundleKeys
+import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_ID
+import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN
+import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_USER_ENTITY
@AutoInjector(NextcloudTalkApplication::class)
class MagicCallActivity : BaseActivity() {
+ private lateinit var chatController: ChatController
+
@BindView(R.id.controller_container)
lateinit var container: ViewGroup
+
+ @BindView(R.id.chatControllerView)
+ lateinit var chatContainer: ViewGroup
private var router: Router? = null
+ private var chatRouter: Router? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -76,6 +86,28 @@ class MagicCallActivity : BaseActivity() {
.popChangeHandler(HorizontalChangeHandler()))
}
}
+
+ val extras = intent.extras ?: Bundle()
+ extras.putBoolean("showToggleChat", true)
+
+ chatController = ChatController(extras)
+ chatRouter = Conductor.attachRouter(this, chatContainer, savedInstanceState)
+ chatRouter!!.setRoot(RouterTransaction.with(chatController)
+ .pushChangeHandler(HorizontalChangeHandler())
+ .popChangeHandler(HorizontalChangeHandler()))
+ }
+
+ fun showChat() {
+ chatContainer.visibility = View.VISIBLE
+ container.visibility = View.GONE
+ chatController.wasDetached = false
+ chatController.pullChatMessages(1)
+ }
+
+ fun showCall() {
+ container.visibility = View.VISIBLE
+ chatContainer.visibility = View.GONE
+ chatController.wasDetached = true
}
override fun onConfigurationChanged(newConfig: Configuration) {
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/CallController.java b/app/src/main/java/com/nextcloud/talk/controllers/CallController.java
index 7f86bec98..75e962bdd 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/CallController.java
+++ b/app/src/main/java/com/nextcloud/talk/controllers/CallController.java
@@ -51,6 +51,7 @@ import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.interfaces.DraweeController;
import com.facebook.drawee.view.SimpleDraweeView;
import com.nextcloud.talk.R;
+import com.nextcloud.talk.activities.MagicCallActivity;
import com.nextcloud.talk.api.NcApi;
import com.nextcloud.talk.application.NextcloudTalkApplication;
import com.nextcloud.talk.controllers.base.BaseController;
@@ -294,7 +295,12 @@ public class CallController extends BaseController {
}
powerManagerUtils = new PowerManagerUtils();
- setCallState(CallStatus.CALLING);
+
+ if (args.getString("state", "").equalsIgnoreCase("resume")) {
+ setCallState(CallStatus.IN_CONVERSATION);
+ } else {
+ setCallState(CallStatus.CALLING);
+ }
}
@Override
@@ -720,6 +726,11 @@ public class CallController extends BaseController {
}
}
}
+
+ @OnClick(R.id.callControlToggleChat)
+ void onToggleChatClick() {
+ ((MagicCallActivity) getActivity()).showChat();
+ }
@OnClick(R.id.callControlHangupView)
void onHangupClick() {
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt
index 6fc22d45a..fd3206aab 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt
+++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt
@@ -27,8 +27,6 @@ import android.content.res.Resources
import android.graphics.Bitmap
import android.graphics.PorterDuff
import android.graphics.drawable.ColorDrawable
-import android.graphics.drawable.Drawable
-import android.os.Build
import android.os.Bundle
import android.os.Handler
import android.os.Parcelable
@@ -58,6 +56,7 @@ import com.facebook.common.executors.UiThreadImmediateExecutorService
import com.facebook.common.references.CloseableReference
import com.facebook.datasource.DataSource
import com.facebook.drawee.backends.pipeline.Fresco
+import com.facebook.drawee.view.SimpleDraweeView
import com.facebook.imagepipeline.datasource.BaseBitmapDataSubscriber
import com.facebook.imagepipeline.image.CloseableImage
import com.google.android.flexbox.FlexboxLayout
@@ -82,6 +81,9 @@ import com.nextcloud.talk.models.json.mention.Mention
import com.nextcloud.talk.presenters.MentionAutocompletePresenter
import com.nextcloud.talk.utils.*
import com.nextcloud.talk.utils.bundle.BundleKeys
+import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_ID
+import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN
+import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_USER_ENTITY
import com.nextcloud.talk.utils.database.user.UserUtils
import com.nextcloud.talk.utils.preferences.AppPreferences
import com.nextcloud.talk.utils.singletons.ApplicationWideCurrentRoomHolder
@@ -160,6 +162,9 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
@JvmField
@BindView(R.id.quotedChatMessageView)
var quotedChatMessageView: RelativeLayout? = null
+ @BindView(R.id.callControlToggleChat)
+ @JvmField
+ var toggleChat: SimpleDraweeView? = null
var roomToken: String? = null
val conversationUser: UserEntity?
val roomPassword: String
@@ -390,6 +395,15 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
}
}
+ if (args.containsKey("showToggleChat") && args.getBoolean("showToggleChat")) {
+ toggleChat?.visibility = View.VISIBLE
+ wasDetached = true
+ }
+
+ toggleChat?.setOnClickListener{
+ (activity as MagicCallActivity).showCall()
+ }
+
messagesListView?.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
super.onScrollStateChanged(recyclerView, newState)
@@ -752,7 +766,7 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
if (isFirstMessagesProcessing) {
pullChatMessages(0)
} else {
- pullChatMessages(1)
+ pullChatMessages(1, 0)
}
if (magicWebSocketInstance != null) {
@@ -854,7 +868,7 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
messageInput?.setText("")
val replyMessageId: Int? = view?.findViewById(R.id.quotedChatMessageView)?.tag as Int?
- sendMessage(editable, if (view?.findViewById(R.id.quotedChatMessageView)?.visibility == View.VISIBLE) replyMessageId else null )
+ sendMessage(editable, if (view?.findViewById(R.id.quotedChatMessageView)?.visibility == View.VISIBLE) replyMessageId else null)
cancelReply()
}
}
@@ -918,7 +932,7 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
}
}
- private fun pullChatMessages(lookIntoFuture: Int) {
+ fun pullChatMessages(lookIntoFuture: Int, setReadMarker: Int = 1) {
if (!inConversation) {
return
}
@@ -940,16 +954,17 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
}
}
- var timeout = 30
- if (!lookingIntoFuture) {
- timeout = 0;
+ val timeout = if (lookingIntoFuture) {
+ 30
+ } else {
+ 0
}
fieldMap["timeout"] = timeout
fieldMap["lookIntoFuture"] = lookIntoFuture
fieldMap["limit"] = 100
- fieldMap["setReadMarker"] = 1
+ fieldMap["setReadMarker"] = setReadMarker
val lastKnown: Int
if (lookIntoFuture > 0) {
@@ -974,7 +989,7 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
override fun onNext(response: Response<*>) {
if (response.code() == 304) {
- pullChatMessages(1)
+ pullChatMessages(1, setReadMarker)
} else if (response.code() == 412) {
futurePreconditionFailed = true
@@ -1127,7 +1142,7 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
if (adapter != null) {
chatMessage.isGrouped = (adapter!!.isPreviousSameAuthor(chatMessage
- .actorId, -1) && adapter!!.getSameAuthorLastMessagesCount(chatMessage.actorId) % 5 > 0)
+ .actorId, -1) && adapter!!.getSameAuthorLastMessagesCount(chatMessage.actorId) % 5 > 0)
chatMessage.isOneToOneConversation = (currentConversation?.type == Conversation.ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL)
adapter?.addToStart(chatMessage, shouldScroll)
}
@@ -1298,7 +1313,8 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
messageInputView?.findViewById(R.id.quotedMessage)?.ellipsize = TextUtils.TruncateAt.END
messageInputView?.findViewById(R.id.quotedMessage)?.text = it.text
messageInputView?.findViewById(R.id.quotedMessageTime)?.text = DateFormatter.format(it.createdAt, DateFormatter.Template.TIME)
- messageInputView?.findViewById(R.id.quotedMessageAuthor)?.text = it.actorDisplayName ?: context!!.getText(R.string.nc_nick_guest)
+ messageInputView?.findViewById(R.id.quotedMessageAuthor)?.text = it.actorDisplayName
+ ?: context!!.getText(R.string.nc_nick_guest)
conversationUser?.let { currentUser ->
@@ -1307,7 +1323,7 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
transformations(CircleCropTransformation())
}
- chatMessage.imageUrl?.let{ previewImageUrl ->
+ chatMessage.imageUrl?.let { previewImageUrl ->
messageInputView?.findViewById(R.id.quotedMessageImage)?.visibility = View.VISIBLE
val px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 96f, resources?.displayMetrics)
@@ -1387,14 +1403,14 @@ class ChatController(args: Bundle) : BaseController(args), MessagesListAdapter
bundle.putString(BundleKeys.KEY_ROOM_ID, roomOverall.ocs.data.roomId)
if (conversationUser != null) {
- if (conversationUser.hasSpreedFeatureCapability("chat-v2")) {
- bundle.putParcelable(BundleKeys.KEY_ACTIVE_CONVERSATION,
- Parcels.wrap(roomOverall.ocs.data))
- conversationIntent.putExtras(bundle)
+ if (conversationUser.hasSpreedFeatureCapability("chat-v2")) {
+ bundle.putParcelable(BundleKeys.KEY_ACTIVE_CONVERSATION,
+ Parcels.wrap(roomOverall.ocs.data))
+ conversationIntent.putExtras(bundle)
- ConductorRemapping.remapChatController(router, conversationUser.id,
- roomOverall.ocs.data.token, bundle, false)
- }
+ ConductorRemapping.remapChatController(router, conversationUser.id,
+ roomOverall.ocs.data.token, bundle, false)
+ }
} else {
conversationIntent.putExtras(bundle)
diff --git a/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java b/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java
index e1949580b..909b1ccd8 100644
--- a/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java
+++ b/app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.java
@@ -32,24 +32,12 @@ import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
-import android.os.VibrationEffect;
import android.os.Vibrator;
import android.service.notification.StatusBarNotification;
import android.text.TextUtils;
import android.util.Base64;
import android.util.Log;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.core.app.NotificationCompat;
-import androidx.core.app.NotificationManagerCompat;
-import androidx.core.app.Person;
-import androidx.core.graphics.drawable.IconCompat;
-import androidx.emoji.text.EmojiCompat;
-import androidx.work.Data;
-import androidx.work.Worker;
-import androidx.work.WorkerParameters;
-
import com.bluelinelabs.logansquare.LoganSquare;
import com.facebook.common.executors.UiThreadImmediateExecutorService;
import com.facebook.common.references.CloseableReference;
@@ -84,7 +72,6 @@ import com.nextcloud.talk.utils.bundle.BundleKeys;
import com.nextcloud.talk.utils.database.arbitrarystorage.ArbitraryStorageUtils;
import com.nextcloud.talk.utils.preferences.AppPreferences;
import com.nextcloud.talk.utils.singletons.ApplicationWideCurrentRoomHolder;
-import com.vanniktech.emoji.emoji.Emoji;
import org.parceler.Parcels;
@@ -100,6 +87,16 @@ import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException;
import javax.inject.Inject;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.core.app.NotificationCompat;
+import androidx.core.app.NotificationManagerCompat;
+import androidx.core.app.Person;
+import androidx.core.graphics.drawable.IconCompat;
+import androidx.emoji.text.EmojiCompat;
+import androidx.work.Data;
+import androidx.work.Worker;
+import androidx.work.WorkerParameters;
import autodagger.AutoInjector;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
@@ -293,7 +290,7 @@ public class NotificationWorker extends Worker {
default:
// assuming one2one
if (decryptedPushMessage.getType().equals("chat") || decryptedPushMessage.getType().equals("room")) {
- largeIcon = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_chat_black_24dp);
+ largeIcon = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_comment);
} else {
largeIcon = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_call_black_24dp);
}
diff --git a/app/src/main/res/drawable/ic_chat_black_24dp.xml b/app/src/main/res/drawable/ic_chat_black_24dp.xml
deleted file mode 100644
index 65698dfb3..000000000
--- a/app/src/main/res/drawable/ic_chat_black_24dp.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
diff --git a/app/src/main/res/drawable/ic_comment.xml b/app/src/main/res/drawable/ic_comment.xml
new file mode 100644
index 000000000..808142bf3
--- /dev/null
+++ b/app/src/main/res/drawable/ic_comment.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_magic_call.xml b/app/src/main/res/layout/activity_magic_call.xml
index 342382ce4..7ea065fa5 100644
--- a/app/src/main/res/layout/activity_magic_call.xml
+++ b/app/src/main/res/layout/activity_magic_call.xml
@@ -30,4 +30,10 @@
android:layout_width="match_parent"
android:layout_height="match_parent" />
-
\ No newline at end of file
+
+
+
diff --git a/app/src/main/res/layout/controller_call.xml b/app/src/main/res/layout/controller_call.xml
index a18d8a7ae..a3a4cc342 100644
--- a/app/src/main/res/layout/controller_call.xml
+++ b/app/src/main/res/layout/controller_call.xml
@@ -55,6 +55,15 @@
android:layout_marginBottom="8dp"
android:animateLayoutChanges="true">
+
+
+
+
#D5D5D5
#E9FFFFFF
#111111
+ #7Fffffff
#eceff1