mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-19 19:49:33 +01:00
Add support for chat push
Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
parent
62cf45778e
commit
0d65cfbecd
@ -213,6 +213,7 @@ public class CallActivity extends AppCompatActivity {
|
||||
private boolean audioOn = false;
|
||||
|
||||
private boolean isMultiSession = false;
|
||||
private boolean hasChatSupport = false;
|
||||
private boolean isVoiceOnlyCall = false;
|
||||
|
||||
private Handler handler = new Handler();
|
||||
@ -858,6 +859,14 @@ public class CallActivity extends AppCompatActivity {
|
||||
.getCapabilities().getSpreedCapability()
|
||||
.getFeatures().contains("multi-room-users");
|
||||
|
||||
hasChatSupport = capabilitiesOverall.getOcs().getData()
|
||||
.getCapabilities().getSpreedCapability() != null &&
|
||||
capabilitiesOverall.getOcs().getData()
|
||||
.getCapabilities().getSpreedCapability()
|
||||
.getFeatures() != null && capabilitiesOverall.getOcs().getData()
|
||||
.getCapabilities().getSpreedCapability()
|
||||
.getFeatures().contains("chat-v2");
|
||||
|
||||
joinRoomAndCall();
|
||||
}
|
||||
|
||||
@ -887,7 +896,7 @@ public class CallActivity extends AppCompatActivity {
|
||||
|
||||
@Override
|
||||
public void onNext(CallOverall callOverall) {
|
||||
performCall(callOverall.getOcs().getData().getSessionId());
|
||||
performCall();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -901,11 +910,11 @@ public class CallActivity extends AppCompatActivity {
|
||||
}
|
||||
});
|
||||
} else {
|
||||
performCall(callSession);
|
||||
performCall();
|
||||
}
|
||||
}
|
||||
|
||||
private void performCall(@Nullable String callSessionId) {
|
||||
private void performCall() {
|
||||
ncApi.joinCall(credentials,
|
||||
ApiUtils.getUrlForCall(baseUrl, roomToken))
|
||||
.subscribeOn(Schedulers.newThread())
|
||||
@ -922,33 +931,35 @@ public class CallActivity extends AppCompatActivity {
|
||||
inCall = true;
|
||||
|
||||
// start pinging the call
|
||||
ncApi.pingCall(credentials, ApiUtils.getUrlForCallPing(baseUrl, roomToken))
|
||||
.subscribeOn(Schedulers.newThread())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.repeatWhen(observable -> observable.delay(5000, TimeUnit.MILLISECONDS))
|
||||
.takeWhile(observable -> inCall)
|
||||
.retry(3, observable -> inCall)
|
||||
.subscribe(new Observer<GenericOverall>() {
|
||||
@Override
|
||||
public void onSubscribe(Disposable d) {
|
||||
pingDisposable = d;
|
||||
}
|
||||
if (!hasChatSupport) {
|
||||
ncApi.pingCall(credentials, ApiUtils.getUrlForCallPing(baseUrl, roomToken))
|
||||
.subscribeOn(Schedulers.newThread())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.repeatWhen(observable -> observable.delay(5000, TimeUnit.MILLISECONDS))
|
||||
.takeWhile(observable -> inCall)
|
||||
.retry(3, observable -> inCall)
|
||||
.subscribe(new Observer<GenericOverall>() {
|
||||
@Override
|
||||
public void onSubscribe(Disposable d) {
|
||||
pingDisposable = d;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNext(GenericOverall genericOverall) {
|
||||
@Override
|
||||
public void onNext(GenericOverall genericOverall) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable e) {
|
||||
dispose(pingDisposable);
|
||||
}
|
||||
@Override
|
||||
public void onError(Throwable e) {
|
||||
dispose(pingDisposable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onComplete() {
|
||||
dispose(pingDisposable);
|
||||
}
|
||||
});
|
||||
@Override
|
||||
public void onComplete() {
|
||||
dispose(pingDisposable);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Start pulling signaling messages
|
||||
String urlToken = null;
|
||||
|
@ -21,6 +21,7 @@
|
||||
package com.nextcloud.talk.activities;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
@ -33,7 +34,6 @@ import com.bluelinelabs.conductor.Conductor;
|
||||
import com.bluelinelabs.conductor.Router;
|
||||
import com.bluelinelabs.conductor.RouterTransaction;
|
||||
import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler;
|
||||
import com.bluelinelabs.conductor.internal.NoOpControllerChangeHandler;
|
||||
import com.nextcloud.talk.R;
|
||||
import com.nextcloud.talk.application.NextcloudTalkApplication;
|
||||
import com.nextcloud.talk.controllers.ChatController;
|
||||
@ -53,6 +53,7 @@ import org.greenrobot.eventbus.ThreadMode;
|
||||
import java.security.cert.CertificateParsingException;
|
||||
import java.security.cert.X509Certificate;
|
||||
import java.text.DateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@ -108,37 +109,47 @@ public final class MainActivity extends AppCompatActivity implements ActionBarPr
|
||||
}
|
||||
|
||||
if (getIntent().hasExtra(BundleKeys.KEY_FROM_NOTIFICATION_START_CALL)) {
|
||||
router.setRoot(RouterTransaction.with(new MagicBottomNavigationController())
|
||||
.pushChangeHandler(new NoOpControllerChangeHandler())
|
||||
.popChangeHandler(new NoOpControllerChangeHandler()));
|
||||
|
||||
router.pushController(RouterTransaction.with(new ChatController(getIntent().getExtras()))
|
||||
.pushChangeHandler(new HorizontalChangeHandler())
|
||||
.popChangeHandler(new HorizontalChangeHandler()));
|
||||
|
||||
} else {
|
||||
|
||||
if (!router.hasRootController()) {
|
||||
if (hasDb) {
|
||||
if (userUtils.anyUserExists()) {
|
||||
router.setRoot(RouterTransaction.with(new MagicBottomNavigationController())
|
||||
.pushChangeHandler(new HorizontalChangeHandler())
|
||||
.popChangeHandler(new HorizontalChangeHandler()));
|
||||
} else {
|
||||
router.setRoot(RouterTransaction.with(new ServerSelectionController())
|
||||
.pushChangeHandler(new HorizontalChangeHandler())
|
||||
.popChangeHandler(new HorizontalChangeHandler()));
|
||||
}
|
||||
onNewIntent(getIntent());
|
||||
} else if (!router.hasRootController()) {
|
||||
if (hasDb) {
|
||||
if (userUtils.anyUserExists()) {
|
||||
router.setRoot(RouterTransaction.with(new MagicBottomNavigationController())
|
||||
.pushChangeHandler(new HorizontalChangeHandler())
|
||||
.popChangeHandler(new HorizontalChangeHandler()));
|
||||
} else {
|
||||
router.setRoot(RouterTransaction.with(new ServerSelectionController())
|
||||
.pushChangeHandler(new HorizontalChangeHandler())
|
||||
.popChangeHandler(new HorizontalChangeHandler()));
|
||||
|
||||
}
|
||||
} else {
|
||||
router.setRoot(RouterTransaction.with(new ServerSelectionController())
|
||||
.pushChangeHandler(new HorizontalChangeHandler())
|
||||
.popChangeHandler(new HorizontalChangeHandler()));
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onNewIntent(Intent intent) {
|
||||
super.onNewIntent(intent);
|
||||
|
||||
if (intent.hasExtra(BundleKeys.KEY_FROM_NOTIFICATION_START_CALL)) {
|
||||
List<RouterTransaction> newBackstack = new ArrayList<>();
|
||||
|
||||
newBackstack.add(RouterTransaction.with(new MagicBottomNavigationController())
|
||||
.pushChangeHandler(new HorizontalChangeHandler())
|
||||
.popChangeHandler(new HorizontalChangeHandler()));
|
||||
|
||||
router.setBackstack(newBackstack, new HorizontalChangeHandler());
|
||||
|
||||
router.pushController(RouterTransaction.with(new ChatController(intent.getExtras()))
|
||||
.pushChangeHandler(new HorizontalChangeHandler())
|
||||
.popChangeHandler(new HorizontalChangeHandler()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
if (!router.handleBack()) {
|
||||
|
@ -164,7 +164,7 @@ public class ChatController extends BaseController implements MessagesListAdapte
|
||||
NextcloudTalkApplication.getSharedApplication().getComponentApplication().inject(this);
|
||||
|
||||
UserEntity currentUser = userUtils.getCurrentUser();
|
||||
this.conversationName = args.getString(BundleKeys.KEY_CONVERSATION_NAME);
|
||||
this.conversationName = args.getString(BundleKeys.KEY_CONVERSATION_NAME, "");
|
||||
if (args.containsKey(BundleKeys.KEY_USER_ENTITY)) {
|
||||
this.conversationUser = Parcels.unwrap(args.getParcelable(BundleKeys.KEY_USER_ENTITY));
|
||||
} else {
|
||||
@ -213,6 +213,8 @@ public class ChatController extends BaseController implements MessagesListAdapte
|
||||
for (Room room : roomsOverall.getOcs().getData()) {
|
||||
if (roomToken.equals(room.getRoomId())) {
|
||||
roomToken = room.getToken();
|
||||
conversationName = room.getDisplayName();
|
||||
setTitle();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -93,6 +93,9 @@ public class NotificationJob extends Job {
|
||||
DecryptedPushMessage decryptedPushMessage = LoganSquare.parse(new String(decryptedSubject),
|
||||
DecryptedPushMessage.class);
|
||||
|
||||
boolean hasChatSupport = signatureVerification.getUserEntity().hasSpreedCapabilityWithName
|
||||
("chat-v2");
|
||||
|
||||
if (decryptedPushMessage.getApp().equals("spreed")) {
|
||||
int smallIcon;
|
||||
Bitmap largeIcon;
|
||||
@ -103,8 +106,6 @@ public class NotificationJob extends Job {
|
||||
|
||||
Bundle bundle = new Bundle();
|
||||
|
||||
boolean hasChatSupport = signatureVerification.getUserEntity().hasSpreedCapabilityWithName
|
||||
("chat-v2");
|
||||
|
||||
if (hasChatSupport) {
|
||||
intent = new Intent(context, MainActivity.class);
|
||||
@ -118,21 +119,13 @@ public class NotificationJob extends Job {
|
||||
bundle.putParcelable(BundleKeys.KEY_USER_ENTITY, Parcels.wrap(signatureVerification
|
||||
.getUserEntity()));
|
||||
|
||||
|
||||
if (hasChatSupport) {
|
||||
if (decryptedPushMessage.getType().equals("call")) {
|
||||
bundle.putBoolean(BundleKeys.KEY_FROM_NOTIFICATION_START_CALL, true);
|
||||
} else {
|
||||
bundle.putBoolean(BundleKeys.KEY_FROM_NOTIFICATION_START_CALL, false);
|
||||
}
|
||||
} else {
|
||||
bundle.putBoolean(BundleKeys.KEY_FROM_NOTIFICATION_START_CALL, true);
|
||||
}
|
||||
bundle.putBoolean(BundleKeys.KEY_FROM_NOTIFICATION_START_CALL,
|
||||
decryptedPushMessage.getType().equals("call") || !hasChatSupport);
|
||||
|
||||
intent.putExtras(bundle);
|
||||
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(context,
|
||||
0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
|
||||
0, intent, PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_ONE_SHOT);
|
||||
|
||||
NotificationManager notificationManager =
|
||||
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
@ -150,9 +143,6 @@ public class NotificationJob extends Job {
|
||||
priority = Notification.PRIORITY_HIGH;
|
||||
break;
|
||||
case "chat":
|
||||
if (hasChatSupport) {
|
||||
bundle.putBoolean(BundleKeys.KEY_FROM_NOTIFICATION_START_CALL, false);
|
||||
}
|
||||
smallIcon = R.drawable.ic_chat_black_24dp;
|
||||
category = Notification.CATEGORY_MESSAGE;
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user