diff --git a/src/org/linphone/BandwidthManager.java b/src/org/linphone/BandwidthManager.java index 830823c5b..f5df85e87 100644 --- a/src/org/linphone/BandwidthManager.java +++ b/src/org/linphone/BandwidthManager.java @@ -23,6 +23,7 @@ import java.util.List; import org.linphone.core.LinphoneCallParams; import org.linphone.core.LinphoneCore; import org.linphone.core.Log; +import org.linphone.core.Version; import org.linphone.core.VideoSize; import org.linphone.core.video.AndroidCameraRecordManager; @@ -83,7 +84,7 @@ public class BandwidthManager { public void updateWithProfileSettings(LinphoneCore lc, LinphoneCallParams callParams) { // Setting Linphone Core Preferred Video Size boolean bandwidthOKForVideo = isVideoPossible(); - if (bandwidthOKForVideo) { + if (bandwidthOKForVideo && Version.isVideoCapable()) { AndroidCameraRecordManager acrm = AndroidCameraRecordManager.getInstance(); boolean isPortrait=acrm.isFrameToBeShownPortrait(); VideoSize targetVideoSize=maxSupportedVideoSize(isPortrait, getMaximumVideoSize(isPortrait), diff --git a/src/org/linphone/DialerActivity.java b/src/org/linphone/DialerActivity.java index c7e248e64..f92e6a6ec 100644 --- a/src/org/linphone/DialerActivity.java +++ b/src/org/linphone/DialerActivity.java @@ -24,6 +24,7 @@ import org.linphone.core.CallDirection; import org.linphone.core.LinphoneCall; import org.linphone.core.LinphoneCore; import org.linphone.core.Log; +import org.linphone.core.Version; import org.linphone.core.LinphoneCall.State; import org.linphone.core.video.AndroidCameraRecordManager; import org.linphone.ui.AddVideoButton; @@ -314,15 +315,18 @@ public class DialerActivity extends SoftVolumeActivity implements LinphoneGuiLis ((CallButton) incomingCallView.findViewById(R.id.Call)).setExternalClickListener(new OnClickListener() { public void onClick(View v) { dialog.dismiss(); - LinphoneManager.getInstance().resetCameraFromPreferences(); + if (Version.isVideoCapable()) { + LinphoneManager.getInstance().resetCameraFromPreferences(); - // Privacy setting to not share the user camera by default - boolean prefVideoEnable = LinphoneManager.getInstance().isVideoEnabled(); - boolean prefAutoShareMyCamera = mPref.getBoolean(getString(R.string.pref_video_automatically_share_my_video_key), false); - boolean videoMuted = !(prefVideoEnable && prefAutoShareMyCamera); - AndroidCameraRecordManager.getInstance().setMuted(videoMuted); + // Privacy setting to not share the user camera by default + boolean prefVideoEnable = LinphoneManager.getInstance().isVideoEnabled(); + int key = R.string.pref_video_automatically_share_my_video_key; + boolean prefAutoShareMyCamera = mPref.getBoolean(getString(key), false); + boolean videoMuted = !(prefVideoEnable && prefAutoShareMyCamera); + AndroidCameraRecordManager.getInstance().setMuted(videoMuted); - LinphoneManager.getLc().getCurrentCall().enableCamera(prefAutoShareMyCamera); + LinphoneManager.getLc().getCurrentCall().enableCamera(prefAutoShareMyCamera); + } } }); ((HangCallButton) incomingCallView.findViewById(R.id.Decline)).setExternalClickListener(new OnClickListener() { diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java index 107bbb9e7..6c2178d8b 100644 --- a/src/org/linphone/LinphoneManager.java +++ b/src/org/linphone/LinphoneManager.java @@ -130,7 +130,9 @@ public final class LinphoneManager implements LinphoneCoreListener { mPowerManager = (PowerManager) c.getSystemService(Context.POWER_SERVICE); mR = c.getResources(); - AndroidCameraRecordManager.getInstance().startOrientationSensor(c.getApplicationContext()); + if (Version.isVideoCapable()) { + AndroidCameraRecordManager.getInstance().startOrientationSensor(c.getApplicationContext()); + } } private static final int LINPHONE_VOLUME_STREAM = STREAM_VOICE_CALL; @@ -241,10 +243,16 @@ public final class LinphoneManager implements LinphoneCoreListener { lAddress.setDisplayName(address.getDisplayedName()); try { - boolean prefVideoEnable = isVideoEnabled(); - boolean prefInitiateWithVideo = mPref.getBoolean(mR.getString(R.string.pref_video_initiate_call_with_video_key), false); - resetCameraFromPreferences(); - CallManager.getInstance().inviteAddress(lAddress, prefVideoEnable && prefInitiateWithVideo); + if (Version.isVideoCapable()) { + boolean prefVideoEnable = isVideoEnabled(); + int key = R.string.pref_video_initiate_call_with_video_key; + boolean prefInitiateWithVideo = mPref.getBoolean(mR.getString(key), false); + resetCameraFromPreferences(); + CallManager.getInstance().inviteAddress(lAddress, prefVideoEnable && prefInitiateWithVideo); + } else { + CallManager.getInstance().inviteAddress(lAddress, false); + } + } catch (LinphoneCoreException e) { serviceListener.tryingNewOutgoingCallButCannotGetCallParameters(); diff --git a/src/org/linphone/LinphonePreferencesActivity.java b/src/org/linphone/LinphonePreferencesActivity.java index ea2084c65..92dc31205 100644 --- a/src/org/linphone/LinphonePreferencesActivity.java +++ b/src/org/linphone/LinphonePreferencesActivity.java @@ -98,6 +98,8 @@ public class LinphonePreferencesActivity extends PreferenceActivity implements E // No video if (!Version.isVideoCapable()) { uncheckAndDisableCheckbox(pref_video_enable_key); + } else if (!AndroidCameraRecordManager.getInstance().hasFrontCamera()) { + uncheckDisableAndHideCheckbox(R.string.pref_video_use_front_camera_key); } if (prefs().getBoolean(LinphoneActivity.PREF_FIRST_LAUNCH,true)) { if (fastCpu) { @@ -110,9 +112,7 @@ public class LinphonePreferencesActivity extends PreferenceActivity implements E detectVideoCodec(R.string.pref_video_codec_h264_key, "H264"); - if (!AndroidCameraRecordManager.getInstance().hasFrontCamera()) { - uncheckDisableAndHideCheckbox(R.string.pref_video_use_front_camera_key); - } + if (Hacks.needSoftvolume()) checkAndDisableCheckbox(R.string.pref_audio_soft_volume_key); } diff --git a/src/org/linphone/core/video/AndroidCameraRecordManager.java b/src/org/linphone/core/video/AndroidCameraRecordManager.java index 22f437d21..7e8e8b613 100644 --- a/src/org/linphone/core/video/AndroidCameraRecordManager.java +++ b/src/org/linphone/core/video/AndroidCameraRecordManager.java @@ -67,6 +67,9 @@ public class AndroidCameraRecordManager { // singleton private AndroidCameraRecordManager() { + if (!Version.isVideoCapable()) { // imply sdk>=5 + throw new RuntimeException("AndroidCameraRecordManager: hardware is not video capable"); + } cc = Version.sdkAboveOrEqual(9) ? new AndroidCameraConf9() : new AndroidCameraConf5(); Log.i("=== Detected " + cc.getFoundCameras()+ " ==="); cameraId = cc.getFoundCameras().defaultC;