mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-21 20:49:36 +01:00
Improve code
Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
parent
6e68f41d1f
commit
03917b8008
@ -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>
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user