Show who is talking in conf view
This commit is contained in:
parent
e68972794f
commit
38a3dec60f
6 changed files with 39 additions and 8 deletions
BIN
res/drawable/conf_speaking.png
Normal file
BIN
res/drawable/conf_speaking.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
|
@ -23,7 +23,8 @@
|
||||||
android:layout_width="wrap_content" android:layout_height="fill_parent"
|
android:layout_width="wrap_content" android:layout_height="fill_parent"
|
||||||
android:layout_centerVertical="true">
|
android:layout_centerVertical="true">
|
||||||
<TextView android:id="@+id/status_label" style="@style/callee_status" />
|
<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_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_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_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_maybe_secured" style="@style/callee_status" android:src="@drawable/conf_maybe_secured" android:visibility="gone"/>
|
||||||
|
|
|
@ -67,6 +67,7 @@ public abstract class AbstractCalleesActivity extends ListActivity implements Li
|
||||||
|
|
||||||
private Handler callqualityHandler;
|
private Handler callqualityHandler;
|
||||||
private List<View> viewsToUpdateCallQuality;
|
private List<View> viewsToUpdateCallQuality;
|
||||||
|
private boolean shouldDisplayWhoIsTalking = false;
|
||||||
@Override
|
@Override
|
||||||
/**
|
/**
|
||||||
* Called by the child classes AFTER their own onCreate.
|
* 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() {
|
protected final void initCallQualityListener() {
|
||||||
|
final int timeToRefresh;
|
||||||
|
if (shouldDisplayWhoIsTalking)
|
||||||
|
timeToRefresh = 100;
|
||||||
|
else
|
||||||
|
timeToRefresh = 1000;
|
||||||
|
|
||||||
callqualityHandler = new Handler();
|
callqualityHandler = new Handler();
|
||||||
viewsToUpdateCallQuality = new ArrayList<View>();
|
viewsToUpdateCallQuality = new ArrayList<View>();
|
||||||
callqualityHandler.postDelayed(new Runnable() {
|
callqualityHandler.postDelayed(new Runnable() {
|
||||||
|
@ -227,11 +234,19 @@ public abstract class AbstractCalleesActivity extends ListActivity implements Li
|
||||||
LinphoneCall call = (LinphoneCall) v.getTag();
|
LinphoneCall call = (LinphoneCall) v.getTag();
|
||||||
float newQuality = call.getCurrentQuality();
|
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) {
|
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);
|
v.setTag(call);
|
||||||
viewsToUpdateCallQuality.add(v);
|
viewsToUpdateCallQuality.add(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected final void registerCallSpeakerListener() {
|
||||||
|
shouldDisplayWhoIsTalking = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -282,7 +301,10 @@ public abstract class AbstractCalleesActivity extends ListActivity implements Li
|
||||||
|
|
||||||
void updateQualityOfSignalIcon(View v, float quality)
|
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
|
if (quality >= 4) // Good Quality
|
||||||
{
|
{
|
||||||
qos.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_signal_4));
|
qos.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_signal_4));
|
||||||
|
|
|
@ -96,12 +96,15 @@ public class ConferenceDetailsActivity extends AbstractCalleesActivity {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
setVisibility(v, R.id.callee_status_qos, true);
|
||||||
|
|
||||||
// May be greatly sped up using a drawable cache
|
// May be greatly sped up using a drawable cache
|
||||||
ImageView pictureView = (ImageView) v.findViewById(R.id.picture);
|
ImageView pictureView = (ImageView) v.findViewById(R.id.picture);
|
||||||
setCalleePicture(pictureView, address);
|
setCalleePicture(pictureView, address);
|
||||||
|
|
||||||
registerCallDurationTimer(v, call);
|
registerCallDurationTimer(v, call);
|
||||||
registerCallQualityListener(v, call);
|
registerCallQualityListener(v, call);
|
||||||
|
registerCallSpeakerListener();
|
||||||
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
|
@ -456,7 +456,7 @@ public class IncallActivity extends AbstractCalleesActivity implements
|
||||||
|
|
||||||
boolean statusPaused = state== State.Paused || state == State.PausedByRemote;
|
boolean statusPaused = state== State.Paused || state == State.PausedByRemote;
|
||||||
setVisibility(v, R.id.callee_status_paused, statusPaused);
|
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() {
|
final OnLongClickListener showCallActionsLongListener = new OnLongClickListener() {
|
||||||
public boolean onLongClick(View v) {
|
public boolean onLongClick(View v) {
|
||||||
|
|
|
@ -147,4 +147,9 @@ class LinphoneCallImpl implements LinphoneCall {
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Call " + nativePtr;
|
return "Call " + nativePtr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private native float getPlayVolume(long nativePtr);
|
||||||
|
public float getPlayVolume() {
|
||||||
|
return getPlayVolume(nativePtr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue