Browse Source

Improve code

Signed-off-by: Mario Danic <mario@lovelyhq.com>
Mario Danic 6 years ago
parent
commit
03917b8008

+ 34 - 32
app/src/main/AndroidManifest.xml

@@ -19,40 +19,42 @@
   -->
   -->
 
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          xmlns:tools="http://schemas.android.com/tools"
-          package="com.nextcloud.talk">
+    xmlns:tools="http://schemas.android.com/tools"
+    package="com.nextcloud.talk">
 
 
     <uses-feature
     <uses-feature
         android:name="android.hardware.camera.any"
         android:name="android.hardware.camera.any"
-        android:required="false"/>
+        android:required="false" />
     <uses-feature
     <uses-feature
         android:name="android.hardware.camera.autofocus"
         android:name="android.hardware.camera.autofocus"
-        android:required="false"/>
+        android:required="false" />
     <uses-feature
     <uses-feature
         android:glEsVersion="0x00020000"
         android:glEsVersion="0x00020000"
-        android:required="true"/>
+        android:required="true" />
 
 
     <uses-permission
     <uses-permission
         android:name="android.permission.AUTHENTICATE_ACCOUNTS"
         android:name="android.permission.AUTHENTICATE_ACCOUNTS"
-        android:maxSdkVersion="22"/>
-    <uses-permission android:name="android.permission.BLUETOOTH"/>
-    <uses-permission android:name="android.permission.CAMERA"/>
+        android:maxSdkVersion="22" />
+    <uses-permission android:name="android.permission.BLUETOOTH" />
+    <uses-permission android:name="android.permission.CAMERA" />
     <uses-permission
     <uses-permission
         android:name="android.permission.GET_ACCOUNTS"
         android:name="android.permission.GET_ACCOUNTS"
-        android:maxSdkVersion="22"/>
-    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
-    <uses-permission android:name="android.permission.INTERNET"/>
-    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
-    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
-    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
-    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
-    <uses-permission android:name="android.permission.VIBRATE"/>
+        android:maxSdkVersion="22" />
+    <uses-permission android:name="android.permission.RECORD_AUDIO" />
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
+    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
+    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
+    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
+    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
+    <uses-permission android:name="android.permission.VIBRATE" />
 
 
     <uses-permission
     <uses-permission
         android:name="android.permission.USE_CREDENTIALS"
         android:name="android.permission.USE_CREDENTIALS"
-        android:maxSdkVersion="22"/>
-    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-    <uses-permission android:name="android.permission.WAKE_LOCK"/>
+        android:maxSdkVersion="22" />
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.WAKE_LOCK" />
 
 
     <uses-permission android:name="android.permission.USE_BIOMETRIC" />
     <uses-permission android:name="android.permission.USE_BIOMETRIC" />
     <!-- This permission is deprecated in Android P  -->
     <!-- This permission is deprecated in Android P  -->
@@ -64,51 +66,51 @@
         android:fullBackupContent="@xml/backup_config"
         android:fullBackupContent="@xml/backup_config"
         android:icon="@mipmap/ic_launcher"
         android:icon="@mipmap/ic_launcher"
         android:label="@string/nc_app_name"
         android:label="@string/nc_app_name"
+        android:largeHeap="true"
         android:networkSecurityConfig="@xml/network_security_config"
         android:networkSecurityConfig="@xml/network_security_config"
         android:supportsRtl="true"
         android:supportsRtl="true"
         android:theme="@style/AppTheme"
         android:theme="@style/AppTheme"
-        tools:replace="label, icon, theme, name, allowBackup"
-        tools:ignore="UnusedAttribute">
-
+        tools:ignore="UnusedAttribute"
+        tools:replace="label, icon, theme, name, allowBackup">
 
 
         <meta-data
         <meta-data
             android:name="android.max_aspect"
             android:name="android.max_aspect"
-            android:value="10"/>
+            android:value="10" />
 
 
         <activity
         <activity
             android:name=".activities.MainActivity"
             android:name=".activities.MainActivity"
             android:label="@string/nc_app_name"
             android:label="@string/nc_app_name"
             android:windowSoftInputMode="adjustPan">
             android:windowSoftInputMode="adjustPan">
             <intent-filter>
             <intent-filter>
