diff --git a/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java index 99de0d3a37148243ed6d4d1fb1cd5206b290fed5..436b3684133b9e0d2a34e01d078ec49e092043f2 100644 --- a/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java +++ b/ring-android/app/src/main/java/cx/ring/fragments/CallFragment.java @@ -1415,8 +1415,8 @@ public class CallFragment extends BaseSupportFragment<CallPresenter> implements // If a call media handler doesn't have an icon use a standard android icon for (String callMediaHandler : callMediaHandlers) { Map<String, String> details = getCallMediaHandlerDetails(callMediaHandler); - String drawablePath = details.get("icoPath"); - Drawable handlerIcon = StringUtils.isEmpty(drawablePath) ? null : Drawable.createFromPath(details.get("icoPath")); + String drawablePath = details.get("iconPath"); + Drawable handlerIcon = StringUtils.isEmpty(drawablePath) ? null : Drawable.createFromPath(details.get("iconPath")); if (handlerIcon == null) { handlerIcon = context.getDrawable(R.drawable.ic_jami); } @@ -1429,8 +1429,6 @@ public class CallFragment extends BaseSupportFragment<CallPresenter> implements } if (choosePluginMode) { - //change preview image - displayVideoSurface(true,true); // hide hang up button and other call buttons displayHangupButton(false); // Display the plugins recyclerpicker @@ -1450,13 +1448,12 @@ public class CallFragment extends BaseSupportFragment<CallPresenter> implements } if (position > 0) { String callMediaId = callMediaHandlers.get(position-1); - toggleCallMediaHandler(callMediaId, true); + presenter.startPlugin(callMediaId); + //toggleCallMediaHandler(callMediaId, true); } } } else { - //change preview image - displayVideoSurface(true,true); if (previousPluginPosition > 0) { String callMediaId = callMediaHandlers. get(previousPluginPosition-1); @@ -1464,10 +1461,14 @@ public class CallFragment extends BaseSupportFragment<CallPresenter> implements toggleCallMediaHandler(callMediaId, false); rp.scrollToPosition(previousPluginPosition); } + presenter.stopPlugin(); binding.recyclerPicker.setVisibility(View.GONE); movePreview(false); displayHangupButton(true); } + + //change preview image + displayVideoSurface(true,true); } /** diff --git a/ring-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.java b/ring-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.java index 04fd494c276271c2cf89beeafb9645e962a2ebbd..c19257110853dd3e3896f3cbd8437c2149e01011 100644 --- a/ring-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.java +++ b/ring-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.java @@ -58,6 +58,8 @@ import cx.ring.utils.Log; import cx.ring.utils.Ringer; import io.reactivex.Completable; +import static cx.ring.daemon.RingserviceJNI.toggleCallMediaHandler; + public class HardwareServiceImpl extends HardwareService implements AudioManager.OnAudioFocusChangeListener, BluetoothWrapper.BluetoothChangeListener { private static final Point VIDEO_SIZE_LOW = new Point(320, 240); @@ -86,6 +88,8 @@ public class HardwareServiceImpl extends HardwareService implements AudioManager private boolean mShouldCapture = false; private boolean mShouldSpeakerphone = false; private final boolean mHasSpeakerPhone; + private boolean mIsChoosePlugin = false; + private String mMediaHandlerId; public HardwareServiceImpl(Context context) { mContext = context; @@ -478,6 +482,20 @@ public class HardwareServiceImpl extends HardwareService implements AudioManager } } + public void startMediaHandler(String mediaHandlerId) { + mIsChoosePlugin = true; + mMediaHandlerId = mediaHandlerId; + } + + private void toggleMediaHandler() { + toggleCallMediaHandler(mMediaHandlerId, true); + } + + public void stopMediaHandler() { + mIsChoosePlugin = false; + mMediaHandlerId = ""; + } + @Override public void startCapture(@Nullable String camId) { if (mIsScreenSharing) { @@ -506,7 +524,7 @@ public class HardwareServiceImpl extends HardwareService implements AudioManager return; } final Conference conf = mCameraPreviewCall.get(); - boolean useHardwareCodec = mPreferenceService.isHardwareAccelerationEnabled() && (conf == null || !conf.isConference()); + boolean useHardwareCodec = mPreferenceService.isHardwareAccelerationEnabled() && (conf == null || !conf.isConference()) && !mIsChoosePlugin; if (conf != null && useHardwareCodec) { SipCall call = conf.getCall(); if (call != null) { @@ -526,6 +544,8 @@ public class HardwareServiceImpl extends HardwareService implements AudioManager new CameraService.CameraListener() { @Override public void onOpened() { + if(mIsChoosePlugin && !mMediaHandlerId.isEmpty()) + toggleMediaHandler(); } @Override diff --git a/ring-android/libringclient/src/main/java/cx/ring/call/CallPresenter.java b/ring-android/libringclient/src/main/java/cx/ring/call/CallPresenter.java index 207d4b1f9c678c2ce059eea9cfba24a55118dbd9..ccd4ced88c3069e08b89be248e1cd04cb6c6fb9b 100644 --- a/ring-android/libringclient/src/main/java/cx/ring/call/CallPresenter.java +++ b/ring-android/libringclient/src/main/java/cx/ring/call/CallPresenter.java @@ -720,4 +720,18 @@ public class CallPresenter extends RootPresenter<CallView> { public boolean isMaximized(SipCall call) { return mConference.getMaximizedCall() == call; } + + public void startPlugin(String mediaHandlerId) { + mHardwareService.startMediaHandler(mediaHandlerId); + if(mConference == null) + return; + mHardwareService.switchInput(mConference.getId(), mHardwareService.isPreviewFromFrontCamera()); + } + + public void stopPlugin() { + mHardwareService.stopMediaHandler(); + if(mConference == null) + return; + mHardwareService.switchInput(mConference.getId(), mHardwareService.isPreviewFromFrontCamera()); + } } diff --git a/ring-android/libringclient/src/main/java/cx/ring/services/HardwareService.java b/ring-android/libringclient/src/main/java/cx/ring/services/HardwareService.java index de47bef2ea1df98bcd6b3025fa6552e53b0a45b7..722facc76cbbbfdb2333fe98b5fb85aca603cf3a 100644 --- a/ring-android/libringclient/src/main/java/cx/ring/services/HardwareService.java +++ b/ring-android/libringclient/src/main/java/cx/ring/services/HardwareService.java @@ -163,6 +163,10 @@ public abstract class HardwareService { public abstract void unregisterCameraDetectionCallback(); + public abstract void startMediaHandler(String mediaHandlerId); + + public abstract void stopMediaHandler(); + public void connectivityChanged(boolean isConnected) { Log.i(TAG, "connectivityChange() " + isConnected); connectivityEvents.onNext(isConnected);