Show who is talking in conf view

This commit is contained in:
Sylvain Berfini 2011-12-30 17:00:28 +01:00
parent e68972794f
commit 38a3dec60f
6 changed files with 39 additions and 8 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -23,8 +23,9 @@
android:layout_width="wrap_content" android:layout_height="fill_parent"
android:layout_centerVertical="true">
<TextView android:id="@+id/status_label" style="@style/callee_status" />
<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/QoS" android:src="@drawable/stat_sys_signal_0" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" />
<ImageView android:id="@+id/callee_status_paused" style="@style/callee_status" android:src="@drawable/conf_status_paused" android:visibility="gone"/>
<ImageView android:id="@+id/callee_status_speeking" style="@style/callee_status" android:src="@drawable/conf_speaking" android:visibility="gone"/>
<ImageView android:id="@+id/callee_status_qos" style="@style/callee_status" android:src="@drawable/stat_sys_signal_0" android:visibility="gone"/>
<ImageView android:id="@+id/callee_status_paused" style="@style/callee_status" android:src="@drawable/conf_status_paused" android:visibility="gone"/>
<ImageView android:id="@+id/callee_status_secured" style="@style/callee_status" android:src="@drawable/conf_secured" android:visibility="gone"/>
<ImageView android:id="@+id/callee_status_maybe_secured" style="@style/callee_status" android:src="@drawable/conf_maybe_secured" android:visibility="gone"/>
<ImageView android:id="@+id/callee_status_not_secured" style="@style/callee_status" android:src="@drawable/conf_not_secured" android:visibility="gone"/>

View file

@ -67,6 +67,7 @@ public abstract class AbstractCalleesActivity extends ListActivity implements Li
private Handler callqualityHandler;
private List<View> viewsToUpdateCallQuality;
private boolean shouldDisplayWhoIsTalking = false;
@Override
/**
* Called by the child classes AFTER their own onCreate.
@ -215,6 +216,12 @@ public abstract class AbstractCalleesActivity extends ListActivity implements Li
}
protected final void initCallQualityListener() {
final int timeToRefresh;
if (shouldDisplayWhoIsTalking)
timeToRefresh = 100;
else
timeToRefresh = 1000;
callqualityHandler = new Handler();
viewsToUpdateCallQuality = new ArrayList<View>();
callqualityHandler.postDelayed(new Runnable() {
@ -222,16 +229,24 @@ public abstract class AbstractCalleesActivity extends ListActivity implements Li
if (viewsToUpdateCallQuality == null) {
return;
}
for (View v : viewsToUpdateCallQuality) {
LinphoneCall call = (LinphoneCall) v.getTag();
float newQuality = call.getCurrentQuality();
updateQualityOfSignalIcon(v, newQuality);
updateQualityOfSignalIcon(v, newQuality);
// We also use this handler to display the ones who speaks
ImageView speaking = (ImageView) v.findViewById(R.id.callee_status_speeking);
if (shouldDisplayWhoIsTalking && call.getPlayVolume() >= -20) {
speaking.setVisibility(View.VISIBLE);
} else if (speaking.getVisibility() != View.GONE) {
speaking.setVisibility(View.GONE);
}
}
callqualityHandler.postDelayed(this, 1000);
callqualityHandler.postDelayed(this, timeToRefresh);
}
},1000);
},timeToRefresh);
}
protected final void registerCallQualityListener(final View v, final LinphoneCall call) {
@ -241,6 +256,10 @@ public abstract class AbstractCalleesActivity extends ListActivity implements Li
v.setTag(call);
viewsToUpdateCallQuality.add(v);
}
protected final void registerCallSpeakerListener() {
shouldDisplayWhoIsTalking = true;
}
}
@Override
@ -282,7 +301,10 @@ public abstract class AbstractCalleesActivity extends ListActivity implements Li
void updateQualityOfSignalIcon(View v, float quality)
{
ImageView qos = (ImageView) v.findViewById(R.id.QoS);
ImageView qos = (ImageView) v.findViewById(R.id.callee_status_qos);
if (!(qos.getVisibility() == View.VISIBLE)) {
qos.setVisibility(View.VISIBLE);
}
if (quality >= 4) // Good Quality
{
qos.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_signal_4));

View file

@ -95,6 +95,8 @@ public class ConferenceDetailsActivity extends AbstractCalleesActivity {
dialog.show();
}
});
setVisibility(v, R.id.callee_status_qos, true);
// May be greatly sped up using a drawable cache
ImageView pictureView = (ImageView) v.findViewById(R.id.picture);
@ -102,6 +104,7 @@ public class ConferenceDetailsActivity extends AbstractCalleesActivity {
registerCallDurationTimer(v, call);
registerCallQualityListener(v, call);
registerCallSpeakerListener();
return v;
}

View file

@ -456,7 +456,7 @@ public class IncallActivity extends AbstractCalleesActivity implements
boolean statusPaused = state== State.Paused || state == State.PausedByRemote;
setVisibility(v, R.id.callee_status_paused, statusPaused);
setVisibility(v, R.id.QoS, !statusPaused);
setVisibility(v, R.id.callee_status_qos, !statusPaused);
final OnLongClickListener showCallActionsLongListener = new OnLongClickListener() {
public boolean onLongClick(View v) {

View file

@ -147,4 +147,9 @@ class LinphoneCallImpl implements LinphoneCall {
public String toString() {
return "Call " + nativePtr;
}
private native float getPlayVolume(long nativePtr);
public float getPlayVolume() {
return getPlayVolume(nativePtr);
}
}