-                <action android:name="android.intent.action.MAIN"/>
-                <category android:name="android.intent.category.LAUNCHER"/>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
             </intent-filter>
         </activity>
         </activity>
 
 
         <activity
         <activity
             android:name=".activities.MagicCallActivity"
             android:name=".activities.MagicCallActivity"
             android:configChanges="orientation|screenSize"
             android:configChanges="orientation|screenSize"
-            android:launchMode="singleTask"/>
+            android:launchMode="singleTask" />
 
 
         <receiver android:name=".receivers.PackageReplacedReceiver">
         <receiver android:name=".receivers.PackageReplacedReceiver">
             <intent-filter>
             <intent-filter>
-                <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
+                <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
             </intent-filter>
             </intent-filter>
         </receiver>
         </receiver>
 
 
         <service
         <service
-            android:exported="false"
-            android:name="com.novoda.merlin.MerlinService" />
+            android:name="com.novoda.merlin.MerlinService"
+            android:exported="false" />
 
 
         <provider
         <provider
             android:name="androidx.core.content.FileProvider"
             android:name="androidx.core.content.FileProvider"
-            android:grantUriPermissions="true"
+            android:authorities="${applicationId}"
             android:exported="false"
             android:exported="false"
-            android:authorities="${applicationId}">
+            android:grantUriPermissions="true">
 
 
             <meta-data
             <meta-data
                 android:name="android.support.FILE_PROVIDER_PATHS"
                 android:name="android.support.FILE_PROVIDER_PATHS"
-                android:resource="@xml/file_provider_paths"/>
+                android:resource="@xml/file_provider_paths" />
 
 
         </provider>
         </provider>
 
 

+ 18 - 26
app/src/main/java/com/nextcloud/talk/controllers/CallController.java

@@ -166,8 +166,6 @@ public class CallController extends BaseController {
     private AudioTrack localAudioTrack;
     private AudioTrack localAudioTrack;
     private VideoCapturer videoCapturer;
     private VideoCapturer videoCapturer;
     private EglBase rootEglBase;
     private EglBase rootEglBase;
-    private boolean leavingCall = false;
-    private boolean connectedToCall = false;
     private Disposable signalingDisposable;
     private Disposable signalingDisposable;
     private Disposable pingDisposable;
     private Disposable pingDisposable;
     private List<PeerConnection.IceServer> iceServers;
     private List<PeerConnection.IceServer> iceServers;
@@ -187,7 +185,6 @@ public class CallController extends BaseController {
     private boolean needsPing = true;
     private boolean needsPing = true;
 
 
     private boolean isVoiceOnlyCall;
     private boolean isVoiceOnlyCall;
-    private boolean isFromNotification;
     private Handler callControlHandler = new Handler();
     private Handler callControlHandler = new Handler();
     private Handler cameraSwitchHandler = new Handler();
     private Handler cameraSwitchHandler = new Handler();
 
 
@@ -215,7 +212,7 @@ public class CallController extends BaseController {
 
 
     @Parcel
     @Parcel
     public enum CallStatus {
     public enum CallStatus {
-        CALLING, CALLING_TIMEOUT, ESTABLISHED, RECONNECTING, OFFLINE
+        CALLING, CALLING_TIMEOUT, ESTABLISHED, RECONNECTING, OFFLINE, LEAVING
     }
     }
 
 
     public CallController(Bundle args) {
     public CallController(Bundle args) {
@@ -236,7 +233,6 @@ public class CallController extends BaseController {
             baseUrl = conversationUser.getBaseUrl();
             baseUrl = conversationUser.getBaseUrl();
         }
         }
 
 
-        isFromNotification = TextUtils.isEmpty(roomToken);
         powerManagerUtils = new PowerManagerUtils();
         powerManagerUtils = new PowerManagerUtils();
         currentCallStatus = CallStatus.CALLING;
         currentCallStatus = CallStatus.CALLING;
     }
     }
@@ -434,7 +430,7 @@ public class CallController extends BaseController {
                 }
                 }
             }
             }
 
 
-            if (!connectedToCall) {
+            if (!currentCallStatus.equals(CallStatus.ESTABLISHED)) {
                 fetchSignalingSettings();
                 fetchSignalingSettings();
             }
             }
         } else if (getActivity() != null && EffortlessPermissions.somePermissionPermanentlyDenied(getActivity(),
         } else if (getActivity() != null && EffortlessPermissions.somePermissionPermanentlyDenied(getActivity(),
@@ -473,7 +469,7 @@ public class CallController extends BaseController {
             microphoneControlButton.getHierarchy().setPlaceholderImage(R.drawable.ic_mic_off_white_24px);
             microphoneControlButton.getHierarchy().setPlaceholderImage(R.drawable.ic_mic_off_white_24px);
         }
         }
 
 
-        if (!connectedToCall) {
+        if (!currentCallStatus.equals(CallStatus.ESTABLISHED)) {
             fetchSignalingSettings();
             fetchSignalingSettings();
         }
         }
     }
     }
