diff --git a/app/src/main/java/org/linphone/LinphoneActivity.java b/app/src/main/java/org/linphone/LinphoneActivity.java index 7b983d2ad..2e27d39ee 100644 --- a/app/src/main/java/org/linphone/LinphoneActivity.java +++ b/app/src/main/java/org/linphone/LinphoneActivity.java @@ -638,6 +638,11 @@ public class LinphoneActivity extends LinphoneGenericActivity if (permissions[i].compareTo(Manifest.permission.READ_CONTACTS) == 0 || permissions[i].compareTo(Manifest.permission.WRITE_CONTACTS) == 0) readContactsI = i; + + if (permissions[i].equals(Manifest.permission.CAMERA) + && grantResults[i] == PackageManager.PERMISSION_GRANTED) { + LinphoneUtils.reloadVideoDevices(); + } } if (readContactsI >= 0 diff --git a/app/src/main/java/org/linphone/assistant/AssistantActivity.java b/app/src/main/java/org/linphone/assistant/AssistantActivity.java index 083d93eb5..e6446c506 100644 --- a/app/src/main/java/org/linphone/assistant/AssistantActivity.java +++ b/app/src/main/java/org/linphone/assistant/AssistantActivity.java @@ -406,6 +406,10 @@ public class AssistantActivity extends ThemableActivity + (grantResults[i] == PackageManager.PERMISSION_GRANTED ? "granted" : "denied")); + if (permissions[i].equals(Manifest.permission.CAMERA) + && grantResults[i] == PackageManager.PERMISSION_GRANTED) { + LinphoneUtils.reloadVideoDevices(); + } } switch (requestCode) { diff --git a/app/src/main/java/org/linphone/call/CallActivity.java b/app/src/main/java/org/linphone/call/CallActivity.java index fc0812e8a..4e136fb8e 100644 --- a/app/src/main/java/org/linphone/call/CallActivity.java +++ b/app/src/main/java/org/linphone/call/CallActivity.java @@ -526,6 +526,7 @@ public class CallActivity extends LinphoneGenericActivity new Runnable() { @Override public void run() { + LinphoneUtils.reloadVideoDevices(); acceptCallUpdate( grantResults[0] == PackageManager.PERMISSION_GRANTED); } @@ -536,6 +537,7 @@ public class CallActivity extends LinphoneGenericActivity new Runnable() { @Override public void run() { + LinphoneUtils.reloadVideoDevices(); disableVideo(grantResults[0] != PackageManager.PERMISSION_GRANTED); } }); diff --git a/app/src/main/java/org/linphone/call/CallIncomingActivity.java b/app/src/main/java/org/linphone/call/CallIncomingActivity.java index 62f6adb83..1d4491d93 100644 --- a/app/src/main/java/org/linphone/call/CallIncomingActivity.java +++ b/app/src/main/java/org/linphone/call/CallIncomingActivity.java @@ -319,6 +319,10 @@ public class CallIncomingActivity extends LinphoneGenericActivity { + (grantResults[i] == PackageManager.PERMISSION_GRANTED ? "granted" : "denied")); + if (permissions[i].equals(Manifest.permission.CAMERA) + && grantResults[i] == PackageManager.PERMISSION_GRANTED) { + LinphoneUtils.reloadVideoDevices(); + } } } } diff --git a/app/src/main/java/org/linphone/call/CallOutgoingActivity.java b/app/src/main/java/org/linphone/call/CallOutgoingActivity.java index 9fc3e45e9..5ed0022ac 100644 --- a/app/src/main/java/org/linphone/call/CallOutgoingActivity.java +++ b/app/src/main/java/org/linphone/call/CallOutgoingActivity.java @@ -298,6 +298,10 @@ public class CallOutgoingActivity extends LinphoneGenericActivity implements OnC + (grantResults[i] == PackageManager.PERMISSION_GRANTED ? "granted" : "denied")); + if (permissions[i].equals(Manifest.permission.CAMERA) + && grantResults[i] == PackageManager.PERMISSION_GRANTED) { + LinphoneUtils.reloadVideoDevices(); + } } } } diff --git a/app/src/main/java/org/linphone/utils/LinphoneUtils.java b/app/src/main/java/org/linphone/utils/LinphoneUtils.java index 7fac670e6..2eb4e648a 100644 --- a/app/src/main/java/org/linphone/utils/LinphoneUtils.java +++ b/app/src/main/java/org/linphone/utils/LinphoneUtils.java @@ -65,6 +65,7 @@ import org.linphone.core.Factory; import org.linphone.core.LogCollectionState; import org.linphone.core.ProxyConfig; import org.linphone.core.tools.Log; +import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration; import org.linphone.settings.LinphonePreferences; /** Helpers. */ @@ -272,6 +273,31 @@ public final class LinphoneUtils { return true; } + public static void reloadVideoDevices() { + Core core = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + if (core == null) return; + + Log.i("[Utils] Reloading camera"); + core.reloadVideoDevices(); + + boolean useFrontCam = LinphonePreferences.instance().useFrontCam(); + int camId = 0; + AndroidCameraConfiguration.AndroidCamera[] cameras = + AndroidCameraConfiguration.retrieveCameras(); + for (AndroidCameraConfiguration.AndroidCamera androidCamera : cameras) { + if (androidCamera.frontFacing == useFrontCam) { + camId = androidCamera.id; + break; + } + } + String[] devices = core.getVideoDevicesList(); + if (camId >= devices.length) { + camId = 0; + } + String newDevice = devices[camId]; + core.setVideoDevice(newDevice); + } + public static String getDisplayableUsernameFromAddress(String sipAddress) { String username = sipAddress; Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();