Don't load Camera Manager on video uncapable devices.

This commit is contained in:
Guillaume Beraudo 2011-08-04 16:13:16 +02:00
parent 4d47899e2f
commit 5576cf97ef
5 changed files with 32 additions and 16 deletions

View file

@ -23,6 +23,7 @@ import java.util.List;
import org.linphone.core.LinphoneCallParams; import org.linphone.core.LinphoneCallParams;
import org.linphone.core.LinphoneCore; import org.linphone.core.LinphoneCore;
import org.linphone.core.Log; import org.linphone.core.Log;
import org.linphone.core.Version;
import org.linphone.core.VideoSize; import org.linphone.core.VideoSize;
import org.linphone.core.video.AndroidCameraRecordManager; import org.linphone.core.video.AndroidCameraRecordManager;
@ -83,7 +84,7 @@ public class BandwidthManager {
public void updateWithProfileSettings(LinphoneCore lc, LinphoneCallParams callParams) { public void updateWithProfileSettings(LinphoneCore lc, LinphoneCallParams callParams) {
// Setting Linphone Core Preferred Video Size // Setting Linphone Core Preferred Video Size
boolean bandwidthOKForVideo = isVideoPossible(); boolean bandwidthOKForVideo = isVideoPossible();
if (bandwidthOKForVideo) { if (bandwidthOKForVideo && Version.isVideoCapable()) {
AndroidCameraRecordManager acrm = AndroidCameraRecordManager.getInstance(); AndroidCameraRecordManager acrm = AndroidCameraRecordManager.getInstance();
boolean isPortrait=acrm.isFrameToBeShownPortrait(); boolean isPortrait=acrm.isFrameToBeShownPortrait();
VideoSize targetVideoSize=maxSupportedVideoSize(isPortrait, getMaximumVideoSize(isPortrait), VideoSize targetVideoSize=maxSupportedVideoSize(isPortrait, getMaximumVideoSize(isPortrait),

View file

@ -24,6 +24,7 @@ import org.linphone.core.CallDirection;
import org.linphone.core.LinphoneCall; import org.linphone.core.LinphoneCall;
import org.linphone.core.LinphoneCore; import org.linphone.core.LinphoneCore;
import org.linphone.core.Log; import org.linphone.core.Log;
import org.linphone.core.Version;
import org.linphone.core.LinphoneCall.State; import org.linphone.core.LinphoneCall.State;
import org.linphone.core.video.AndroidCameraRecordManager; import org.linphone.core.video.AndroidCameraRecordManager;
import org.linphone.ui.AddVideoButton; import org.linphone.ui.AddVideoButton;
@ -314,16 +315,19 @@ public class DialerActivity extends SoftVolumeActivity implements LinphoneGuiLis
((CallButton) incomingCallView.findViewById(R.id.Call)).setExternalClickListener(new OnClickListener() { ((CallButton) incomingCallView.findViewById(R.id.Call)).setExternalClickListener(new OnClickListener() {
public void onClick(View v) { public void onClick(View v) {
dialog.dismiss(); dialog.dismiss();
if (Version.isVideoCapable()) {
LinphoneManager.getInstance().resetCameraFromPreferences(); LinphoneManager.getInstance().resetCameraFromPreferences();
// Privacy setting to not share the user camera by default // Privacy setting to not share the user camera by default
boolean prefVideoEnable = LinphoneManager.getInstance().isVideoEnabled(); boolean prefVideoEnable = LinphoneManager.getInstance().isVideoEnabled();
boolean prefAutoShareMyCamera = mPref.getBoolean(getString(R.string.pref_video_automatically_share_my_video_key), false); int key = R.string.pref_video_automatically_share_my_video_key;
boolean prefAutoShareMyCamera = mPref.getBoolean(getString(key), false);
boolean videoMuted = !(prefVideoEnable && prefAutoShareMyCamera); boolean videoMuted = !(prefVideoEnable && prefAutoShareMyCamera);
AndroidCameraRecordManager.getInstance().setMuted(videoMuted); AndroidCameraRecordManager.getInstance().setMuted(videoMuted);
LinphoneManager.getLc().getCurrentCall().enableCamera(prefAutoShareMyCamera); LinphoneManager.getLc().getCurrentCall().enableCamera(prefAutoShareMyCamera);
} }
}
}); });
((HangCallButton) incomingCallView.findViewById(R.id.Decline)).setExternalClickListener(new OnClickListener() { ((HangCallButton) incomingCallView.findViewById(R.id.Decline)).setExternalClickListener(new OnClickListener() {
public void onClick(View v) {dialog.dismiss();} public void onClick(View v) {dialog.dismiss();}

View file

@ -130,8 +130,10 @@ public final class LinphoneManager implements LinphoneCoreListener {
mPowerManager = (PowerManager) c.getSystemService(Context.POWER_SERVICE); mPowerManager = (PowerManager) c.getSystemService(Context.POWER_SERVICE);
mR = c.getResources(); mR = c.getResources();
if (Version.isVideoCapable()) {
AndroidCameraRecordManager.getInstance().startOrientationSensor(c.getApplicationContext()); AndroidCameraRecordManager.getInstance().startOrientationSensor(c.getApplicationContext());
} }
}
private static final int LINPHONE_VOLUME_STREAM = STREAM_VOICE_CALL; private static final int LINPHONE_VOLUME_STREAM = STREAM_VOICE_CALL;
private static final int dbStep = 4; private static final int dbStep = 4;
@ -241,10 +243,16 @@ public final class LinphoneManager implements LinphoneCoreListener {
lAddress.setDisplayName(address.getDisplayedName()); lAddress.setDisplayName(address.getDisplayedName());
try { try {
if (Version.isVideoCapable()) {
boolean prefVideoEnable = isVideoEnabled(); boolean prefVideoEnable = isVideoEnabled();
boolean prefInitiateWithVideo = mPref.getBoolean(mR.getString(R.string.pref_video_initiate_call_with_video_key), false); int key = R.string.pref_video_initiate_call_with_video_key;
boolean prefInitiateWithVideo = mPref.getBoolean(mR.getString(key), false);
resetCameraFromPreferences(); resetCameraFromPreferences();
CallManager.getInstance().inviteAddress(lAddress, prefVideoEnable && prefInitiateWithVideo); CallManager.getInstance().inviteAddress(lAddress, prefVideoEnable && prefInitiateWithVideo);
} else {
CallManager.getInstance().inviteAddress(lAddress, false);
}
} catch (LinphoneCoreException e) { } catch (LinphoneCoreException e) {
serviceListener.tryingNewOutgoingCallButCannotGetCallParameters(); serviceListener.tryingNewOutgoingCallButCannotGetCallParameters();

View file

@ -98,6 +98,8 @@ public class LinphonePreferencesActivity extends PreferenceActivity implements E
// No video // No video
if (!Version.isVideoCapable()) { if (!Version.isVideoCapable()) {
uncheckAndDisableCheckbox(pref_video_enable_key); 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 (prefs().getBoolean(LinphoneActivity.PREF_FIRST_LAUNCH,true)) {
if (fastCpu) { if (fastCpu) {
@ -110,9 +112,7 @@ public class LinphonePreferencesActivity extends PreferenceActivity implements E
detectVideoCodec(R.string.pref_video_codec_h264_key, "H264"); 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); if (Hacks.needSoftvolume()) checkAndDisableCheckbox(R.string.pref_audio_soft_volume_key);
} }

View file

@ -67,6 +67,9 @@ public class AndroidCameraRecordManager {
// singleton // singleton
private AndroidCameraRecordManager() { 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(); cc = Version.sdkAboveOrEqual(9) ? new AndroidCameraConf9() : new AndroidCameraConf5();
Log.i("=== Detected " + cc.getFoundCameras()+ " ==="); Log.i("=== Detected " + cc.getFoundCameras()+ " ===");
cameraId = cc.getFoundCameras().defaultC; cameraId = cc.getFoundCameras().defaultC;