@@ -491,7 +487,7 @@ public class CallController extends BaseController {
         if (getActivity() != null && (EffortlessPermissions.hasPermissions(getActivity(), PERMISSIONS_CAMERA) ||
         if (getActivity() != null && (EffortlessPermissions.hasPermissions(getActivity(), PERMISSIONS_CAMERA) ||
                 EffortlessPermissions.hasPermissions(getActivity(), PERMISSIONS_MICROPHONE))) {
                 EffortlessPermissions.hasPermissions(getActivity(), PERMISSIONS_MICROPHONE))) {
             checkIfSomeAreApproved();
             checkIfSomeAreApproved();
-        } else if (!connectedToCall) {
+        } else if (!currentCallStatus.equals(CallStatus.ESTABLISHED)) {
             fetchSignalingSettings();
             fetchSignalingSettings();
         }
         }
     }
     }
@@ -641,7 +637,7 @@ public class CallController extends BaseController {
                 toggleMedia(true, false);
                 toggleMedia(true, false);
             }
             }
 
 
-            if (isVoiceOnlyCall && !connectedToCall) {
+            if (isVoiceOnlyCall && !currentCallStatus.equals(CallStatus.ESTABLISHED)) {
                 fetchSignalingSettings();
                 fetchSignalingSettings();
             }
             }
 
 
@@ -663,6 +659,7 @@ public class CallController extends BaseController {
 
 
     @OnClick(R.id.callControlHangupView)
     @OnClick(R.id.callControlHangupView)
     void onHangupClick() {
     void onHangupClick() {
+        currentCallStatus = CallStatus.LEAVING;
         hangup(true);
         hangup(true);
     }
     }
 
 
@@ -758,7 +755,7 @@ public class CallController extends BaseController {
             }
             }
         }
         }
 
 
