Simplify camera sending, video activity opening, speaker state
- don't pause camera sending on video activity paused / finished; - don't try to be clever to guess when to open video call activity but open automatically on the transition to streams running and the camera is enabled todo: fix autostart on incoming call due to postponed start of activity; - don't try to restore previous audio setting when back from video call.
This commit is contained in:
parent
e4b80f42b7
commit
0c9f2e6b69
6 changed files with 35 additions and 88 deletions
|
@ -30,7 +30,6 @@ import org.linphone.LinphoneManagerWaitHelper.LinphoneManagerReadyListener;
|
||||||
import org.linphone.LinphoneSimpleListener.LinphoneOnAudioChangedListener;
|
import org.linphone.LinphoneSimpleListener.LinphoneOnAudioChangedListener;
|
||||||
import org.linphone.LinphoneSimpleListener.LinphoneOnCallEncryptionChangedListener;
|
import org.linphone.LinphoneSimpleListener.LinphoneOnCallEncryptionChangedListener;
|
||||||
import org.linphone.LinphoneSimpleListener.LinphoneOnCallStateChangedListener;
|
import org.linphone.LinphoneSimpleListener.LinphoneOnCallStateChangedListener;
|
||||||
import org.linphone.LinphoneSimpleListener.LinphoneOnVideoCallReadyListener;
|
|
||||||
import org.linphone.core.LinphoneAddress;
|
import org.linphone.core.LinphoneAddress;
|
||||||
import org.linphone.core.LinphoneCall;
|
import org.linphone.core.LinphoneCall;
|
||||||
import org.linphone.core.LinphoneCore;
|
import org.linphone.core.LinphoneCore;
|
||||||
|
@ -69,7 +68,6 @@ import android.widget.ToggleButton;
|
||||||
public class ConferenceActivity extends ListActivity implements
|
public class ConferenceActivity extends ListActivity implements
|
||||||
LinphoneManagerReadyListener,
|
LinphoneManagerReadyListener,
|
||||||
LinphoneOnAudioChangedListener,
|
LinphoneOnAudioChangedListener,
|
||||||
LinphoneOnVideoCallReadyListener,
|
|
||||||
LinphoneOnCallStateChangedListener,
|
LinphoneOnCallStateChangedListener,
|
||||||
LinphoneOnCallEncryptionChangedListener,
|
LinphoneOnCallEncryptionChangedListener,
|
||||||
Comparator<LinphoneCall>,
|
Comparator<LinphoneCall>,
|
||||||
|
@ -180,11 +178,6 @@ public class ConferenceActivity extends ListActivity implements
|
||||||
mMuteMicButton.setChecked(LinphoneManager.getLc().isMicMuted());
|
mMuteMicButton.setChecked(LinphoneManager.getLc().isMicMuted());
|
||||||
|
|
||||||
updateAddCallButton();
|
updateAddCallButton();
|
||||||
|
|
||||||
LinphoneCall currentCall = LinphoneManager.getLc().getCurrentCall();
|
|
||||||
if (currentCall != null) {
|
|
||||||
tryToStartVideoActivity(currentCall, currentCall.getState());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateSoundLock() {
|
private void updateSoundLock() {
|
||||||
|
@ -513,7 +506,9 @@ public class ConferenceActivity extends ListActivity implements
|
||||||
lc().removeFromConference(call);
|
lc().removeFromConference(call);
|
||||||
break;
|
break;
|
||||||
case R.id.addVideo:
|
case R.id.addVideo:
|
||||||
LinphoneManager.getInstance().addVideo();
|
if (!LinphoneManager.getInstance().addVideo()) {
|
||||||
|
LinphoneActivity.instance().startVideoActivity();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new RuntimeException("unknown id " + v.getId());
|
throw new RuntimeException("unknown id " + v.getId());
|
||||||
|
@ -780,23 +775,11 @@ public class ConferenceActivity extends ListActivity implements
|
||||||
control.setVisibility(showControl ? VISIBLE : GONE);
|
control.setVisibility(showControl ? VISIBLE : GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void tryToStartVideoActivity(LinphoneCall call, State state) {
|
|
||||||
if (State.StreamsRunning == state && call.getCurrentParamsCopy().getVideoEnabled()) {
|
|
||||||
if (call.cameraEnabled() ) {
|
|
||||||
LinphoneActivity.instance().startVideoActivity();
|
|
||||||
} else {
|
|
||||||
Log.i("Not starting video call activity as the camera is disabled");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onCallStateChanged(final LinphoneCall call, final State state,
|
public void onCallStateChanged(final LinphoneCall call, final State state,
|
||||||
final String message) {
|
final String message) {
|
||||||
final String stateStr = call + " " + state.toString();
|
final String stateStr = call + " " + state.toString();
|
||||||
Log.d("ConferenceActivity received state ",stateStr);
|
Log.d("ConferenceActivity received state ",stateStr);
|
||||||
|
|
||||||
tryToStartVideoActivity(call, state);
|
|
||||||
|
|
||||||
mHandler.post(new Runnable() {
|
mHandler.post(new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
CalleeListAdapter adapter = (CalleeListAdapter) getListAdapter();
|
CalleeListAdapter adapter = (CalleeListAdapter) getListAdapter();
|
||||||
|
@ -966,11 +949,6 @@ public class ConferenceActivity extends ListActivity implements
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRequestedVideoCallReady(LinphoneCall call) {
|
|
||||||
LinphoneActivity.instance().startVideoActivity();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCallEncryptionChanged(LinphoneCall call, boolean encrypted,
|
public void onCallEncryptionChanged(LinphoneCall call, boolean encrypted,
|
||||||
String authenticationToken) {
|
String authenticationToken) {
|
||||||
|
@ -982,34 +960,4 @@ public class ConferenceActivity extends ListActivity implements
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* public int compare(LinphoneCall c1, LinphoneCall c2) { if (c1 == c2)
|
|
||||||
* return 0;
|
|
||||||
*
|
|
||||||
* boolean inConfC1 = c1.isInConference(); boolean inConfC2 =
|
|
||||||
* c2.isInConference(); if (inConfC1 && !inConfC2) return -1; if (!inConfC1
|
|
||||||
* && inConfC2) return 1;
|
|
||||||
*
|
|
||||||
* int compUserName =
|
|
||||||
* c1.getRemoteAddress().getUserName().compareToIgnoreCase
|
|
||||||
* (c2.getRemoteAddress().getUserName()); if (inConfC1 && inConfC2) { return
|
|
||||||
* compUserName; }
|
|
||||||
*
|
|
||||||
* // bellow, ringings and incoming int c1State = c1.getState().value(); int
|
|
||||||
* c2State = c2.getState().value();
|
|
||||||
*
|
|
||||||
* boolean c1StateIsEstablishing = c1State == State.IncomingReceived ||
|
|
||||||
* c1State == State.ID_OUTGOING_RINGING; boolean c2StateIsEstablishing =
|
|
||||||
* c2State == State.IncomingReceived || c2State ==
|
|
||||||
* State.ID_OUTGOING_RINGING;
|
|
||||||
*
|
|
||||||
* // Xor only one establishing state if (c1StateIsEstablishing ^
|
|
||||||
* c2StateIsEstablishing) { // below return !c1StateIsEstablishing ? -1 : 1;
|
|
||||||
* }
|
|
||||||
*
|
|
||||||
* // Xor only one paused state if (c1State == State.Paused ^ c2State ==
|
|
||||||
* State.Paused) { return c1State == State.Paused ? -1 : 1; }
|
|
||||||
*
|
|
||||||
* return compUserName; //Duration() - c1.getDuration(); }
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@ import static android.content.Intent.ACTION_MAIN;
|
||||||
|
|
||||||
import org.linphone.LinphoneManager.EcCalibrationListener;
|
import org.linphone.LinphoneManager.EcCalibrationListener;
|
||||||
import org.linphone.LinphoneSimpleListener.LinphoneOnCallStateChangedListener;
|
import org.linphone.LinphoneSimpleListener.LinphoneOnCallStateChangedListener;
|
||||||
|
import org.linphone.LinphoneSimpleListener.LinphoneOnVideoCallReadyListener;
|
||||||
import org.linphone.core.LinphoneAddress;
|
import org.linphone.core.LinphoneAddress;
|
||||||
import org.linphone.core.LinphoneCall;
|
import org.linphone.core.LinphoneCall;
|
||||||
import org.linphone.core.LinphoneCore;
|
import org.linphone.core.LinphoneCore;
|
||||||
|
@ -58,7 +59,11 @@ import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
import android.widget.TabHost.TabSpec;
|
import android.widget.TabHost.TabSpec;
|
||||||
|
|
||||||
public class LinphoneActivity extends TabActivity implements SensorEventListener, ContactPicked, LinphoneOnCallStateChangedListener {
|
public class LinphoneActivity extends TabActivity implements
|
||||||
|
SensorEventListener, ContactPicked,
|
||||||
|
LinphoneOnCallStateChangedListener,
|
||||||
|
LinphoneOnVideoCallReadyListener
|
||||||
|
{
|
||||||
public static final String DIALER_TAB = "dialer";
|
public static final String DIALER_TAB = "dialer";
|
||||||
public static final String PREF_FIRST_LAUNCH = "pref_first_launch";
|
public static final String PREF_FIRST_LAUNCH = "pref_first_launch";
|
||||||
private static final int video_activity = 100;
|
private static final int video_activity = 100;
|
||||||
|
@ -89,7 +94,7 @@ public class LinphoneActivity extends TabActivity implements SensorEventListener
|
||||||
return instance != null;
|
return instance != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
static final LinphoneActivity instance() {
|
public static final LinphoneActivity instance() {
|
||||||
if (instance != null) return instance;
|
if (instance != null) return instance;
|
||||||
|
|
||||||
throw new RuntimeException("LinphoneActivity not instantiated yet");
|
throw new RuntimeException("LinphoneActivity not instantiated yet");
|
||||||
|
@ -462,6 +467,8 @@ public class LinphoneActivity extends TabActivity implements SensorEventListener
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startVideoActivity() {
|
public void startVideoActivity() {
|
||||||
|
LinphoneCall call = LinphoneManager.getLc().getCurrentCall();
|
||||||
|
if (call != null) call.enableCamera(true);
|
||||||
mHandler.post(new Runnable() {
|
mHandler.post(new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
startActivityForResult(new Intent().setClass(
|
startActivityForResult(new Intent().setClass(
|
||||||
|
@ -536,6 +543,11 @@ public class LinphoneActivity extends TabActivity implements SensorEventListener
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onVideoCallReady(LinphoneCall call) {
|
||||||
|
startVideoActivity();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ContactPicked {
|
interface ContactPicked {
|
||||||
|
|
|
@ -996,15 +996,14 @@ public final class LinphoneManager implements LinphoneCoreListener {
|
||||||
e.commit();
|
e.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
private LinphoneCall requestedVideoCall;
|
/**
|
||||||
|
*
|
||||||
|
* @return false if already in video call.
|
||||||
|
*/
|
||||||
public boolean addVideo() {
|
public boolean addVideo() {
|
||||||
requestedVideoCall = mLc.getCurrentCall();
|
LinphoneCall call = mLc.getCurrentCall();
|
||||||
if (requestedVideoCall == null) return false;
|
if (call != null) call.enableCamera(true);
|
||||||
|
return reinviteWithVideo();
|
||||||
if (!reinviteWithVideo()) {
|
|
||||||
listenerDispatcher.onAlreadyInVideoCall();
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean acceptCallIfIncomingPending() throws LinphoneCoreException {
|
public boolean acceptCallIfIncomingPending() throws LinphoneCoreException {
|
||||||
|
@ -1160,10 +1159,6 @@ public final class LinphoneManager implements LinphoneCoreListener {
|
||||||
this.serviceListener = s;
|
this.serviceListener = s;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onAlreadyInVideoCall() {
|
|
||||||
if (serviceListener != null) serviceListener.onAlreadyInVideoCall();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onCallEncryptionChanged(LinphoneCall call,
|
public void onCallEncryptionChanged(LinphoneCall call,
|
||||||
boolean encrypted, String authenticationToken) {
|
boolean encrypted, String authenticationToken) {
|
||||||
if (serviceListener != null) {
|
if (serviceListener != null) {
|
||||||
|
@ -1180,17 +1175,13 @@ public final class LinphoneManager implements LinphoneCoreListener {
|
||||||
boolean sendCamera = shareMyCamera() && mLc.getConferenceSize() == 0;
|
boolean sendCamera = shareMyCamera() && mLc.getConferenceSize() == 0;
|
||||||
call.enableCamera(sendCamera);
|
call.enableCamera(sendCamera);
|
||||||
}
|
}
|
||||||
if (state == State.CallEnd && call == requestedVideoCall) {
|
|
||||||
requestedVideoCall = null; // drop reference
|
|
||||||
}
|
|
||||||
if (state == State.CallEnd && mLc.getCallsNb() == 0) {
|
if (state == State.CallEnd && mLc.getCallsNb() == 0) {
|
||||||
routeAudioToReceiver(true);
|
routeAudioToReceiver(true);
|
||||||
}
|
}
|
||||||
if (state == State.StreamsRunning && call == requestedVideoCall && call.getCurrentParamsCopy().getVideoEnabled()) {
|
if (state == State.StreamsRunning && call.getCurrentParamsCopy().getVideoEnabled()) {
|
||||||
for (LinphoneOnVideoCallReadyListener l : getSimpleListeners(LinphoneOnVideoCallReadyListener.class)) {
|
for (LinphoneOnVideoCallReadyListener l : getSimpleListeners(LinphoneOnVideoCallReadyListener.class)) {
|
||||||
l.onRequestedVideoCallReady(call);
|
l.onVideoCallReady(call);
|
||||||
}
|
}
|
||||||
requestedVideoCall = null;
|
|
||||||
}
|
}
|
||||||
if (serviceListener != null) serviceListener.onCallStateChanged(call, state, message);
|
if (serviceListener != null) serviceListener.onCallStateChanged(call, state, message);
|
||||||
for (LinphoneOnCallStateChangedListener l : getSimpleListeners(LinphoneOnCallStateChangedListener.class)) {
|
for (LinphoneOnCallStateChangedListener l : getSimpleListeners(LinphoneOnCallStateChangedListener.class)) {
|
||||||
|
|
|
@ -38,8 +38,6 @@ public interface LinphoneSimpleListener {
|
||||||
void onRegistrationStateChanged(RegistrationState state, String message);
|
void onRegistrationStateChanged(RegistrationState state, String message);
|
||||||
void onRingerPlayerCreated(MediaPlayer mRingerPlayer);
|
void onRingerPlayerCreated(MediaPlayer mRingerPlayer);
|
||||||
void onDisplayStatus(String message);
|
void onDisplayStatus(String message);
|
||||||
void onAlreadyInVideoCall();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -61,6 +59,6 @@ public interface LinphoneSimpleListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static interface LinphoneOnVideoCallReadyListener extends LinphoneSimpleListener {
|
public static interface LinphoneOnVideoCallReadyListener extends LinphoneSimpleListener {
|
||||||
void onRequestedVideoCallReady(LinphoneCall call);
|
void onVideoCallReady(LinphoneCall call);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -286,7 +286,6 @@ public class VideoCallActivity extends Activity implements LinphoneOnCallStateCh
|
||||||
if (isFinishing()) {
|
if (isFinishing()) {
|
||||||
videoCall = null; // release reference
|
videoCall = null; // release reference
|
||||||
}
|
}
|
||||||
LinphoneManager.getInstance().restoreUserRequestedSpeaker();
|
|
||||||
launched=false;
|
launched=false;
|
||||||
synchronized (androidVideoWindowImpl) {
|
synchronized (androidVideoWindowImpl) {
|
||||||
/* this call will destroy native opengl renderer
|
/* this call will destroy native opengl renderer
|
||||||
|
@ -297,14 +296,10 @@ public class VideoCallActivity extends Activity implements LinphoneOnCallStateCh
|
||||||
|
|
||||||
LinphoneManager.getLc().setPreviewWindow(null);
|
LinphoneManager.getLc().setPreviewWindow(null);
|
||||||
|
|
||||||
if (LinphoneManager.getLc().isIncall()) {
|
final LinphoneCall currentCall = LinphoneManager.getLc().getCurrentCall();
|
||||||
// we're getting paused for real
|
if (currentCall != null && getChangingConfigurations() != 0) {
|
||||||
if (getChangingConfigurations() == 0) {
|
|
||||||
LinphoneManager.getInstance().sendStaticImage(true);
|
|
||||||
} else {
|
|
||||||
LinphoneManager.getLc().setDeviceRotation(AndroidVideoWindowImpl.rotationToAngle(getWindowManager().getDefaultDisplay().getOrientation()));
|
LinphoneManager.getLc().setDeviceRotation(AndroidVideoWindowImpl.rotationToAngle(getWindowManager().getDefaultDisplay().getOrientation()));
|
||||||
LinphoneManager.getLc().updateCall(LinphoneManager.getLc().getCurrentCall(), null);
|
LinphoneManager.getLc().updateCall(currentCall, null);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (mCallQualityUpdater!=null){
|
if (mCallQualityUpdater!=null){
|
||||||
refreshHandler.removeCallbacks(mCallQualityUpdater);
|
refreshHandler.removeCallbacks(mCallQualityUpdater);
|
||||||
|
|
|
@ -18,6 +18,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
package org.linphone.ui;
|
package org.linphone.ui;
|
||||||
|
|
||||||
|
import org.linphone.LinphoneActivity;
|
||||||
import org.linphone.LinphoneManager;
|
import org.linphone.LinphoneManager;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
@ -38,6 +39,8 @@ public class AddVideoButton extends ImageButton implements OnClickListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
LinphoneManager.getInstance().addVideo();
|
if (!LinphoneManager.getInstance().addVideo()) {
|
||||||
|
LinphoneActivity.instance().startVideoActivity();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue