diff --git a/.idea/codeStyleSettings.xml b/.idea/codeStyleSettings.xml
new file mode 100644
index 000000000..a0ccdcbf2
--- /dev/null
+++ b/.idea/codeStyleSettings.xml
@@ -0,0 +1,229 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 3263ee4e7..05b7c99ac 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -77,8 +77,8 @@ dependencies {
implementation 'com.bluelinelabs:conductor-support:2.1.4'
implementation 'com.squareup.okhttp3:okhttp:3.9.0'
- implementation 'com.squareup.okhttp3:okhttp-urlconnection:3.6.0'
- implementation 'com.squareup.okhttp3:logging-interceptor:3.6.0'
+ implementation 'com.squareup.okhttp3:okhttp-urlconnection:3.9.0'
+ implementation 'com.squareup.okhttp3:logging-interceptor:3.9.0'
implementation 'com.bluelinelabs:logansquare:1.3.7'
annotationProcessor 'com.bluelinelabs:logansquare-compiler:1.3.7'
diff --git a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java
index 2e7b76bf6..c43da6c61 100644
--- a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java
+++ b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java
@@ -29,21 +29,27 @@ import android.content.res.Resources;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
+import android.util.Log;
import android.util.TypedValue;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
+import com.bluelinelabs.logansquare.LoganSquare;
import com.nextcloud.talk.R;
import com.nextcloud.talk.api.NcApi;
import com.nextcloud.talk.api.helpers.api.ApiHelper;
+import com.nextcloud.talk.api.models.json.call.CallOverall;
+import com.nextcloud.talk.api.models.json.generic.GenericOverall;
+import com.nextcloud.talk.api.models.json.participants.Participant;
+import com.nextcloud.talk.api.models.json.signaling.NCMessageWrapper;
+import com.nextcloud.talk.api.models.json.signaling.Signaling;
import com.nextcloud.talk.api.models.json.signaling.SignalingOverall;
import com.nextcloud.talk.application.NextcloudTalkApplication;
import com.nextcloud.talk.persistence.entities.UserEntity;
import com.nextcloud.talk.webrtc.MagicPeerConnectionObserver;
import com.nextcloud.talk.webrtc.MagicSdpObserver;
-import org.parceler.Parcels;
import org.webrtc.AudioSource;
import org.webrtc.AudioTrack;
import org.webrtc.Camera1Enumerator;
@@ -67,7 +73,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
-import io.reactivex.functions.BooleanSupplier;
+
import javax.inject.Inject;
import autodagger.AutoInjector;
@@ -76,6 +82,7 @@ import butterknife.ButterKnife;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
+import io.reactivex.functions.BooleanSupplier;
import io.reactivex.schedulers.Schedulers;
import ru.alexbykov.nopermission.PermissionHelper;
@@ -91,10 +98,6 @@ public class CallActivity extends AppCompatActivity {
@Inject
NcApi ncApi;
-
- private String roomToken;
- private UserEntity userEntity;
-
PeerConnectionFactory peerConnectionFactory;
MediaConstraints audioConstraints;
MediaConstraints videoConstraints;
@@ -104,20 +107,25 @@ public class CallActivity extends AppCompatActivity {
AudioSource audioSource;
AudioTrack localAudioTrack;
VideoCapturer videoCapturer;
-
VideoRenderer localRenderer;
VideoRenderer remoteRenderer;
-
PeerConnection localPeer, remotePeer;
-
- boolean inCall = true;
-
- BooleanSupplier booleanSupplier = () -> inCall;
-
+ boolean leavingCall = false;
+ BooleanSupplier booleanSupplier = () -> leavingCall;
Disposable signalingDisposable;
Disposable pingDisposable;
-
List iceServers;
+ private String roomToken;
+ private UserEntity userEntity;
+ private String callSession;
+
+ private String credentials;
+
+ private static int getSystemUiVisibility() {
+ int flags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN;
+ flags |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
+ return flags;
+ }
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -135,8 +143,10 @@ public class CallActivity extends AppCompatActivity {
ButterKnife.bind(this);
roomToken = getIntent().getExtras().getString("roomToken", "");
- userEntity = Parcels.unwrap(getIntent().getExtras().getParcelable("userEntity"));
+ userEntity = getIntent().getExtras().getParcelable("userEntity");
+ callSession = getIntent().getExtras().getString("callSession", "");
+ credentials = ApiHelper.getCredentials(userEntity.getUsername(), userEntity.getToken());
initViews();
PermissionHelper permissionHelper = new PermissionHelper(this);
@@ -157,8 +167,6 @@ public class CallActivity extends AppCompatActivity {
}
-
-
private VideoCapturer createVideoCapturer() {
videoCapturer = createCameraCapturer(new Camera1Enumerator(false));
return videoCapturer;
@@ -256,119 +264,202 @@ public class CallActivity extends AppCompatActivity {
sdpConstraints.optional.add(new MediaConstraints.KeyValuePair("internalSctpDataChannels", "true"));
sdpConstraints.optional.add(new MediaConstraints.KeyValuePair("DtlsSrtpKeyAgreement", "true"));
+ //creating localPeer
+ localPeer = peerConnectionFactory.createPeerConnection(iceServers, sdpConstraints,
+ new MagicPeerConnectionObserver() {
+ @Override
+ public void onIceCandidate(IceCandidate iceCandidate) {
+ super.onIceCandidate(iceCandidate);
+ onIceCandidateReceived(localPeer, iceCandidate);
+ }
+ });
+
//creating local mediastream
MediaStream stream = peerConnectionFactory.createLocalMediaStream("102");
stream.addTrack(localAudioTrack);
stream.addTrack(localVideoTrack);
localPeer.addStream(stream);
- // Start pulling signaling messages
- ncApi.pullSignalingMessages(ApiHelper.getCredentials(userEntity.getUsername(),
- userEntity.getToken()), ApiHelper.getUrlForSignaling(userEntity.getBaseUrl()))
+ ncApi.joinRoom(credentials, ApiHelper.getUrlForJoinRoom(userEntity.getBaseUrl(), roomToken))
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
- .repeatWhen(observable -> observable.delay(1500, TimeUnit.MILLISECONDS))
- .repeatUntil(booleanSupplier)
- .retry(3)
- .subscribe(new Observer() {
+ .subscribe(new Observer() {
@Override
public void onSubscribe(Disposable d) {
- signalingDisposable = d;
+
}
@Override
- public void onNext(SignalingOverall signalingOverall) {
- if (signalingOverall.getOcs().getSignalings() != null) {
- for (int i = 0; i < signalingOverall.getOcs().getSignalings().size(); i++) {
- try {
- receivedSignalingMessage(signalingOverall.getOcs().getSignalings().get(i));
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
+ public void onNext(CallOverall callOverall) {
+ ncApi.joinCall(credentials,
+ ApiHelper.getUrlForCall(userEntity.getBaseUrl(), roomToken))
+ .subscribeOn(Schedulers.newThread())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(GenericOverall genericOverall) {
+ callSession = callOverall.getOcs().getData().getSessionId();
+
+ // start pinging the call
+ ncApi.pingCall(ApiHelper.getCredentials(userEntity.getUsername(), userEntity.getToken()),
+ ApiHelper.getUrlForCallPing(userEntity.getBaseUrl(), roomToken))
+ .subscribeOn(Schedulers.newThread())
+ .observeOn(AndroidSchedulers.mainThread())
+ .repeatWhen(observable -> observable.delay(5000, TimeUnit.MILLISECONDS))
+ .repeatUntil(booleanSupplier)
+ .retry(3)
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(Disposable d) {
+ pingDisposable = d;
+ }
+
+ @Override
+ public void onNext(GenericOverall genericOverall) {
+
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ dispose(pingDisposable);
+ }
+
+ @Override
+ public void onComplete() {
+ dispose(pingDisposable);
+ }
+ });
+
+ // Start pulling signaling messages
+ ncApi.pullSignalingMessages(ApiHelper.getCredentials(userEntity.getUsername(),
+ userEntity.getToken()), ApiHelper.getUrlForSignaling(userEntity.getBaseUrl()))
+ .subscribeOn(Schedulers.newThread())
+ .observeOn(AndroidSchedulers.mainThread())
+ .repeatWhen(observable -> observable.delay(1500, TimeUnit.MILLISECONDS))
+ .repeatUntil(booleanSupplier)
+ .retry(3)
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(Disposable d) {
+ signalingDisposable = d;
+ }
+
+ @Override
+ public void onNext(SignalingOverall signalingOverall) {
+ if (signalingOverall.getOcs().getSignalings() != null) {
+ for (int i = 0; i < signalingOverall.getOcs().getSignalings().size(); i++) {
+ try {
+ receivedSignalingMessage(signalingOverall.getOcs().getSignalings().get(i));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ @Override
+ public void onError(Throwable e) {
+ dispose(signalingDisposable);
+ }
+
+ @Override
+ public void onComplete() {
+ dispose(signalingDisposable);
+ }
+ });
+
+
+ }
+
+ @Override
+ public void onError(Throwable e) {
+
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
}
@Override
public void onError(Throwable e) {
- dispose(signalingDisposable);
+
}
@Override
public void onComplete() {
- dispose(signalingDisposable);
+
}
});
+ }
- // start pinging the call
- ncApi.pingCall(ApiHelper.getCredentials(userEntity.getUsername(), userEntity.getToken()),
- ApiHelper.getUrlForCallPing(userEntity.getBaseUrl(), roomToken))
- .subscribeOn(Schedulers.newThread())
- .observeOn(AndroidSchedulers.mainThread())
- .repeatWhen(observable -> observable.delay(5000, TimeUnit.MILLISECONDS))
- .repeatUntil(booleanSupplier)
- .retry(3)
- .subscribe(new Observer() {
- @Override
- public void onSubscribe(Disposable d) {
- pingDisposable = d;
- }
+ private void receivedSignalingMessage(Signaling signaling) throws IOException {
+ String messageType = signaling.getType();
- @Override
- public void onNext(Void aVoid) {
+ if (leavingCall) {
+ return;
+ }
- }
-
- @Override
- public void onError(Throwable e) {
- dispose(pingDisposable);
- }
-
- @Override
- public void onComplete() {
- dispose(pingDisposable);
- }
- });
+ if ("usersInRoom".equals(messageType)) {
+ processUsersInRoom((List) signaling.getMessageWrapper());
+ } else if ("message".equals(messageType)) {
+ NCMessageWrapper ncSignalingMessage = LoganSquare.parse(signaling.getMessageWrapper().toString(),
+ NCMessageWrapper.class);
+ if (ncSignalingMessage.getSignalingMessage().getRoomType().equals("video")) {
+ switch (ncSignalingMessage.getSignalingMessage().getType()) {
+ case "offer":
+ break;
+ case "answer":
+ break;
+ case "candidate":
+ break;
+ default:
+ break;
+ }
+ }
+ } else {
+ Log.d(TAG, "Something went very very wrong");
+ }
+ }
+ private void processUsersInRoom(List users) {
}
private void call() {
- //creating localPeer
- localPeer = peerConnectionFactory.createPeerConnection(iceServers, sdpConstraints,
- new MagicPeerConnectionObserver() {
- @Override
- public void onIceCandidate(IceCandidate iceCandidate) {
- super.onIceCandidate(iceCandidate);
- onIceCandidateReceived(localPeer, iceCandidate);
- }
- });
//creating remotePeer
remotePeer = peerConnectionFactory.createPeerConnection(iceServers, sdpConstraints,
new MagicPeerConnectionObserver() {
- @Override
- public void onIceCandidate(IceCandidate iceCandidate) {
- super.onIceCandidate(iceCandidate);
- onIceCandidateReceived(remotePeer, iceCandidate);
- }
+ @Override
+ public void onIceCandidate(IceCandidate iceCandidate) {
+ super.onIceCandidate(iceCandidate);
+ onIceCandidateReceived(remotePeer, iceCandidate);
+ }
- public void onAddStream(MediaStream mediaStream) {
- super.onAddStream(mediaStream);
- gotRemoteStream(mediaStream);
- }
+ public void onAddStream(MediaStream mediaStream) {
+ super.onAddStream(mediaStream);
+ gotRemoteStream(mediaStream);
+ }
- @Override
- public void onIceGatheringChange(PeerConnection.IceGatheringState iceGatheringState) {
- super.onIceGatheringChange(iceGatheringState);
+ @Override
+ public void onIceGatheringChange(PeerConnection.IceGatheringState iceGatheringState) {
+ super.onIceGatheringChange(iceGatheringState);
- }
- });
+ }
+ });
//creating Offer
- localPeer.createOffer(new MagicSdpObserver(){
+ localPeer.createOffer(new MagicSdpObserver() {
@Override
public void onCreateSuccess(SessionDescription sessionDescription) {
//we have localOffer. Set it as local desc for localpeer and remote desc for remote peer.
@@ -390,10 +481,9 @@ public class CallActivity extends AppCompatActivity {
}, sdpConstraints);
}
-
private void hangup() {
- inCall = false;
+ leavingCall = true;
dispose(null);
@@ -413,6 +503,32 @@ public class CallActivity extends AppCompatActivity {
pipVideoView.release();
fullScreenVideoView.release();
+
+ String credentials = ApiHelper.getCredentials(userEntity.getUsername(), userEntity.getToken());
+ ncApi.leaveCall(credentials, ApiHelper.getUrlForCall(userEntity.getBaseUrl(), roomToken))
+ .subscribeOn(Schedulers.newThread())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Observer() {
+ @Override
+ public void onSubscribe(Disposable d) {
+
+ }
+
+ @Override
+ public void onNext(GenericOverall genericOverall) {
+
+ }
+
+ @Override
+ public void onError(Throwable e) {
+
+ }
+
+ @Override
+ public void onComplete() {
+
+ }
+ });
}
private void gotRemoteStream(MediaStream stream) {
@@ -444,14 +560,8 @@ public class CallActivity extends AppCompatActivity {
@Override
public void onDestroy() {
- hangup();
super.onDestroy();
- }
-
- private static int getSystemUiVisibility() {
- int flags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN;
- flags |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
- return flags;
+ hangup();
}
private void dispose(@Nullable Disposable disposable) {
diff --git a/app/src/main/java/com/nextcloud/talk/activities/MainActivity.java b/app/src/main/java/com/nextcloud/talk/activities/MainActivity.java
index 0decb6b18..bbec64027 100644
--- a/app/src/main/java/com/nextcloud/talk/activities/MainActivity.java
+++ b/app/src/main/java/com/nextcloud/talk/activities/MainActivity.java
@@ -111,7 +111,7 @@ public final class MainActivity extends AppCompatActivity implements ActionBarPr
}
public void showCertificateDialog(X509Certificate cert, MagicTrustManager magicTrustManager,
- @Nullable SslErrorHandler sslErrorHandler) {
+ @Nullable SslErrorHandler sslErrorHandler) {
DateFormat formatter = DateFormat.getDateInstance(DateFormat.LONG);
String validFrom = formatter.format(cert.getNotBefore());
String validUntil = formatter.format(cert.getNotAfter());
@@ -140,8 +140,8 @@ public final class MainActivity extends AppCompatActivity implements ActionBarPr
issuedBy, issuedFor, validFrom, validUntil);
new LovelyStandardDialog(this)
- .setTopColorRes(R.color.darkRed)
- .setNegativeButtonColorRes(R.color.darkRed)
+ .setTopColorRes(R.color.nc_darkRed)
+ .setNegativeButtonColorRes(R.color.nc_darkRed)
.setPositiveButtonColorRes(R.color.colorPrimaryDark)
.setIcon(R.drawable.ic_security_white_24dp)
.setTitle(R.string.nc_certificate_dialog_title)
diff --git a/app/src/main/java/com/nextcloud/talk/api/NcApi.java b/app/src/main/java/com/nextcloud/talk/api/NcApi.java
index 41bfe1cc8..736d3d4fa 100644
--- a/app/src/main/java/com/nextcloud/talk/api/NcApi.java
+++ b/app/src/main/java/com/nextcloud/talk/api/NcApi.java
@@ -133,23 +133,30 @@ public interface NcApi {
@GET
Observable getPeersForCall(@Header("Authorization") String authorization, @Url String url);
+ @POST
+ Observable joinRoom(@Header("Authorization") String authorization, @Url String url);
+
+ @DELETE
+ Observable leaveRoom(@Header("Authorization") String authorization, @Url String url);
+
/*
Server URL is: baseUrl + ocsApiVersion + spreedApiVersion + /call/callToken
*/
+
@POST
- Observable joinCall(@Header("Authorization") String authorization, @Url String url);
+ Observable joinCall(@Header("Authorization") String authorization, @Url String url);
+
+ /*
+ Server URL is: baseUrl + ocsApiVersion + spreedApiVersion + /call/callToken
+ */
+ @DELETE
+ Observable leaveCall(@Header("Authorization") String authorization, @Url String url);
/*
Server URL is: baseUrl + ocsApiVersion + spreedApiVersion + /call/callToken/ping
*/
@POST
- Observable pingCall(@Header("Authorization") String authorization, @Url String url);
-
- /*
- Server URL is: baseUrl + ocsApiVersion + spreedApiVersion + /call/callToken
- */
- @DELETE
- Observable leaveCall(@Header("Authorization") String authorization, @Url String url);
+ Observable pingCall(@Header("Authorization") String authorization, @Url String url);
/*
QueryMap items are as follows:
@@ -220,7 +227,7 @@ public interface NcApi {
*/
@DELETE
Observable unregisterDeviceForNotificationsWithProxy(@Header("Authorization") String authorization,
- @Url String url,
- @QueryMap Map fields);
+ @Url String url,
+ @QueryMap Map fields);
}
diff --git a/app/src/main/java/com/nextcloud/talk/api/helpers/api/ApiHelper.java b/app/src/main/java/com/nextcloud/talk/api/helpers/api/ApiHelper.java
index 9e2c1b470..ff66b1b8d 100644
--- a/app/src/main/java/com/nextcloud/talk/api/helpers/api/ApiHelper.java
+++ b/app/src/main/java/com/nextcloud/talk/api/helpers/api/ApiHelper.java
@@ -57,6 +57,10 @@ public class ApiHelper {
return retrofitBucket;
}
+ public static String getUrlForJoinRoom(String baseUrl, String token) {
+ return getRoom(baseUrl, token) + "/participants/active";
+ }
+
public static String getUrlForGetRooms(String baseUrl) {
return baseUrl + ocsApiVersion + spreedApiVersion + "/room";
}
@@ -115,6 +119,7 @@ public class ApiHelper {
public static String getUrlForCall(String baseUrl, String token) {
return baseUrl + ocsApiVersion + spreedApiVersion + "/call/" + token;
+
}
public static String getUrlForCallPing(String baseUrl, String token) {
diff --git a/app/src/main/java/com/nextcloud/talk/api/models/json/generic/GenericMeta.java b/app/src/main/java/com/nextcloud/talk/api/models/json/generic/GenericMeta.java
index 2626dc7d6..3c5b624bd 100644
--- a/app/src/main/java/com/nextcloud/talk/api/models/json/generic/GenericMeta.java
+++ b/app/src/main/java/com/nextcloud/talk/api/models/json/generic/GenericMeta.java
@@ -35,7 +35,7 @@ public class GenericMeta {
String status;
@JsonField(name = "statuscode")
- String statusCode;
+ int statusCode;
@JsonField(name = "message")
String message;
diff --git a/app/src/main/java/com/nextcloud/talk/api/models/json/participants/Participant.java b/app/src/main/java/com/nextcloud/talk/api/models/json/participants/Participant.java
index 030af8ee1..7a68ffcf9 100644
--- a/app/src/main/java/com/nextcloud/talk/api/models/json/participants/Participant.java
+++ b/app/src/main/java/com/nextcloud/talk/api/models/json/participants/Participant.java
@@ -42,4 +42,7 @@ public class Participant {
@JsonField(name = "roomId")
long roomId;
+
+ @JsonField(name = "inCall")
+ boolean inCall;
}
diff --git a/app/src/main/java/com/nextcloud/talk/api/models/json/signaling/Signaling.java b/app/src/main/java/com/nextcloud/talk/api/models/json/signaling/Signaling.java
index a78191f0c..b3a37c385 100644
--- a/app/src/main/java/com/nextcloud/talk/api/models/json/signaling/Signaling.java
+++ b/app/src/main/java/com/nextcloud/talk/api/models/json/signaling/Signaling.java
@@ -34,7 +34,7 @@ import lombok.Data;
public class Signaling {
@JsonField(name = "type")
String type;
- //can be NCSignalingMessage or List
+ //can be NCMessageWrapper or List
@JsonField(name = "data")
- Object signalingMessage;
+ Object messageWrapper;
}
diff --git a/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.java b/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.java
index 567c6cd2f..8e90df0eb 100644
--- a/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.java
+++ b/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.java
@@ -98,6 +98,7 @@ public class NextcloudTalkApplication extends MultiDexApplication {
new JobRequest.Builder(PushRegistrationJob.TAG).setUpdateCurrent(true).startNow().build().schedule();
new JobRequest.Builder(AccountRemovalJob.TAG).setUpdateCurrent(true).startNow().build().schedule();
+
}
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/CallsListController.java b/app/src/main/java/com/nextcloud/talk/controllers/CallsListController.java
index 571d0a693..1839b75c2 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/CallsListController.java
+++ b/app/src/main/java/com/nextcloud/talk/controllers/CallsListController.java
@@ -47,14 +47,13 @@ import android.view.inputmethod.EditorInfo;
import com.bluelinelabs.conductor.RouterTransaction;
import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler;
-import com.bluelinelabs.conductor.changehandler.SimpleSwapChangeHandler;
import com.bluelinelabs.conductor.changehandler.VerticalChangeHandler;
+import com.bluelinelabs.conductor.internal.NoOpControllerChangeHandler;
import com.nextcloud.talk.R;
import com.nextcloud.talk.activities.CallActivity;
import com.nextcloud.talk.adapters.items.RoomItem;
import com.nextcloud.talk.api.NcApi;
import com.nextcloud.talk.api.helpers.api.ApiHelper;
-import com.nextcloud.talk.api.models.json.call.CallOverall;
import com.nextcloud.talk.application.NextcloudTalkApplication;
import com.nextcloud.talk.controllers.base.BaseController;
import com.nextcloud.talk.persistence.entities.UserEntity;
@@ -73,9 +72,7 @@ import eu.davidea.flexibleadapter.FlexibleAdapter;
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
-import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
-import okhttp3.Credentials;
import retrofit2.HttpException;
@AutoInjector(NextcloudTalkApplication.class)
@@ -110,26 +107,15 @@ public class CallsListController extends BaseController implements SearchView.On
@Override
public boolean onItemClick(int position) {
if (roomItems.size() > position) {
+ overridePushHandler(new NoOpControllerChangeHandler());
+ overridePopHandler(new NoOpControllerChangeHandler());
RoomItem roomItem = roomItems.get(position);
- ncApi.joinCall(Credentials.basic(userEntity.getUsername(), userEntity.getToken()),
- ApiHelper.getUrlForCall(userEntity.getBaseUrl(), roomItem.getModel().getToken()))
- .subscribeOn(Schedulers.newThread())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new Consumer() {
- @Override
- public void accept(CallOverall callOverall) throws Exception {
-
- overridePushHandler(new SimpleSwapChangeHandler());
- overridePopHandler(new SimpleSwapChangeHandler());
-
- Intent callIntent = new Intent(getActivity(), CallActivity.class);
- BundleBuilder bundleBuilder = new BundleBuilder(new Bundle());
- bundleBuilder.putString("roomToken", roomItem.getModel().getToken());
- bundleBuilder.putParcelable("userEntity", userEntity);
- callIntent.putExtras(bundleBuilder.build());
- startActivity(callIntent);
- }
- });
+ Intent callIntent = new Intent(getActivity(), CallActivity.class);
+ BundleBuilder bundleBuilder = new BundleBuilder(new Bundle());
+ bundleBuilder.putString("roomToken", roomItem.getModel().getToken());
+ bundleBuilder.putParcelable("userEntity", userEntity);
+ callIntent.putExtras(bundleBuilder.build());
+ startActivity(callIntent);
}
return true;
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java b/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java
index d6bea0f05..d2f5c2ab3 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java
+++ b/app/src/main/java/com/nextcloud/talk/controllers/SettingsController.java
@@ -340,7 +340,7 @@ public class SettingsController extends BaseController {
messageView.setVisibility(View.VISIBLE);
break;
case WRONG_ACCOUNT:
- messageText.setTextColor(getResources().getColor(R.color.darkRed));
+ messageText.setTextColor(getResources().getColor(R.color.nc_darkRed));
messageText.setText(getResources().getString(R.string.nc_settings_wrong_account));
messageView.setVisibility(View.VISIBLE);
break;
@@ -424,6 +424,11 @@ public class SettingsController extends BaseController {
}
}
+ @Override
+ protected String getTitle() {
+ return getResources().getString(R.string.nc_app_name);
+ }
+
private class ProxyCredentialsChangeListener implements OnPreferenceValueChangedListener {
@Override
@@ -462,9 +467,4 @@ public class SettingsController extends BaseController {
}
}
- @Override
- protected String getTitle() {
- return getResources().getString(R.string.nc_app_name);
- }
-
}
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/SwitchAccountController.java b/app/src/main/java/com/nextcloud/talk/controllers/SwitchAccountController.java
index 718de0c4e..5aedeb612 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/SwitchAccountController.java
+++ b/app/src/main/java/com/nextcloud/talk/controllers/SwitchAccountController.java
@@ -118,7 +118,7 @@ public class SwitchAccountController extends BaseController {
User user;
UserEntity currentUserEntity = userUtils.getCurrentUser();
- for(Object userEntityObject : userUtils.getUsers()) {
+ for (Object userEntityObject : userUtils.getUsers()) {
userEntity = (UserEntity) userEntityObject;
if (!userEntity.equals(currentUserEntity)) {
user = new User();
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/WebViewLoginController.java b/app/src/main/java/com/nextcloud/talk/controllers/WebViewLoginController.java
index 841f1a6a2..a5ff401ca 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/WebViewLoginController.java
+++ b/app/src/main/java/com/nextcloud/talk/controllers/WebViewLoginController.java
@@ -236,7 +236,7 @@ public class WebViewLoginController extends BaseController {
if (userUtils.checkIfUserIsScheduledForDeletion(loginData.getUsername(), baseUrl)) {
ErrorMessageHolder.getInstance().setMessageType(
ErrorMessageHolder.ErrorMessageType.ACCOUNT_SCHEDULED_FOR_DELETION);
- getRouter().popToRoot();
+ getRouter().popToRoot();
}
// We use the URL user entered because one provided by the server is NOT reliable
diff --git a/app/src/main/java/com/nextcloud/talk/controllers/base/BaseController.java b/app/src/main/java/com/nextcloud/talk/controllers/base/BaseController.java
index 70f0bb27d..ff2b476e2 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/base/BaseController.java
+++ b/app/src/main/java/com/nextcloud/talk/controllers/base/BaseController.java
@@ -30,6 +30,7 @@ import com.nextcloud.talk.controllers.base.providers.ActionBarProvider;
public abstract class BaseController extends RefWatchingController {
private static final String TAG = "BaseController";
+
protected BaseController() {
}
diff --git a/app/src/main/java/com/nextcloud/talk/dagger/modules/RestModule.java b/app/src/main/java/com/nextcloud/talk/dagger/modules/RestModule.java
index 505575317..80e03594a 100644
--- a/app/src/main/java/com/nextcloud/talk/dagger/modules/RestModule.java
+++ b/app/src/main/java/com/nextcloud/talk/dagger/modules/RestModule.java
@@ -34,6 +34,7 @@ import com.nextcloud.talk.utils.ssl.MagicTrustManager;
import com.nextcloud.talk.utils.ssl.SSLSocketFactoryCompat;
import java.io.IOException;
+import java.net.CookieManager;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.util.concurrent.TimeUnit;
@@ -47,6 +48,7 @@ import okhttp3.Authenticator;
import okhttp3.Cache;
import okhttp3.Credentials;
import okhttp3.Interceptor;
+import okhttp3.JavaNetCookieJar;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
@@ -121,6 +123,8 @@ public class RestModule {
httpClient.readTimeout(30, TimeUnit.SECONDS);
httpClient.writeTimeout(30, TimeUnit.SECONDS);
+ httpClient.cookieJar(new JavaNetCookieJar(new CookieManager()));
+
int cacheSize = 128 * 1024 * 1024; // 128 MB
httpClient.cache(new Cache(NextcloudTalkApplication.getSharedApplication().getCacheDir(), cacheSize));
diff --git a/app/src/main/java/com/nextcloud/talk/events/CertificateEvent.java b/app/src/main/java/com/nextcloud/talk/events/CertificateEvent.java
index e0acbf0da..a5a5afcfc 100644
--- a/app/src/main/java/com/nextcloud/talk/events/CertificateEvent.java
+++ b/app/src/main/java/com/nextcloud/talk/events/CertificateEvent.java
@@ -30,7 +30,8 @@ import java.security.cert.X509Certificate;
public class CertificateEvent {
private final X509Certificate x509Certificate;
private final MagicTrustManager magicTrustManager;
- @Nullable private final SslErrorHandler sslErrorHandler;
+ @Nullable
+ private final SslErrorHandler sslErrorHandler;
public CertificateEvent(X509Certificate x509Certificate, MagicTrustManager magicTrustManager,
@Nullable SslErrorHandler sslErrorHandler) {
diff --git a/app/src/main/java/com/nextcloud/talk/jobs/AccountRemovalJob.java b/app/src/main/java/com/nextcloud/talk/jobs/AccountRemovalJob.java
index 690385e4d..b0a9d6b3b 100644
--- a/app/src/main/java/com/nextcloud/talk/jobs/AccountRemovalJob.java
+++ b/app/src/main/java/com/nextcloud/talk/jobs/AccountRemovalJob.java
@@ -61,7 +61,7 @@ public class AccountRemovalJob extends Job {
NextcloudTalkApplication.getSharedApplication().getComponentApplication().inject(this);
PushConfigurationState pushConfigurationState;
- for(Object userEntityObject : userUtils.getUsersScheduledForDeletion()) {
+ for (Object userEntityObject : userUtils.getUsersScheduledForDeletion()) {
UserEntity userEntity = (UserEntity) userEntityObject;
try {
if (!TextUtils.isEmpty(userEntity.getPushConfigurationState())) {
@@ -78,8 +78,8 @@ public class AccountRemovalJob extends Job {
@Override
public void onNext(GenericOverall genericOverall) {
- if (genericOverall.getOcs().getMeta().getStatusCode().equals("200")
- || genericOverall.getOcs().getMeta().getStatusCode().equals("202")) {
+ if (genericOverall.getOcs().getMeta().getStatusCode() == 200
+ || genericOverall.getOcs().getMeta().getStatusCode() == 202) {
HashMap queryMap = new HashMap<>();
queryMap.put("deviceIdentifier", finalPushConfigurationState.deviceIdentifier);
queryMap.put("userPublicKey", finalPushConfigurationState.getUserPublicKey());
@@ -158,7 +158,7 @@ public class AccountRemovalJob extends Job {
}
});
}
- } catch(IOException e) {
+ } catch (IOException e) {
Log.d(TAG, "Something went wrong while removing job at parsing PushConfigurationState");
userUtils.deleteUser(userEntity.getUsername(),
userEntity.getBaseUrl());
diff --git a/app/src/main/java/com/nextcloud/talk/utils/DisplayHelper.java b/app/src/main/java/com/nextcloud/talk/utils/DisplayHelper.java
index c885c77c9..91679d7a1 100644
--- a/app/src/main/java/com/nextcloud/talk/utils/DisplayHelper.java
+++ b/app/src/main/java/com/nextcloud/talk/utils/DisplayHelper.java
@@ -28,10 +28,10 @@ public class DisplayHelper {
private static final String TAG = "DIsplayHelper";
- public static float convertDpToPixel(float dp, Context context){
+ public static float convertDpToPixel(float dp, Context context) {
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
- float px = dp * ((float)metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT);
+ float px = dp * ((float) metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT);
return px;
}
}
diff --git a/app/src/main/java/com/nextcloud/talk/utils/ErrorMessageHolder.java b/app/src/main/java/com/nextcloud/talk/utils/ErrorMessageHolder.java
index 2b50844a1..81294f5fd 100644
--- a/app/src/main/java/com/nextcloud/talk/utils/ErrorMessageHolder.java
+++ b/app/src/main/java/com/nextcloud/talk/utils/ErrorMessageHolder.java
@@ -23,13 +23,9 @@ package com.nextcloud.talk.utils;
import android.support.annotation.Nullable;
public class ErrorMessageHolder {
- public enum ErrorMessageType {
- WRONG_ACCOUNT, ACCOUNT_UPDATED_NOT_ADDED, ACCOUNT_SCHEDULED_FOR_DELETION
- }
-
+ private static final ErrorMessageHolder holder = new ErrorMessageHolder();
private ErrorMessageType errorMessageType;
- private static final ErrorMessageHolder holder = new ErrorMessageHolder();
public static ErrorMessageHolder getInstance() {
return holder;
}
@@ -42,6 +38,9 @@ public class ErrorMessageHolder {
this.errorMessageType = errorMessageType;
}
+ public enum ErrorMessageType {
+ WRONG_ACCOUNT, ACCOUNT_UPDATED_NOT_ADDED, ACCOUNT_SCHEDULED_FOR_DELETION
+ }
}
diff --git a/app/src/main/java/com/nextcloud/talk/utils/PushUtils.java b/app/src/main/java/com/nextcloud/talk/utils/PushUtils.java
index 02f277b8a..17246465d 100644
--- a/app/src/main/java/com/nextcloud/talk/utils/PushUtils.java
+++ b/app/src/main/java/com/nextcloud/talk/utils/PushUtils.java
@@ -335,7 +335,8 @@ public class PushUtils {
if (readPublicKey) {
keyString = keyString.replaceAll("\\n", "").replace("-----BEGIN PUBLIC KEY-----",
- "").replace("-----END PUBLIC KEY-----", "");;
+ "").replace("-----END PUBLIC KEY-----", "");
+ ;
} else {
keyString = keyString.replaceAll("\\n", "").replace("-----BEGIN PRIVATE KEY-----",
"").replace("-----END PRIVATE KEY-----", "");
diff --git a/app/src/main/java/com/nextcloud/talk/utils/database/user/UserUtils.java b/app/src/main/java/com/nextcloud/talk/utils/database/user/UserUtils.java
index 668fba161..f6978b1f8 100644
--- a/app/src/main/java/com/nextcloud/talk/utils/database/user/UserUtils.java
+++ b/app/src/main/java/com/nextcloud/talk/utils/database/user/UserUtils.java
@@ -65,7 +65,6 @@ public class UserUtils {
}
-
public UserEntity getAnyUserAndSetAsActive() {
Result findUserQueryResult = dataStore.select(User.class)
.where(UserEntity.SCHEDULED_FOR_DELETION.eq(false))
@@ -125,6 +124,7 @@ public class UserUtils {
return false;
}
+
public boolean getIfUserWithUsernameAndServer(String username, String server) {
Result findUserQueryResult = dataStore.select(User.class).where(UserEntity.USERNAME.eq(username)
.and(UserEntity.BASE_URL.eq(server.toLowerCase())))
diff --git a/app/src/main/res/drawable/ic_logo.xml b/app/src/main/res/drawable/ic_logo.xml
new file mode 100644
index 000000000..385d98069
--- /dev/null
+++ b/app/src/main/res/drawable/ic_logo.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/controller_account_verification.xml b/app/src/main/res/layout/controller_account_verification.xml
index 850ff4949..f704741d3 100644
--- a/app/src/main/res/layout/controller_account_verification.xml
+++ b/app/src/main/res/layout/controller_account_verification.xml
@@ -23,7 +23,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@color/nc_background_color">
+ android:background="@color/nc_white_color">
+ android:background="@color/nc_white_color">
+ android:background="@color/colorPrimary">
+
+
+ app:primaryColor="@color/nc_white_color_complete"
+ >
+ android:singleLine="true"
+ android:textColor="@color/nc_white_color_complete"/>
@@ -59,7 +70,7 @@
android:layout_marginStart="@dimen/activity_horizontal_margin"
android:layout_marginTop="@dimen/padding_between_elements"
android:indeterminate="true"
- android:progressTint="@color/colorPrimary"
+ android:progressTint="@color/nc_white_color"
android:visibility="invisible"/>
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 7a89774e2..9ef642be3 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -1,9 +1,11 @@
- #0082c9
+ #0082C9
#006AA3
#007CC2
- #D32F2F
+ #D32F2F
+ @color/per70white
+ #FFFFFF
diff --git a/app/src/main/res/values/setup.xml b/app/src/main/res/values/setup.xml
index 91574306e..39715c913 100644
--- a/app/src/main/res/values/setup.xml
+++ b/app/src/main/res/values/setup.xml
@@ -7,7 +7,6 @@
Nextcloud Talk
Nextcloud
- @color/per70white
https://push-notifications.nextcloud.com
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 0eb88fe33..90baaefda 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -1,4 +1,4 @@
-
+