Improve code

Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
Mario Danic 2019-06-06 14:48:27 +02:00
parent 6e68f41d1f
commit 03917b8008
2 changed files with 52 additions and 58 deletions

View File

@ -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" xmlns:tools="http://schemas.android.com/tools"
package="com.nextcloud.talk"> 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"/> android:maxSdkVersion="22" />
<uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.CAMERA"/> <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"/> android:maxSdkVersion="22" />
<uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_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_NETWORK_STATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.VIBRATE"/> <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"/> android:maxSdkVersion="22" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK"/> <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"/> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/> <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>

View File

@ -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.ESTABLISHED;
currentCallStatus = CallStatus.CALLING;
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) .takeWhile(observable -> currentCallStatus.equals(CallStatus.ESTABLISHED))
.retry(3, observable -> connectedToCall) .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) .takeWhile(observable -> currentCallStatus.equals(CallStatus.ESTABLISHED))
.retry(3, observable -> connectedToCall) .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) {
dispose(null);
leavingCall = true;
connectedToCall = false;
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;