Some fixes and improvements

This commit is contained in:
Sylvain Berfini 2012-04-13 10:05:56 +02:00
parent 44c2bc9419
commit 2839b81037
4 changed files with 59 additions and 35 deletions

View file

@ -38,7 +38,6 @@
<activity android:name="org.linphone.LinphoneActivity" <activity android:name="org.linphone.LinphoneActivity"
android:label="@string/app_name" android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar" android:theme="@android:style/Theme.NoTitleBar"
android:screenOrientation="landscape"
android:launchMode="singleTask" android:launchMode="singleTask"
android:windowSoftInputMode="stateAlwaysHidden|adjustResize" android:windowSoftInputMode="stateAlwaysHidden|adjustResize"
> <!-- android:alwaysRetainTaskState="true" clearTaskOnLaunch="false"--> > <!-- android:alwaysRetainTaskState="true" clearTaskOnLaunch="false"-->

View file

@ -28,6 +28,7 @@ import org.linphone.core.LinphoneCore.RegistrationState;
import org.linphone.core.LinphoneCoreException; import org.linphone.core.LinphoneCoreException;
import org.linphone.core.LinphoneProxyConfig; import org.linphone.core.LinphoneProxyConfig;
import org.linphone.core.Log; import org.linphone.core.Log;
import org.linphone.mediastream.Version;
import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration; import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration;
import org.linphone.ui.AddressAware; import org.linphone.ui.AddressAware;
import org.linphone.ui.AddressText; import org.linphone.ui.AddressText;
@ -40,6 +41,7 @@ import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.hardware.Camera; import android.hardware.Camera;
import android.hardware.Camera.CameraInfo; import android.hardware.Camera.CameraInfo;
import android.net.Uri; import android.net.Uri;
@ -203,6 +205,9 @@ public class DialerActivity extends Activity implements LinphoneGuiListener {
} }
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
if (Version.isXLargeScreen(this)) {
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
setContentView(R.layout.dialer); setContentView(R.layout.dialer);
mAddress = (AddressText) findViewById(R.id.SipUri); mAddress = (AddressText) findViewById(R.id.SipUri);
@ -298,33 +303,37 @@ public class DialerActivity extends Activity implements LinphoneGuiListener {
}); });
} }
mBack.setOnClickListener(new OnClickListener() { if (mBack != null) {
public void onClick(View v) { mBack.setOnClickListener(new OnClickListener() {
LinphoneCall call = LinphoneManager.getLc().getCurrentCall(); public void onClick(View v) {
if (call.getCurrentParamsCopy().getVideoEnabled()) LinphoneCall call = LinphoneManager.getLc().getCurrentCall();
LinphoneActivity.instance().startVideoActivity(call, 0); if (call.getCurrentParamsCopy().getVideoEnabled())
else LinphoneActivity.instance().startVideoActivity(call, 0);
LinphoneActivity.instance().startIncallActivity(); else
} LinphoneActivity.instance().startIncallActivity();
});
mAddCall.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
LinphoneCall call = LinphoneManager.getLc().getCurrentCall();
if (call != null && !call.isInConference()) {
LinphoneManager.getLc().pauseCall(call);
} else {
LinphoneManager.getLc().leaveConference();
} }
});
}
try { if (mAddCall != null) {
LinphoneManager.getLc().invite(mAddress.getText().toString()); mAddCall.setOnClickListener(new OnClickListener() {
} catch (LinphoneCoreException e) { public void onClick(View v) {
Log.e(e); LinphoneCall call = LinphoneManager.getLc().getCurrentCall();
Toast.makeText(DialerActivity.this, R.string.error_adding_new_call, Toast.LENGTH_LONG).show(); if (call != null && !call.isInConference()) {
LinphoneManager.getLc().pauseCall(call);
} else {
LinphoneManager.getLc().leaveConference();
}
try {
LinphoneManager.getLc().invite(mAddress.getText().toString());
} catch (LinphoneCoreException e) {
Log.e(e);
Toast.makeText(DialerActivity.this, R.string.error_adding_new_call, Toast.LENGTH_LONG).show();
}
} }
} });
}); }
} }
private void checkIfOutgoingCallIntentReceived() { private void checkIfOutgoingCallIntentReceived() {
@ -462,10 +471,11 @@ public class DialerActivity extends Activity implements LinphoneGuiListener {
public void onCallStateChanged(LinphoneCall call, State s, String m) { public void onCallStateChanged(LinphoneCall call, State s, String m) {
if (mVideoCaptureView != null && mCamera == null && !LinphoneManager.getLc().isIncall()) if (mVideoCaptureView != null && mCamera == null && !LinphoneManager.getLc().isIncall())
{ {
mInCallControls.setVisibility(View.GONE); if (mInCallControls != null)
mInCallControls.setVisibility(View.GONE);
mCall.setVisibility(View.VISIBLE); mCall.setVisibility(View.VISIBLE);
if (AndroidCameraConfiguration.hasSeveralCameras()) if (AndroidCameraConfiguration.hasSeveralCameras() && mSwitchCamera != null)
mSwitchCamera.setVisibility(View.VISIBLE); mSwitchCamera.setVisibility(View.VISIBLE);
mCamera = Camera.open(mCurrentCameraId); mCamera = Camera.open(mCurrentCameraId);
@ -494,9 +504,11 @@ public class DialerActivity extends Activity implements LinphoneGuiListener {
super.onResume(); super.onResume();
mInCallControls.setVisibility(View.GONE); if (mInCallControls != null)
mInCallControls.setVisibility(View.GONE);
mCall.setVisibility(View.VISIBLE); mCall.setVisibility(View.VISIBLE);
if (AndroidCameraConfiguration.hasSeveralCameras())
if (AndroidCameraConfiguration.hasSeveralCameras() && mSwitchCamera != null)
mSwitchCamera.setVisibility(View.VISIBLE); mSwitchCamera.setVisibility(View.VISIBLE);
if (mVideoCaptureView != null && mCamera == null && !LinphoneManager.getLc().isIncall()) if (mVideoCaptureView != null && mCamera == null && !LinphoneManager.getLc().isIncall())
@ -506,9 +518,12 @@ public class DialerActivity extends Activity implements LinphoneGuiListener {
mCamera.startPreview(); mCamera.startPreview();
} else if (LinphoneManager.getLc().isIncall()) } else if (LinphoneManager.getLc().isIncall())
{ {
mInCallControls.setVisibility(View.VISIBLE); if (mInCallControls != null)
mInCallControls.setVisibility(View.VISIBLE);
mCall.setVisibility(View.GONE); mCall.setVisibility(View.GONE);
mSwitchCamera.setVisibility(View.INVISIBLE);
if (mSwitchCamera != null)
mSwitchCamera.setVisibility(View.INVISIBLE);
} }
} }

View file

@ -23,10 +23,10 @@ import static android.content.Intent.ACTION_MAIN;
import org.linphone.LinphoneSimpleListener.LinphoneOnCallStateChangedListener; import org.linphone.LinphoneSimpleListener.LinphoneOnCallStateChangedListener;
import org.linphone.core.LinphoneCall; import org.linphone.core.LinphoneCall;
import org.linphone.core.LinphoneCore;
import org.linphone.core.Log;
import org.linphone.core.LinphoneCall.State; import org.linphone.core.LinphoneCall.State;
import org.linphone.core.LinphoneCore;
import org.linphone.core.LinphoneCore.RegistrationState; import org.linphone.core.LinphoneCore.RegistrationState;
import org.linphone.core.Log;
import org.linphone.mediastream.Version; import org.linphone.mediastream.Version;
import android.app.AlertDialog; import android.app.AlertDialog;
@ -46,10 +46,10 @@ import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.OrientationEventListener; import android.view.OrientationEventListener;
import android.widget.TabHost.TabSpec;
import android.widget.TabWidget; import android.widget.TabWidget;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import android.widget.TabHost.TabSpec;
public class LinphoneActivity extends TabActivity implements ContactPicked public class LinphoneActivity extends TabActivity implements ContactPicked
, LinphoneOnCallStateChangedListener , LinphoneOnCallStateChangedListener

View file

@ -77,6 +77,7 @@ public class VideoCallActivity extends Activity implements LinphoneOnCallStateCh
AndroidVideoWindowImpl androidVideoWindowImpl; AndroidVideoWindowImpl androidVideoWindowImpl;
private Runnable mCallQualityUpdater, mControls; private Runnable mCallQualityUpdater, mControls;
private LinearLayout mControlsLayout; private LinearLayout mControlsLayout;
private boolean shouldRestartVideoOnResume = false;
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -256,6 +257,11 @@ public class VideoCallActivity extends Activity implements LinphoneOnCallStateCh
if (mControlsLayout != null) if (mControlsLayout != null)
mControlsLayout.setVisibility(View.GONE); mControlsLayout.setVisibility(View.GONE);
if (shouldRestartVideoOnResume) {
LinphoneManager.getLc().getCurrentCall().enableCamera(true);
shouldRestartVideoOnResume = false;
}
} }
public boolean onKeyDown(int keyCode, KeyEvent event) { public boolean onKeyDown(int keyCode, KeyEvent event) {
@ -278,6 +284,10 @@ public class VideoCallActivity extends Activity implements LinphoneOnCallStateCh
LinphoneManager.removeListener(this); LinphoneManager.removeListener(this);
if (isFinishing()) { if (isFinishing()) {
videoCall = null; // release reference videoCall = null; // release reference
} else {
// Send NoWebcam since Android 4.0 can't get the video from the webcam if the activity is not in foreground
shouldRestartVideoOnResume = true;
LinphoneManager.getLc().getCurrentCall().enableCamera(false);
} }
launched=false; launched=false;
synchronized (androidVideoWindowImpl) { synchronized (androidVideoWindowImpl) {