-        if (connectedToCall) {
+        if (currentCallStatus.equals(CallStatus.ESTABLISHED)) {
             if (!hasMCU) {
             if (!hasMCU) {
                 for (int i = 0; i < magicPeerConnectionWrapperList.size(); i++) {
                 for (int i = 0; i < magicPeerConnectionWrapperList.size(); i++) {
                     magicPeerConnectionWrapperList.get(i).sendChannelData(new DataChannelMessage(message));
                     magicPeerConnectionWrapperList.get(i).sendChannelData(new DataChannelMessage(message));
@@ -871,8 +868,6 @@ public class CallController extends BaseController {
     }
     }
 
 
     private void fetchSignalingSettings() {
     private void fetchSignalingSettings() {
-        leavingCall = false;
-
         ncApi.getSignalingSettings(credentials, ApiUtils.getUrlForSignalingSettings(baseUrl))
         ncApi.getSignalingSettings(credentials, ApiUtils.getUrlForSignalingSettings(baseUrl))
                 .subscribeOn(Schedulers.io())
                 .subscribeOn(Schedulers.io())
                 .retry(3)
                 .retry(3)
@@ -1063,8 +1058,7 @@ public class CallController extends BaseController {
 
 
                     @Override
                     @Override
                     public void onNext(GenericOverall genericOverall) {
                     public void onNext(GenericOverall genericOverall) {
-                        connectedToCall = true;
-                        currentCallStatus = CallStatus.CALLING;
+                        currentCallStatus = CallStatus.ESTABLISHED;
 
 
                         if (connectingView != null) {
                         if (connectingView != null) {
                             connectingView.setVisibility(View.GONE);
                             connectingView.setVisibility(View.GONE);
@@ -1085,8 +1079,8 @@ public class CallController extends BaseController {
                                     .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))
-                                    .takeWhile(observable -> connectedToCall)
-                                    .retry(3, observable -> connectedToCall)
+                                    .takeWhile(observable -> currentCallStatus.equals(CallStatus.ESTABLISHED))
+                                    .retry(3, observable -> currentCallStatus.equals(CallStatus.ESTABLISHED))
                                     .subscribe(new Observer<GenericOverall>() {
                                     .subscribe(new Observer<GenericOverall>() {
                                         @Override
                                         @Override
                                         public void onSubscribe(Disposable d) {
                                         public void onSubscribe(Disposable d) {
@@ -1127,8 +1121,8 @@ public class CallController extends BaseController {
                                     .subscribeOn(Schedulers.io())
                                     .subscribeOn(Schedulers.io())
                                     .observeOn(AndroidSchedulers.mainThread())
                                     .observeOn(AndroidSchedulers.mainThread())
                                     .repeatWhen(observable -> observable)
                                     .repeatWhen(observable -> observable)
-                                    .takeWhile(observable -> connectedToCall)
-                                    .retry(3, observable -> connectedToCall)
+                                    .takeWhile(observable -> currentCallStatus.equals(CallStatus.ESTABLISHED))
+                                    .retry(3, observable -> currentCallStatus.equals(CallStatus.ESTABLISHED))
                                     .subscribe(new Observer<SignalingOverall>() {
                                     .subscribe(new Observer<SignalingOverall>() {
                                         @Override
                                         @Override
                                         public void onSubscribe(Disposable d) {
                                         public void onSubscribe(Disposable d) {
@@ -1252,7 +1246,7 @@ public class CallController extends BaseController {
     private void receivedSignalingMessage(Signaling signaling) throws IOException {
     private void receivedSignalingMessage(Signaling signaling) throws IOException {
         String messageType = signaling.getType();
         String messageType = signaling.getType();
 
 
-        if (leavingCall) {
+        if (!currentCallStatus.equals(CallStatus.ESTABLISHED)) {
             return;
             return;
         }
         }
 
 
@@ -1322,11 +1316,9 @@ public class CallController extends BaseController {
     }
     }
 
 
     private void hangup(boolean shutDownView) {
     private void hangup(boolean shutDownView) {
-
-        leavingCall = true;
-        connectedToCall = false;
-
+        dispose(null);
         if (shutDownView) {
         if (shutDownView) {
+
             if (videoCapturer != null) {
             if (videoCapturer != null) {
                 try {
                 try {
                     videoCapturer.stopCapture();
                     videoCapturer.stopCapture();
@@ -1488,7 +1480,7 @@ public class CallController extends BaseController {
         // Calculate sessions that join the call
         // Calculate sessions that join the call
         newSessions.removeAll(oldSesssions);
         newSessions.removeAll(oldSesssions);
 
 
-        if (leavingCall) {
+        if (!currentCallStatus.equals(CallStatus.ESTABLISHED)) {
             return;
             return;
         }
         }
 
 
@@ -1670,7 +1662,7 @@ public class CallController extends BaseController {
                 boolean enableVideo = peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent
                 boolean enableVideo = peerConnectionEvent.getPeerConnectionEventType().equals(PeerConnectionEvent
                         .PeerConnectionEventType.SENSOR_FAR) && videoOn;
                         .PeerConnectionEventType.SENSOR_FAR) && videoOn;
                 if (getActivity() != null && EffortlessPermissions.hasPermissions(getActivity(), PERMISSIONS_CAMERA) &&
                 if (getActivity() != null && EffortlessPermissions.hasPermissions(getActivity(), PERMISSIONS_CAMERA) &&
-                        connectedToCall && videoOn
+                        (currentCallStatus.equals(CallStatus.CALLING) || currentCallStatus.equals(CallStatus.ESTABLISHED)) && videoOn
                         && enableVideo != localVideoTrack.enabled()) {
                         && enableVideo != localVideoTrack.enabled()) {
                     toggleMedia(enableVideo, true);
                     toggleMedia(enableVideo, true);
                 }
                 }
@@ -1701,7 +1693,7 @@ public class CallController extends BaseController {
                 int finalI = i;
                 int finalI = i;
                 Observable
                 Observable
                         .interval(1, TimeUnit.SECONDS)
                         .interval(1, TimeUnit.SECONDS)
-                        .takeWhile(observer -> connectedToCall)
+                        .takeWhile(observer -> currentCallStatus.equals(CallStatus.ESTABLISHED))
                         .observeOn(Schedulers.io())
                         .observeOn(Schedulers.io())
                         .doOnNext(n -> magicPeerConnectionWrapperList.get(finalI).sendChannelData(dataChannelMessage));
                         .doOnNext(n -> magicPeerConnectionWrapperList.get(finalI).sendChannelData(dataChannelMessage));
                 break;
                 break;