mirror of
https://github.com/nextcloud/talk-android
synced 2025-03-06 06:15:12 +00:00
Permissions & fixes
Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
parent
d25a806063
commit
9ef1128b59
@ -126,7 +126,7 @@ dependencies {
|
||||
implementation 'com.github.bumptech.glide:glide:4.3.0'
|
||||
annotationProcessor 'com.github.bumptech.glide:compiler:4.3.0'
|
||||
implementation 'com.github.bumptech.glide:okhttp3-integration:4.3.0@aar'
|
||||
implementation 'org.webrtc:google-webrtc:1.0.+'
|
||||
implementation 'org.webrtc:google-webrtc:1.0.21217'
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}"
|
||||
|
||||
implementation 'com.evernote:android-job:1.2.0'
|
||||
@ -140,7 +140,8 @@ dependencies {
|
||||
implementation 'com.yarolegovich:lovelyinput:1.0.2'
|
||||
implementation 'com.yarolegovich:mp:1.0.8'
|
||||
|
||||
implementation 'ru.alexbykov:nopermission:1.1.1'
|
||||
implementation 'me.zhanghai.android.effortlesspermissions:library:1.0.2'
|
||||
|
||||
implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.7'
|
||||
|
||||
implementation 'com.github.Kennyc1012:BottomSheet:2.4.0'
|
||||
|
@ -27,6 +27,7 @@ package com.nextcloud.talk.activities;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.text.TextUtils;
|
||||
@ -104,6 +105,9 @@ import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.disposables.Disposable;
|
||||
import io.reactivex.functions.BooleanSupplier;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
import me.zhanghai.android.effortlesspermissions.EffortlessPermissions;
|
||||
import me.zhanghai.android.effortlesspermissions.OpenAppDetailsDialogFragment;
|
||||
import pub.devrel.easypermissions.AfterPermissionGranted;
|
||||
|
||||
@AutoInjector(NextcloudTalkApplication.class)
|
||||
public class CallActivity extends AppCompatActivity {
|
||||
@ -148,11 +152,18 @@ public class CallActivity extends AppCompatActivity {
|
||||
private UserEntity userEntity;
|
||||
private String callSession;
|
||||
|
||||
private VideoCapturer videoCapturerAndroid;
|
||||
|
||||
private MediaStream localMediaStream;
|
||||
|
||||
private String credentials;
|
||||
private List<MagicPeerConnectionWrapper> magicPeerConnectionWrapperList = new ArrayList<>();
|
||||
|
||||
private static final String[] PERMISSIONS_CALL = {
|
||||
android.Manifest.permission.CAMERA,
|
||||
android.Manifest.permission.RECORD_AUDIO
|
||||
};
|
||||
|
||||
private static int getSystemUiVisibility() {
|
||||
int flags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN;
|
||||
flags |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
|
||||
@ -181,7 +192,8 @@ public class CallActivity extends AppCompatActivity {
|
||||
credentials = ApiHelper.getCredentials(userEntity.getUsername(), userEntity.getToken());
|
||||
initViews();
|
||||
|
||||
start();
|
||||
checkPermissions();
|
||||
|
||||
}
|
||||
|
||||
private VideoCapturer createVideoCapturer() {
|
||||
@ -237,18 +249,36 @@ public class CallActivity extends AppCompatActivity {
|
||||
|
||||
}
|
||||
|
||||
@AfterPermissionGranted(100)
|
||||
private void checkPermissions() {
|
||||
if (EffortlessPermissions.hasPermissions(this, PERMISSIONS_CALL)) {
|
||||
start();
|
||||
} else if (EffortlessPermissions.somePermissionPermanentlyDenied(this,
|
||||
PERMISSIONS_CALL)) {
|
||||
// Some permission is permanently denied so we cannot request them normally.
|
||||
OpenAppDetailsDialogFragment.show(
|
||||
R.string.nc_permissions_permanently_denied,
|
||||
R.string.nc_permissions_settings , this);
|
||||
} else {
|
||||
EffortlessPermissions.requestPermissions(this, R.string.nc_permissions,
|
||||
100, PERMISSIONS_CALL);
|
||||
}
|
||||
}
|
||||
|
||||
public void start() {
|
||||
//Initialize PeerConnectionFactory globals.
|
||||
//Params are context, initAudio,initVideo and videoCodecHwAcceleration
|
||||
PeerConnectionFactory.initializeAndroidGlobals(this, true, true,
|
||||
false);
|
||||
PeerConnectionFactory.InitializationOptions initializationOptions = PeerConnectionFactory.InitializationOptions
|
||||
.builder(this)
|
||||
.setEnableVideoHwAcceleration(false)
|
||||
.createInitializationOptions();
|
||||
PeerConnectionFactory.initialize(initializationOptions);
|
||||
|
||||
//Create a new PeerConnectionFactory instance.
|
||||
PeerConnectionFactory.Options options = new PeerConnectionFactory.Options();
|
||||
peerConnectionFactory = new PeerConnectionFactory(options);
|
||||
|
||||
//Now create a VideoCapturer instance. Callback methods are there if you want to do something! Duh!
|
||||
VideoCapturer videoCapturerAndroid = createVideoCapturer();
|
||||
videoCapturerAndroid = createVideoCapturer();
|
||||
|
||||
//Create MediaConstraints - Will be useful for specifying video and audio constraints.
|
||||
audioConstraints = new MediaConstraints();
|
||||
@ -280,9 +310,7 @@ public class CallActivity extends AppCompatActivity {
|
||||
}
|
||||
});
|
||||
|
||||
Resources r = getResources();
|
||||
int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 120, r.getDisplayMetrics());
|
||||
videoCapturerAndroid.startCapture(px, px, 30);
|
||||
startVideoCapture();
|
||||
|
||||
//create a videoRenderer based on SurfaceViewRenderer instance
|
||||
localRenderer = new VideoRenderer(fullScreenVideoView);
|
||||
@ -340,6 +368,12 @@ public class CallActivity extends AppCompatActivity {
|
||||
});
|
||||
}
|
||||
|
||||
private void startVideoCapture() {
|
||||
Resources r = getResources();
|
||||
int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 120, r.getDisplayMetrics());
|
||||
videoCapturerAndroid.startCapture(px, px, 30);
|
||||
}
|
||||
|
||||
private void joinRoomAndCall() {
|
||||
ncApi.joinRoom(credentials, ApiHelper.getUrlForRoom(userEntity.getBaseUrl(), roomToken))
|
||||
.subscribeOn(Schedulers.newThread())
|
||||
@ -755,12 +789,18 @@ public class CallActivity extends AppCompatActivity {
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
eventBus.register(this);
|
||||
startVideoCapture();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
super.onStop();
|
||||
eventBus.unregister(this);
|
||||
try {
|
||||
videoCapturer.stopCapture();
|
||||
} catch (InterruptedException e) {
|
||||
Log.e(TAG, "Failed to stop the capturing process");
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.BACKGROUND)
|
||||
@ -904,4 +944,13 @@ public class CallActivity extends AppCompatActivity {
|
||||
|
||||
super.onConfigurationChanged(newConfig);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
|
||||
@NonNull int[] grantResults) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||
|
||||
EffortlessPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults,
|
||||
this);
|
||||
}
|
||||
}
|
||||
|
@ -20,7 +20,6 @@
|
||||
|
||||
package com.nextcloud.talk.controllers;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.SearchManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
@ -83,7 +82,6 @@ import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.disposables.Disposable;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
import retrofit2.HttpException;
|
||||
import ru.alexbykov.nopermission.PermissionHelper;
|
||||
|
||||
@AutoInjector(NextcloudTalkApplication.class)
|
||||
public class CallsListController extends BaseController implements SearchView.OnQueryTextListener,
|
||||
@ -390,29 +388,15 @@ public class CallsListController extends BaseController implements SearchView.On
|
||||
@Override
|
||||
public boolean onItemClick(int position) {
|
||||
if (callItems.size() > position) {
|
||||
|
||||
PermissionHelper permissionHelper = new PermissionHelper(getActivity());
|
||||
permissionHelper.check(Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO)
|
||||
.onSuccess(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
overridePushHandler(new NoOpControllerChangeHandler());
|
||||
overridePopHandler(new NoOpControllerChangeHandler());
|
||||
CallItem callItem = callItems.get(position);
|
||||
Intent callIntent = new Intent(getActivity(), CallActivity.class);
|
||||
BundleBuilder bundleBuilder = new BundleBuilder(new Bundle());
|
||||
bundleBuilder.putString("roomToken", callItem.getModel().getToken());
|
||||
bundleBuilder.putParcelable("userEntity", Parcels.wrap(userEntity));
|
||||
callIntent.putExtras(bundleBuilder.build());
|
||||
startActivity(callIntent);
|
||||
}
|
||||
})
|
||||
.onDenied(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
}
|
||||
})
|
||||
.run();
|
||||
overridePushHandler(new NoOpControllerChangeHandler());
|
||||
overridePopHandler(new NoOpControllerChangeHandler());
|
||||
CallItem callItem = callItems.get(position);
|
||||
Intent callIntent = new Intent(getActivity(), CallActivity.class);
|
||||
BundleBuilder bundleBuilder = new BundleBuilder(new Bundle());
|
||||
bundleBuilder.putString("roomToken", callItem.getModel().getToken());
|
||||
bundleBuilder.putParcelable("userEntity", Parcels.wrap(userEntity));
|
||||
callIntent.putExtras(bundleBuilder.build());
|
||||
startActivity(callIntent);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -20,7 +20,6 @@
|
||||
|
||||
package com.nextcloud.talk.controllers;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.SearchManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
@ -86,7 +85,6 @@ import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.disposables.Disposable;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
import retrofit2.HttpException;
|
||||
import ru.alexbykov.nopermission.PermissionHelper;
|
||||
|
||||
@AutoInjector(NextcloudTalkApplication.class)
|
||||
public class ContactsController extends BaseController implements SearchView.OnQueryTextListener,
|
||||
@ -457,27 +455,14 @@ public class ContactsController extends BaseController implements SearchView.OnQ
|
||||
|
||||
@Override
|
||||
public void onNext(RoomOverall roomOverall) {
|
||||
PermissionHelper permissionHelper = new PermissionHelper(getActivity());
|
||||
permissionHelper.check(Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO)
|
||||
.onSuccess(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
overridePushHandler(new NoOpControllerChangeHandler());
|
||||
overridePopHandler(new NoOpControllerChangeHandler());
|
||||
Intent callIntent = new Intent(getActivity(), CallActivity.class);
|
||||
BundleBuilder bundleBuilder = new BundleBuilder(new Bundle());
|
||||
bundleBuilder.putString("roomToken", roomOverall.getOcs().getData().getToken());
|
||||
bundleBuilder.putParcelable("userEntity", Parcels.wrap(userEntity));
|
||||
callIntent.putExtras(bundleBuilder.build());
|
||||
startActivity(callIntent);
|
||||
}
|
||||
})
|
||||
.onDenied(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
}
|
||||
})
|
||||
.run();
|
||||
overridePushHandler(new NoOpControllerChangeHandler());
|
||||
overridePopHandler(new NoOpControllerChangeHandler());
|
||||
Intent callIntent = new Intent(getActivity(), CallActivity.class);
|
||||
BundleBuilder bundleBuilder = new BundleBuilder(new Bundle());
|
||||
bundleBuilder.putString("roomToken", roomOverall.getOcs().getData().getToken());
|
||||
bundleBuilder.putParcelable("userEntity", Parcels.wrap(userEntity));
|
||||
callIntent.putExtras(bundleBuilder.build());
|
||||
startActivity(callIntent);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -76,5 +76,11 @@
|
||||
<string name="nc_one_contact_selected">contact selected</string>
|
||||
<string name="nc_more_contacts_selected">contacts selected</string>
|
||||
|
||||
<!-- Permissions -->
|
||||
<string name="nc_permissions">We need certain permissions to establish a video call. Please click \"ALLOW\" in
|
||||
the upcoming system dialog.</string>
|
||||
<string name="nc_permissions_permanently_denied">We need certain permissions to establish a video call. Please
|
||||
grant the \"Camera\" and \"Record audio\" permission in system settings.</string>
|
||||
<string name="nc_permissions_settings">Open settings</string>
|
||||
|
||||
</resources>
|
||||
|
Loading…
Reference in New Issue
Block a user