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.LinphoneOnCallEncryptionChangedListener;
|
||||
import org.linphone.LinphoneSimpleListener.LinphoneOnCallStateChangedListener;
|
||||
import org.linphone.LinphoneSimpleListener.LinphoneOnVideoCallReadyListener;
|
||||
import org.linphone.core.LinphoneAddress;
|
||||
import org.linphone.core.LinphoneCall;
|
||||
import org.linphone.core.LinphoneCore;
|
||||
|
@ -69,7 +68,6 @@ import android.widget.ToggleButton;
|
|||
public class ConferenceActivity extends ListActivity implements
|
||||
LinphoneManagerReadyListener,
|
||||
LinphoneOnAudioChangedListener,
|
||||
LinphoneOnVideoCallReadyListener,
|
||||
LinphoneOnCallStateChangedListener,
|
||||
LinphoneOnCallEncryptionChangedListener,
|
||||
Comparator<LinphoneCall>,
|
||||
|
@ -180,11 +178,6 @@ public class ConferenceActivity extends ListActivity implements
|
|||
mMuteMicButton.setChecked(LinphoneManager.getLc().isMicMuted());
|
||||
|
||||
updateAddCallButton();
|
||||
|
||||
LinphoneCall currentCall = LinphoneManager.getLc().getCurrentCall();
|
||||
if (currentCall != null) {
|
||||
tryToStartVideoActivity(currentCall, currentCall.getState());
|
||||
}
|
||||
}
|
||||
|
||||
private void updateSoundLock() {
|
||||
|
@ -513,7 +506,9 @@ public class ConferenceActivity extends ListActivity implements
|
|||
lc().removeFromConference(call);
|
||||
break;
|
||||
case R.id.addVideo:
|
||||
LinphoneManager.getInstance().addVideo();
|
||||
if (!LinphoneManager.getInstance().addVideo()) {
|
||||
LinphoneActivity.instance().startVideoActivity();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
throw new RuntimeException("unknown id " + v.getId());
|
||||
|
@ -780,23 +775,11 @@ public class ConferenceActivity extends ListActivity implements
|
|||
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,
|
||||
final String message) {
|
||||
final String stateStr = call + " " + state.toString();
|
||||
Log.d("ConferenceActivity received state ",stateStr);
|
||||
|
||||
tryToStartVideoActivity(call, state);
|
||||
|
||||
mHandler.post(new Runnable() {
|
||||
public void run() {
|
||||
CalleeListAdapter adapter = (CalleeListAdapter) getListAdapter();
|
||||
|
@ -966,11 +949,6 @@ public class ConferenceActivity extends ListActivity implements
|
|||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestedVideoCallReady(LinphoneCall call) {
|
||||
LinphoneActivity.instance().startVideoActivity();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCallEncryptionChanged(LinphoneCall call, boolean encrypted,
|
||||
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.LinphoneSimpleListener.LinphoneOnCallStateChangedListener;
|
||||
import org.linphone.LinphoneSimpleListener.LinphoneOnVideoCallReadyListener;
|
||||
import org.linphone.core.LinphoneAddress;
|
||||
import org.linphone.core.LinphoneCall;
|
||||
import org.linphone.core.LinphoneCore;
|
||||
|
@ -58,7 +59,11 @@ import android.widget.TextView;
|
|||
import android.widget.Toast;
|
||||
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 PREF_FIRST_LAUNCH = "pref_first_launch";
|
||||
private static final int video_activity = 100;
|
||||
|
@ -89,7 +94,7 @@ public class LinphoneActivity extends TabActivity implements SensorEventListener
|
|||
return instance != null;
|
||||
}
|
||||
|
||||
static final LinphoneActivity instance() {
|
||||
public static final LinphoneActivity instance() {
|
||||
if (instance != null) return instance;
|
||||
|
||||
throw new RuntimeException("LinphoneActivity not instantiated yet");
|
||||
|
@ -462,6 +467,8 @@ public class LinphoneActivity extends TabActivity implements SensorEventListener
|
|||
}
|
||||
|
||||
public void startVideoActivity() {
|
||||
LinphoneCall call = LinphoneManager.getLc().getCurrentCall();
|
||||
if (call != null) call.enableCamera(true);
|
||||
mHandler.post(new Runnable() {
|
||||
public void run() {
|
||||
startActivityForResult(new Intent().setClass(
|
||||
|
@ -536,6 +543,11 @@ public class LinphoneActivity extends TabActivity implements SensorEventListener
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVideoCallReady(LinphoneCall call) {
|
||||
startVideoActivity();
|
||||
}
|
||||
}
|
||||
|
||||
interface ContactPicked {
|
||||
|
|
|
@ -996,15 +996,14 @@ public final class LinphoneManager implements LinphoneCoreListener {
|
|||
e.commit();
|
||||
}
|
||||
|
||||
private LinphoneCall requestedVideoCall;
|
||||
/**
|
||||
*
|
||||
* @return false if already in video call.
|
||||
*/
|
||||
public boolean addVideo() {
|
||||
requestedVideoCall = mLc.getCurrentCall();
|
||||
if (requestedVideoCall == null) return false;
|
||||
|
||||
if (!reinviteWithVideo()) {
|
||||
listenerDispatcher.onAlreadyInVideoCall();
|
||||
}
|
||||
return true;
|
||||
LinphoneCall call = mLc.getCurrentCall();
|
||||
if (call != null) call.enableCamera(true);
|
||||
return reinviteWithVideo();
|
||||
}
|
||||
|
||||
public boolean acceptCallIfIncomingPending() throws LinphoneCoreException {
|
||||
|
@ -1160,10 +1159,6 @@ public final class LinphoneManager implements LinphoneCoreListener {
|
|||
this.serviceListener = s;
|
||||
}
|
||||
|
||||
public void onAlreadyInVideoCall() {
|
||||
if (serviceListener != null) serviceListener.onAlreadyInVideoCall();
|
||||
}
|
||||
|
||||
public void onCallEncryptionChanged(LinphoneCall call,
|
||||
boolean encrypted, String authenticationToken) {
|
||||
if (serviceListener != null) {
|
||||
|
@ -1180,17 +1175,13 @@ public final class LinphoneManager implements LinphoneCoreListener {
|
|||
boolean sendCamera = shareMyCamera() && mLc.getConferenceSize() == 0;
|
||||
call.enableCamera(sendCamera);
|
||||
}
|
||||
if (state == State.CallEnd && call == requestedVideoCall) {
|
||||
requestedVideoCall = null; // drop reference
|
||||
}
|
||||
if (state == State.CallEnd && mLc.getCallsNb() == 0) {
|
||||
routeAudioToReceiver(true);
|
||||
}
|
||||
if (state == State.StreamsRunning && call == requestedVideoCall && call.getCurrentParamsCopy().getVideoEnabled()) {
|
||||
if (state == State.StreamsRunning && call.getCurrentParamsCopy().getVideoEnabled()) {
|
||||
for (LinphoneOnVideoCallReadyListener l : getSimpleListeners(LinphoneOnVideoCallReadyListener.class)) {
|
||||
l.onRequestedVideoCallReady(call);
|
||||
l.onVideoCallReady(call);
|
||||
}
|
||||
requestedVideoCall = null;
|
||||
}
|
||||
if (serviceListener != null) serviceListener.onCallStateChanged(call, state, message);
|
||||
for (LinphoneOnCallStateChangedListener l : getSimpleListeners(LinphoneOnCallStateChangedListener.class)) {
|
||||
|
|
|
@ -38,8 +38,6 @@ public interface LinphoneSimpleListener {
|
|||
void onRegistrationStateChanged(RegistrationState state, String message);
|
||||
void onRingerPlayerCreated(MediaPlayer mRingerPlayer);
|
||||
void onDisplayStatus(String message);
|
||||
void onAlreadyInVideoCall();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -61,6 +59,6 @@ public interface 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()) {
|
||||
videoCall = null; // release reference
|
||||
}
|
||||
LinphoneManager.getInstance().restoreUserRequestedSpeaker();
|
||||
launched=false;
|
||||
synchronized (androidVideoWindowImpl) {
|
||||
/* this call will destroy native opengl renderer
|
||||
|
@ -297,14 +296,10 @@ public class VideoCallActivity extends Activity implements LinphoneOnCallStateCh
|
|||
|
||||
LinphoneManager.getLc().setPreviewWindow(null);
|
||||
|
||||
if (LinphoneManager.getLc().isIncall()) {
|
||||
// we're getting paused for real
|
||||
if (getChangingConfigurations() == 0) {
|
||||
LinphoneManager.getInstance().sendStaticImage(true);
|
||||
} else {
|
||||
LinphoneManager.getLc().setDeviceRotation(AndroidVideoWindowImpl.rotationToAngle(getWindowManager().getDefaultDisplay().getOrientation()));
|
||||
LinphoneManager.getLc().updateCall(LinphoneManager.getLc().getCurrentCall(), null);
|
||||
}
|
||||
final LinphoneCall currentCall = LinphoneManager.getLc().getCurrentCall();
|
||||
if (currentCall != null && getChangingConfigurations() != 0) {
|
||||
LinphoneManager.getLc().setDeviceRotation(AndroidVideoWindowImpl.rotationToAngle(getWindowManager().getDefaultDisplay().getOrientation()));
|
||||
LinphoneManager.getLc().updateCall(currentCall, null);
|
||||
}
|
||||
if (mCallQualityUpdater!=null){
|
||||
refreshHandler.removeCallbacks(mCallQualityUpdater);
|
||||
|
|
|
@ -18,6 +18,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
*/
|
||||
package org.linphone.ui;
|
||||
|
||||
import org.linphone.LinphoneActivity;
|
||||
import org.linphone.LinphoneManager;
|
||||
|
||||
import android.content.Context;
|
||||
|
@ -38,6 +39,8 @@ public class AddVideoButton extends ImageButton implements OnClickListener {
|
|||
}
|
||||
|
||||
public void onClick(View v) {
|
||||
LinphoneManager.getInstance().addVideo();
|
||||
if (!LinphoneManager.getInstance().addVideo()) {
|
||||
LinphoneActivity.instance().startVideoActivity();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue