diff --git a/res/layout/call.xml b/res/layout/call.xml
index f9e332a7c..dce208b02 100644
--- a/res/layout/call.xml
+++ b/res/layout/call.xml
@@ -14,419 +14,447 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ android:background="@color/colorH"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_gravity="left">
-
-
-
+
diff --git a/res/layout/call_inactive_row.xml b/res/layout/call_inactive_row.xml
index 8a0eeac3b..46aaff9af 100644
--- a/res/layout/call_inactive_row.xml
+++ b/res/layout/call_inactive_row.xml
@@ -1,22 +1,22 @@
+ android:padding="5dp">
+ android:layout_height="40dp"/>
+ android:contentDescription="@string/content_description_pause"
+ android:layout_width="40dp"
+ android:layout_height="40dp"
+ android:gravity="center_vertical"/>
\ No newline at end of file
diff --git a/res/layout/call_incoming.xml b/res/layout/call_incoming.xml
index e4d3c3273..50998f542 100644
--- a/res/layout/call_incoming.xml
+++ b/res/layout/call_incoming.xml
@@ -34,9 +34,9 @@
android:id="@+id/contact_detail"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_above="@id/menu"
android:layout_below="@id/top_bar"
- android:paddingTop="10dp">
+ android:paddingTop="10dp"
+ android:layout_above="@+id/menu">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/call_outgoing.xml b/res/layout/call_outgoing.xml
index 4e3ba3eb5..0716bc839 100644
--- a/res/layout/call_outgoing.xml
+++ b/res/layout/call_outgoing.xml
@@ -74,7 +74,7 @@
android:adjustViewBounds="true"/>
Username
Display name
Password
- Confirm password
+ Password confirmation
Domain
Provisioning url
Email
@@ -17,6 +17,8 @@
Cancel
Accept
About
+ Deny
+ No account configured
free SIP VOIP client
@@ -44,26 +46,47 @@
Enter a number or an address
+ No call in your history
+ No missed call in your history
+ Do you want to delete selected log?
+ No contact in your address book.
+ No SIP contact in your address book.
+ Do you want to delete selected contact?
+ Do you want to delete selected this contact?
+
+
+ No conversations
+ Do you want to delete selected conversation?
+ Do you want to delete selected message?
- - Settings
- Assistant
+ - Settings
- About
-
Quit
incoming call
outgoing call
- Call update requested\nYour correspondent would like to add video to the current call.
+ Your correspondent would like to turn on the video
+ No active call
+ Your correspondent paused the call
+ ZRTP token is %s\nYou should only accept if you have the same token as your correspondent
+ Toggle micro
+ Toggle speaker
+ Decline
+ Hang up
+ Accept
+
+
Edit button
Valid button
Valid button
@@ -90,11 +113,9 @@
All calls
Missed calls
Switch video
- Toggle speaker
- Toggle micro
+
Add call
Pause
- Hang up
Numpad
Settings button
Dialer
@@ -339,11 +360,6 @@
Conference
Draft
Enter a SIP address to chat with…
- No call in your history.
- No missed call in your history.
- No contact in your address book.
- No SIP contact in your address book.
- No chat history.
Audio
Video
Codec:
@@ -412,8 +428,6 @@
Sharing server
Remote provisioning
- Delete
- This contact will be deleted.
SIP address
Phone number
First name
@@ -460,9 +474,6 @@
The configuration you downloaded doesn\'t include your account. Please fill it in.
Your username will be %s.\r\n\r\nIt may differ from what you entered to match some requirements.\r\nDo you accept ?
- Accept
- Deny
- You should only accept if you have the same code (see above) as your correspondent
Remote is writing...
%i unread messages
Failed to download or apply remote provisioning profile...
diff --git a/src/org/linphone/CallActivity.java b/src/org/linphone/CallActivity.java
index afc3619b0..4aadd313f 100644
--- a/src/org/linphone/CallActivity.java
+++ b/src/org/linphone/CallActivity.java
@@ -73,7 +73,7 @@ import android.widget.Toast;
* @author Sylvain Berfini
*/
public class CallActivity extends Activity implements OnClickListener {
- private final static int SECONDS_BEFORE_HIDING_CONTROLS = 10000;
+ private final static int SECONDS_BEFORE_HIDING_CONTROLS = 5000;
private final static int SECONDS_BEFORE_DENYING_CALL_UPDATE = 30000;
private static CallActivity instance;
@@ -84,7 +84,7 @@ public class CallActivity extends Activity implements OnClickListener {
private RelativeLayout mActiveCallHeader, sideMenuContent, avatar_layout;
private ImageView pause, hangUp, dialer, video, micro, speaker, options, addCall, transfer, conference, conferenceStatus, contactPicture;
private ImageView audioRoute, routeSpeaker, routeEarpiece, routeBluetooth, menu;
- private LinearLayout routeLayout, mNoCurrentCall, callInfo;
+ private LinearLayout mNoCurrentCall, callInfo, mCallPaused;
private ProgressBar videoProgress;
private StatusFragment status;
private CallAudioFragment audioCallFragment;
@@ -143,8 +143,9 @@ public class CallActivity extends Activity implements OnClickListener {
}
if (state == State.Paused || state == State.PausedByRemote || state == State.Pausing) {
- if(LinphoneManager.getLc().getCurrentCall() != null)
+ if(LinphoneManager.getLc().getCurrentCall() != null) {
enabledVideoButton(false);
+ }
if(isVideoEnabled(call)){
showAudioView();
}
@@ -157,7 +158,16 @@ public class CallActivity extends Activity implements OnClickListener {
showVideoView();
}
}
- enabledVideoButton(true);
+ if(LinphoneManager.getLc().getCurrentCall() != null) {
+ enabledVideoButton(true);
+ }
+ }
+
+ if (state == State.Connected) {
+ if(call.getCurrentParamsCopy().getMediaEncryption().equals(LinphoneCore.MediaEncryption.ZRTP) && !call.isAuthenticationTokenVerified()){
+ //TODO AFFICHER DIALOG ZRTP
+ status.showZRTPDialog(call);
+ }
}
if (state == State.StreamsRunning) {
@@ -165,13 +175,14 @@ public class CallActivity extends Activity implements OnClickListener {
//Check media in progress
if(LinphonePreferences.instance().isVideoEnabled() && !call.mediaInProgress()){
enabledVideoButton(true);
+ enabledPauseButton(true);
}
- LinphoneManager.getLc().enableSpeaker(isSpeakerEnabled);
-
- isMicMuted = LinphoneManager.getLc().isMicMuted();
enableAndRefreshInCallActions();
+ LinphoneManager.getLc().enableSpeaker(isSpeakerEnabled);
+ isMicMuted = LinphoneManager.getLc().isMicMuted();
+
if (status != null) {
videoProgress.setVisibility(View.GONE);
status.refreshStatusItems(call, isVideoEnabled(call));
@@ -239,7 +250,7 @@ public class CallActivity extends Activity implements OnClickListener {
isSpeakerEnabled = savedInstanceState.getBoolean("Speaker");
isMicMuted = savedInstanceState.getBoolean("Mic");
isVideoCallPaused = savedInstanceState.getBoolean("VideoCallPaused");
- //refreshInCallActions();
+ refreshInCallActions();
return;
}
@@ -247,15 +258,11 @@ public class CallActivity extends Activity implements OnClickListener {
if (isVideoEnabled(LinphoneManager.getLc().getCurrentCall())) {
callFragment = new CallVideoFragment();
videoCallFragment = (CallVideoFragment) callFragment;
+ displayVideoCall(false);
isSpeakerEnabled = true;
-
- if (cameraNumber > 1) {
- switchCamera.setVisibility(View.VISIBLE);
- }
} else {
callFragment = new CallAudioFragment();
audioCallFragment = (CallAudioFragment) callFragment;
- switchCamera.setVisibility(View.INVISIBLE);
}
if(BluetoothManager.getInstance().isBluetoothHeadsetAvailable()){
@@ -291,15 +298,15 @@ public class CallActivity extends Activity implements OnClickListener {
private void initUI() {
inflater = LayoutInflater.from(this);
container = (ViewGroup) findViewById(R.id.topLayout);
- callsList = (LinearLayout) findViewById(R.id.calls);
- conferenceList = (LinearLayout) findViewById(R.id.conferenceCalls);
+ callsList = (LinearLayout) findViewById(R.id.calls_list);
+ conferenceList = (LinearLayout) findViewById(R.id.conference_list);
//TopBar
video = (ImageView) findViewById(R.id.video);
video.setOnClickListener(this);
enabledVideoButton(false);
- videoProgress = (ProgressBar) findViewById(R.id.videoInProgress);
+ videoProgress = (ProgressBar) findViewById(R.id.video_in_progress);
videoProgress.setVisibility(View.GONE);
micro = (ImageView) findViewById(R.id.micro);
@@ -313,7 +320,7 @@ public class CallActivity extends Activity implements OnClickListener {
options.setEnabled(false);
//BottonBar
- hangUp = (ImageView) findViewById(R.id.hangUp);
+ hangUp = (ImageView) findViewById(R.id.hang_up);
hangUp.setOnClickListener(this);
dialer = (ImageView) findViewById(R.id.dialer);
@@ -325,14 +332,15 @@ public class CallActivity extends Activity implements OnClickListener {
//Others
//Active Call
- callInfo = (LinearLayout) findViewById(R.id.call_header_description);
+ callInfo = (LinearLayout) findViewById(R.id.active_call_info);
pause = (ImageView) findViewById(R.id.pause);
pause.setOnClickListener(this);
- pause.setEnabled(false);
+ enabledPauseButton(false);
- mActiveCallHeader = (RelativeLayout) findViewById(R.id.activeCallHeader);
- mNoCurrentCall = (LinearLayout) findViewById(R.id.noCurrentCall);
+ mActiveCallHeader = (RelativeLayout) findViewById(R.id.active_call);
+ mNoCurrentCall = (LinearLayout) findViewById(R.id.no_current_call);
+ mCallPaused = (LinearLayout) findViewById(R.id.remote_pause);
contactPicture = (ImageView) findViewById(R.id.contact_picture);
avatar_layout = (RelativeLayout) findViewById(R.id.avatar_layout);
@@ -345,7 +353,7 @@ public class CallActivity extends Activity implements OnClickListener {
//Options
- addCall = (ImageView) findViewById(R.id.addCall);
+ addCall = (ImageView) findViewById(R.id.add_call);
addCall.setOnClickListener(this);
addCall.setEnabled(false);
@@ -358,14 +366,13 @@ public class CallActivity extends Activity implements OnClickListener {
conference.setOnClickListener(this);
try {
- //routeLayout = (LinearLayout) findViewById(R.id.routesLayout);
- audioRoute = (ImageView) findViewById(R.id.audioRoute);
+ audioRoute = (ImageView) findViewById(R.id.audio_route);
audioRoute.setOnClickListener(this);
- routeSpeaker = (ImageView) findViewById(R.id.routeSpeaker);
+ routeSpeaker = (ImageView) findViewById(R.id.route_speaker);
routeSpeaker.setOnClickListener(this);
- routeEarpiece = (ImageView) findViewById(R.id.routeEarpiece);
+ routeEarpiece = (ImageView) findViewById(R.id.route_earpiece);
routeEarpiece.setOnClickListener(this);
- routeBluetooth = (ImageView) findViewById(R.id.routeBluetooth);
+ routeBluetooth = (ImageView) findViewById(R.id.route_bluetooth);
routeBluetooth.setOnClickListener(this);
} catch (NullPointerException npe) {
Log.e("Bluetooth: Audio routes menu disabled on tablets for now (1)");
@@ -391,15 +398,11 @@ public class CallActivity extends Activity implements OnClickListener {
if (BluetoothManager.getInstance().isBluetoothHeadsetAvailable()) {
try {
- if (routeLayout != null)
- routeLayout.setVisibility(View.VISIBLE);
audioRoute.setVisibility(View.VISIBLE);
speaker.setVisibility(View.GONE);
} catch (NullPointerException npe) { Log.e("Bluetooth: Audio routes menu disabled on tablets for now (2)"); }
} else {
try {
- if (routeLayout != null)
- routeLayout.setVisibility(View.GONE);
audioRoute.setVisibility(View.GONE);
speaker.setVisibility(View.VISIBLE);
} catch (NullPointerException npe) { Log.e("Bluetooth: Audio routes menu disabled on tablets for now (3)"); }
@@ -410,7 +413,7 @@ public class CallActivity extends Activity implements OnClickListener {
}
public void createInCallStats() {
- sideMenu = (DrawerLayout) findViewById(R.id.call_stats);
+ sideMenu = (DrawerLayout) findViewById(R.id.side_menu);
menu = (ImageView) findViewById(R.id.call_quality);
sideMenuContent = (RelativeLayout) findViewById(R.id.side_menu_content);
@@ -418,7 +421,7 @@ public class CallActivity extends Activity implements OnClickListener {
menu.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
- if(sideMenu.isDrawerVisible(Gravity.LEFT)){
+ if (sideMenu.isDrawerVisible(Gravity.LEFT)) {
sideMenu.closeDrawer(sideMenuContent);
} else {
sideMenu.openDrawer(sideMenuContent);
@@ -431,8 +434,44 @@ public class CallActivity extends Activity implements OnClickListener {
}
private void refreshIncallUi(){
+ List pausedCalls = LinphoneUtils.getCallsInState(LinphoneManager.getLc(), Arrays.asList(State.PausedByRemote));
+ if (pausedCalls.size() == 1) {
+ displayCallPaused(true);
+ } else {
+ displayCallPaused(false);
+ }
+
+ if(LinphoneManager.getLc().getCurrentCall() != null){
+ if(isTransferAllowed)
+ enabledTransferButton(true);
+ if(!isVideoEnabled(LinphoneManager.getLc().getCurrentCall()))
+ callInfo.setVisibility(View.VISIBLE);
+ }
+
+ if(LinphoneManager.getLc().getCallsNb() > 1){
+ callsList.setVisibility(View.VISIBLE);
+ enabledConferenceButton(true);
+ } else {
+ if(LinphoneManager.getLc().getCallsNb() == 1 && LinphoneManager.getLc().getCurrentCall() == null){
+ callsList.setVisibility(View.VISIBLE);
+ if(isVideoEnabled(LinphoneManager.getLc().getCurrentCall())) {
+ avatar_layout.setVisibility(View.GONE);
+ } else {
+ avatar_layout.setVisibility(View.VISIBLE);
+ }
+ if(isTransferAllowed)
+ enabledTransferButton(false);
+ } else {
+ callsList.setVisibility(View.GONE);
+ }
+ enabledConferenceButton(false);
+
+ }
+
refreshInCallActions();
refreshCallList(getResources());
+
+
}
private void refreshInCallActions() {
@@ -463,37 +502,22 @@ public class CallActivity extends Activity implements OnClickListener {
try {
if (isSpeakerEnabled) {
- routeSpeaker.setBackgroundResource(R.drawable.route_speaker_selected);
- routeEarpiece.setBackgroundResource(R.drawable.route_earpiece);
- routeBluetooth.setBackgroundResource(R.drawable.route_bluetooth);
+ routeSpeaker.setImageResource(R.drawable.route_speaker_selected);
+ routeEarpiece.setImageResource(R.drawable.route_earpiece);
+ routeBluetooth.setImageResource(R.drawable.route_bluetooth);
}
- routeSpeaker.setBackgroundResource(R.drawable.route_speaker);
+ routeSpeaker.setImageResource(R.drawable.route_speaker);
if (BluetoothManager.getInstance().isUsingBluetoothAudioRoute()) {
- routeEarpiece.setBackgroundResource(R.drawable.route_earpiece);
- routeBluetooth.setBackgroundResource(R.drawable.route_bluetooth_selected);
+ routeEarpiece.setImageResource(R.drawable.route_earpiece);
+ routeBluetooth.setImageResource(R.drawable.route_bluetooth_selected);
} else {
- routeEarpiece.setBackgroundResource(R.drawable.route_earpiece_selected);
- routeBluetooth.setBackgroundResource(R.drawable.route_bluetooth);
+ routeEarpiece.setImageResource(R.drawable.route_earpiece_selected);
+ routeBluetooth.setImageResource(R.drawable.route_bluetooth);
}
} catch (NullPointerException npe) {
Log.e("Bluetooth: Audio routes menu disabled on tablets for now (4)");
}
-
-
-
- if (LinphoneManager.getLc().getCallsNb() > 1) {
- //pause.setVisibility(View.GONE);
- } else {
- //pause.setVisibility(View.VISIBLE);
-
- List pausedCalls = LinphoneUtils.getCallsInState(LinphoneManager.getLc(), Arrays.asList(State.Paused));
- if (pausedCalls.size() == 1) {
- //pause.setBackgroundResource(R.drawable.pa);
- } else {
- //pause.setBackgroundResource(R.drawable.pause_off);
- }
- }
}
private void enableAndRefreshInCallActions() {
@@ -511,8 +535,7 @@ public class CallActivity extends Activity implements OnClickListener {
transfer.setEnabled(true);
pause.setEnabled(true);
dialer.setEnabled(true);
- conference.setEnabled(true);
- refreshInCallActions();
+ enabledConferenceButton(true);
}
public void updateStatusFragment(StatusFragment statusFragment) {
@@ -524,7 +547,7 @@ public class CallActivity extends Activity implements OnClickListener {
int id = v.getId();
if (isVideoEnabled(LinphoneManager.getLc().getCurrentCall())) {
- displayVideoCallControlsIfHidden();
+ //displayVideoCallControlsIfHidden();
}
if (id == R.id.video) {
@@ -536,13 +559,13 @@ public class CallActivity extends Activity implements OnClickListener {
else if (id == R.id.speaker) {
toggleSpeaker();
}
- else if (id == R.id.addCall) {
+ else if (id == R.id.add_call) {
goBackToDialer();
}
else if (id == R.id.pause) {
pauseOrResumeCall(LinphoneManager.getLc().getCurrentCall());
}
- else if (id == R.id.hangUp) {
+ else if (id == R.id.hang_up) {
hangUp();
}
else if (id == R.id.dialer) {
@@ -563,36 +586,36 @@ public class CallActivity extends Activity implements OnClickListener {
else if (id == R.id.options) {
hideOrDisplayCallOptions();
}
- else if (id == R.id.audioRoute) {
+ else if (id == R.id.audio_route) {
hideOrDisplayAudioRoutes();
}
- else if (id == R.id.routeBluetooth) {
+ else if (id == R.id.route_bluetooth) {
if (BluetoothManager.getInstance().routeAudioToBluetooth()) {
isSpeakerEnabled = false;
- /*routeBluetooth.setBackgroundResource(R.drawable.route_bluetooth_on);
- routeReceiver.setBackgroundResource(R.drawable.route_receiver_off);
- routeSpeaker.setBackgroundResource(R.drawable.route_speaker_off);*/
+ routeBluetooth.setImageResource(R.drawable.route_bluetooth_selected);
+ routeSpeaker.setImageResource(R.drawable.route_speaker);
+ routeEarpiece.setImageResource(R.drawable.route_earpiece);
}
hideOrDisplayAudioRoutes();
}
- else if (id == R.id.routeEarpiece) {
+ else if (id == R.id.route_earpiece) {
LinphoneManager.getInstance().routeAudioToReceiver();
isSpeakerEnabled = false;
- /*routeBluetooth.setBackgroundResource(R.drawable.route_bluetooth_off);
- routeReceiver.setBackgroundResource(R.drawable.route_receiver_on);
- routeSpeaker.setBackgroundResource(R.drawable.route_speaker_off);*/
+ routeBluetooth.setImageResource(R.drawable.route_bluetooth);
+ routeSpeaker.setImageResource(R.drawable.route_speaker);
+ routeEarpiece.setImageResource(R.drawable.route_earpiece_selected);
hideOrDisplayAudioRoutes();
}
- else if (id == R.id.routeSpeaker) {
+ else if (id == R.id.route_speaker) {
LinphoneManager.getInstance().routeAudioToSpeaker();
isSpeakerEnabled = true;
- /*routeBluetooth.setBackgroundResource(R.drawable.route_bluetooth_off);
- routeReceiver.setBackgroundResource(R.drawable.route_receiver_off);
- routeSpeaker.setBackgroundResource(R.drawable.route_speaker_on);*/
+ routeBluetooth.setImageResource(R.drawable.route_bluetooth);
+ routeSpeaker.setImageResource(R.drawable.route_speaker_selected);
+ routeEarpiece.setImageResource(R.drawable.route_earpiece);
hideOrDisplayAudioRoutes();
}
- else if (id == R.id.callStatus) {
+ else if (id == R.id.call_pause) {
LinphoneCall call = (LinphoneCall) v.getTag();
pauseOrResumeCall(call);
}
@@ -604,10 +627,40 @@ public class CallActivity extends Activity implements OnClickListener {
private void enabledVideoButton(boolean enabled){
if(enabled) {
video.setEnabled(true);
- video.setImageResource(R.drawable.camera_default);
+ video.setAlpha(1f);
} else {
video.setEnabled(false);
- video.setImageResource(R.drawable.camera_disabled);
+ video.setAlpha(0.2f);
+ }
+ }
+
+ private void enabledPauseButton(boolean enabled){
+ if(enabled) {
+ pause.setEnabled(true);
+ pause.setImageResource(R.drawable.pause_big_default);
+ } else {
+ pause.setEnabled(false);
+ pause.setImageResource(R.drawable.pause_big_disabled);
+ }
+ }
+
+ private void enabledTransferButton(boolean enabled){
+ if(enabled) {
+ transfer.setEnabled(true);
+ transfer.setImageAlpha(250);
+ } else {
+ transfer.setEnabled(false);
+ transfer.setImageAlpha(50);
+ }
+ }
+
+ private void enabledConferenceButton(boolean enabled){
+ if(enabled) {
+ conference.setEnabled(true);
+ conference.setImageAlpha(250);
+ } else {
+ conference.setEnabled(false);
+ conference.setImageAlpha(50);
}
}
@@ -671,6 +724,7 @@ public class CallActivity extends Activity implements OnClickListener {
LinphoneManager.startProximitySensorForActivity(CallActivity.this);
replaceFragmentVideoByAudio();
displayAudioCall();
+ showStatusBar();
removeCallbacks();
}
@@ -684,8 +738,8 @@ public class CallActivity extends Activity implements OnClickListener {
LinphoneManager.stopProximitySensorForActivity(CallActivity.this);
replaceFragmentAudioByVideo();
+ hideStatusBar();
displayVideoCall(false);
- displayVideoCallControlsIfHidden();
}
private void displayNoCurrentCall(boolean display){
@@ -698,6 +752,14 @@ public class CallActivity extends Activity implements OnClickListener {
}
}
+ private void displayCallPaused(boolean display){
+ if(display){
+ mCallPaused.setVisibility(View.VISIBLE);
+ } else {
+ mCallPaused.setVisibility(View.GONE);
+ }
+ }
+
private void displayAudioCall(){
mActiveCallHeader.setVisibility(View.VISIBLE);
callInfo.setVisibility(View.VISIBLE);
@@ -707,28 +769,6 @@ public class CallActivity extends Activity implements OnClickListener {
switchCamera.setVisibility(View.GONE);
}
- private void displayVideoCall(boolean display){
- if(display) {
- LinphoneActivity.instance().showStatusBar();
- mControlsLayout.setVisibility(View.VISIBLE);
- mActiveCallHeader.setVisibility(View.VISIBLE);
- callInfo.setVisibility(View.VISIBLE);
- avatar_layout.setVisibility(View.GONE);
- mNoCurrentCall.setVisibility(View.GONE);
- callsList.setVisibility(View.VISIBLE);
- if (cameraNumber > 1) {
- switchCamera.setVisibility(View.VISIBLE);
- }
- } else {
- LinphoneActivity.instance().hideStatusBar();
- mControlsLayout.setVisibility(View.GONE);
- mActiveCallHeader.setVisibility(View.GONE);
- switchCamera.setVisibility(View.GONE);
- mNoCurrentCall.setVisibility(View.GONE);
- callsList.setVisibility(View.GONE);
- }
- }
-
private void replaceFragmentVideoByAudio() {
audioCallFragment = new CallAudioFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
@@ -775,17 +815,9 @@ public class CallActivity extends Activity implements OnClickListener {
}
}
- private void pauseOrResumeCall() {
- LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
- if (lc != null && lc.getCallsNb() >= 1) {
- LinphoneCall call = lc.getCalls()[0];
- pauseOrResumeCall(call);
- }
- }
-
public void pauseOrResumeCall(LinphoneCall call) {
LinphoneCore lc = LinphoneManager.getLc();
- if (call != null && LinphoneUtils.isCallRunning(call)) {
+ if (call != null && LinphoneManager.getLc().getCurrentCall() == call) {
lc.pauseCall(call);
if (isVideoEnabled(LinphoneManager.getLc().getCurrentCall())) {
isVideoCallPaused = true;
@@ -815,6 +847,30 @@ public class CallActivity extends Activity implements OnClickListener {
}
}
+ public void displayVideoCall(boolean display){
+ if(display) {
+ showStatusBar();
+ mControlsLayout.setVisibility(View.VISIBLE);
+ mActiveCallHeader.setVisibility(View.VISIBLE);
+ callInfo.setVisibility(View.VISIBLE);
+ avatar_layout.setVisibility(View.GONE);
+ mNoCurrentCall.setVisibility(View.GONE);
+ callsList.setVisibility(View.VISIBLE);
+ if (cameraNumber > 1) {
+ switchCamera.setVisibility(View.VISIBLE);
+ }
+ } else {
+ hideStatusBar();
+ mControlsLayout.setVisibility(View.GONE);
+ mActiveCallHeader.setVisibility(View.GONE);
+ switchCamera.setVisibility(View.GONE);
+ mNoCurrentCall.setVisibility(View.GONE);
+ Log.w("Call list gone");
+ callsList.setVisibility(View.GONE);
+ }
+ }
+
+
public void displayVideoCallControlsIfHidden() {
if (mControlsLayout != null) {
if (mControlsLayout.getVisibility() != View.VISIBLE) {
@@ -1155,8 +1211,7 @@ public class CallActivity extends Activity implements OnClickListener {
transfer.setVisibility(View.VISIBLE);
}
addCall.setVisibility(View.VISIBLE);
- if(LinphoneManager.getLc().getCalls().length > 1)
- conference.setVisibility(View.VISIBLE);
+ conference.setVisibility(View.VISIBLE);
options.setImageResource(R.drawable.options_selected);
} else {
if (isOrientationLandscape) {
@@ -1210,6 +1265,28 @@ public class CallActivity extends Activity implements OnClickListener {
startActivity(new Intent(this, CallIncomingActivity.class));
}
+ public void hideStatusBar() {
+ if (isTablet()) {
+ return;
+ }
+
+ findViewById(R.id.status).setVisibility(View.GONE);
+ findViewById(R.id.fragmentContainer).setPadding(0, 0, 0, 0);
+ }
+
+ public void showStatusBar() {
+ if (isTablet()) {
+ return;
+ }
+
+ if (status != null && !status.isVisible()) {
+ // Hack to ensure statusFragment is visible after coming back to
+ // dialer from chat
+ status.getView().setVisibility(View.VISIBLE);
+ }
+ findViewById(R.id.status).setVisibility(View.VISIBLE);
+ //findViewById(R.id.fragmentContainer).setPadding(0, LinphoneUtils.pixelsToDpi(getResources(), 40), 0, 0);
+ }
private void showAcceptCallUpdateDialog() {
@@ -1222,7 +1299,7 @@ public class CallActivity extends Activity implements OnClickListener {
dialog.getWindow().setBackgroundDrawable(d);
TextView customText = (TextView) dialog.findViewById(R.id.customText);
- customText.setText(getResources().getString(R.string.call_update_video));
+ customText.setText(getResources().getString(R.string.add_video_dialog));
Button delete = (Button) dialog.findViewById(R.id.delete);
delete.setText(R.string.accept);
Button cancel = (Button) dialog.findViewById(R.id.cancel);
@@ -1257,7 +1334,7 @@ public class CallActivity extends Activity implements OnClickListener {
instance = this;
if (isVideoEnabled(LinphoneManager.getLc().getCurrentCall())) {
- displayVideoCallControlsIfHidden();
+ //displayVideoCallControlsIfHidden();
} else if(LinphoneManager.getLc().isInConference()) {
displayConference();
} else {
@@ -1374,9 +1451,7 @@ public class CallActivity extends Activity implements OnClickListener {
}
private void displayActiveCall(LinphoneCall call){
- if(isVideoEnabled(call)){
- mActiveCallHeader.setVisibility(View.GONE);
- } else {
+ if(!isVideoEnabled(call)){
mActiveCallHeader.setVisibility(View.VISIBLE);
mNoCurrentCall.setVisibility(View.GONE);
}
@@ -1391,7 +1466,7 @@ public class CallActivity extends Activity implements OnClickListener {
lAddress= LinphoneCoreFactory.instance().createLinphoneAddress("unknown","unknown","unknown");
}
- TextView contact = (TextView) findViewById(R.id.contactNameOrNumber);
+ TextView contact = (TextView) findViewById(R.id.contact_name);
Contact lContact = ContactsManager.getInstance().findContactWithAddress(getContentResolver(), lAddress);
if (lContact == null) {
@@ -1414,7 +1489,7 @@ public class CallActivity extends Activity implements OnClickListener {
return;
}
- Chronometer timer = (Chronometer) findViewById(R.id.callTimer);
+ Chronometer timer = (Chronometer) findViewById(R.id.call_timer);
if (timer == null) {
throw new IllegalArgumentException("no callee_duration view found");
}
@@ -1434,10 +1509,10 @@ public class CallActivity extends Activity implements OnClickListener {
}
// Control Row
- LinearLayout callView = (LinearLayout) inflater.inflate(R.layout.active_call_control_row, container, false);
+ LinearLayout callView = (LinearLayout) inflater.inflate(R.layout.call_inactive_row, container, false);
callView.setId(index+1);
- TextView contact = (TextView) callView.findViewById(R.id.contactNameOrNumber);
+ TextView contact = (TextView) callView.findViewById(R.id.contact_name);
Contact lContact = ContactsManager.getInstance().findContactWithAddress(getContentResolver(), lAddress);
if (lContact == null) {
@@ -1483,7 +1558,7 @@ public class CallActivity extends Activity implements OnClickListener {
private boolean displayCallStatusIconAndReturnCallPaused(LinearLayout callView, LinphoneCall call) {
boolean isCallPaused, isInConference;
- ImageView callState = (ImageView) callView.findViewById(R.id.callStatus);
+ ImageView callState = (ImageView) callView.findViewById(R.id.call_pause);
callState.setTag(call);
callState.setOnClickListener(this);
@@ -1523,7 +1598,7 @@ public class CallActivity extends Activity implements OnClickListener {
return;
}
- Chronometer timer = (Chronometer) v.findViewById(R.id.callTimer);
+ Chronometer timer = (Chronometer) v.findViewById(R.id.call_timer);
if (timer == null) {
throw new IllegalArgumentException("no callee_duration view found");
}
@@ -1541,6 +1616,7 @@ public class CallActivity extends Activity implements OnClickListener {
conferenceList.setVisibility(View.GONE);
}
+ //TODO DON'T SHOW CALLLIST IF THERE IS VIDEO CALL
if(callsList != null) {
callsList.setVisibility(View.VISIBLE);
callsList.removeAllViews();
diff --git a/src/org/linphone/CallIncomingActivity.java b/src/org/linphone/CallIncomingActivity.java
index 708315ca2..4637526bb 100644
--- a/src/org/linphone/CallIncomingActivity.java
+++ b/src/org/linphone/CallIncomingActivity.java
@@ -27,11 +27,22 @@ import org.linphone.core.LinphoneCallParams;
import org.linphone.core.LinphoneCore;
import org.linphone.core.LinphoneCoreListenerBase;
import org.linphone.mediastream.Log;
+import org.linphone.ui.LinphoneSliders;
import org.linphone.ui.LinphoneSliders.LinphoneSliderTriggered;
import android.app.Activity;
+import android.content.ClipData;
+import android.content.ClipDescription;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Point;
+import android.os.Build;
import android.os.Bundle;
+import android.os.PowerManager;
+import android.view.DragEvent;
+import android.view.GestureDetector;
import android.view.KeyEvent;
+import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
@@ -44,11 +55,15 @@ public class CallIncomingActivity extends Activity implements LinphoneSliderTrig
private static CallIncomingActivity instance;
private TextView name, number;
- private ImageView contactPicture, acceptArrow, accept, decline;
+ private ImageView contactPicture, acceptArrow, accept, acceptCall, decline;
private LinphoneCall mCall;
private LinphoneCoreListenerBase mListener;
private LinearLayout acceptUnlock;
+ private LinearLayout declineUnlock;
private StatusFragment status;
+ private boolean isActive;
+ private float answerX;
+ private float declineX;
public static CallIncomingActivity instance() {
return instance;
@@ -73,24 +88,113 @@ public class CallIncomingActivity extends Activity implements LinphoneSliderTrig
int flags = WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON;
getWindow().addFlags(flags);
+ PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
+ isActive = pm.isInteractive();
+ } else {
+ isActive = pm.isScreenOn();
+ }
+
+ acceptUnlock = (LinearLayout) findViewById(R.id.acceptUnlock);
+ declineUnlock = (LinearLayout) findViewById(R.id.declineUnlock);
+ //mIncomingCallWidget = (LinphoneSliders) findViewById(R.id.sliding_widget);
+
accept = (ImageView) findViewById(R.id.accept);
+ acceptArrow = (ImageView) findViewById(R.id.acceptArrow);
+ decline = (ImageView) findViewById(R.id.decline);
accept.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- answer();
- }
- });
- decline = (ImageView) findViewById(R.id.decline);
- decline.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- decline();
+ if(isActive) {
+ answer();
+ } else {
+ decline.setVisibility(View.GONE);
+ acceptUnlock.setVisibility(View.VISIBLE);
+ }
}
});
+ if(!isActive) {
+ accept.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View view, MotionEvent motionEvent) {
+ float curX;
+ switch (motionEvent.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ acceptUnlock.setVisibility(View.VISIBLE);
+ decline.setVisibility(View.GONE);
+ answerX = motionEvent.getX();
+ break;
+ case MotionEvent.ACTION_MOVE:
+ curX = motionEvent.getX();
+ view.scrollBy((int) (answerX - curX), view.getScrollY());
+ answerX = curX;
+ if (curX < 50) {
+ answer();
+ return true;
+ }
+ break;
+ case MotionEvent.ACTION_UP:
+ view.scrollTo(0, view.getScrollY());
+ decline.setVisibility(View.VISIBLE);
+ acceptUnlock.setVisibility(View.GONE);
+ break;
+
+ }
+ return true;
+ }
+ });
+
+ decline.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View view, MotionEvent motionEvent) {
+ float curX;
+ switch (motionEvent.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ declineUnlock.setVisibility(View.VISIBLE);
+ accept.setVisibility(View.GONE);
+ declineX = motionEvent.getX();
+ break;
+ case MotionEvent.ACTION_MOVE:
+ curX = motionEvent.getX();
+ view.scrollBy((int) (declineX - curX), view.getScrollY());
+ declineX = curX;
+ Log.w(curX);
+ if (curX > 800) {
+ //decline();
+ return true;
+ }
+ break;
+ case MotionEvent.ACTION_UP:
+ view.scrollTo(0, view.getScrollY());
+ accept.setVisibility(View.VISIBLE);
+ declineUnlock.setVisibility(View.GONE);
+ break;
+
+ }
+ return true;
+ }
+ });
+ }
+
+ decline.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if(isActive) {
+ decline();
+ } else {
+ accept.setVisibility(View.GONE);
+ acceptUnlock.setVisibility(View.VISIBLE);
+ }
+ }
+ });
+
+
+
+
mListener = new LinphoneCoreListenerBase(){
@Override
- public void callState(LinphoneCore lc, LinphoneCall call, LinphoneCall.State state, String message) {
+ public void callState(LinphoneCore lc, LinphoneCall call, State state, String message) {
if (call == mCall && State.CallEnd == state) {
finish();
}
@@ -101,6 +205,7 @@ public class CallIncomingActivity extends Activity implements LinphoneSliderTrig
}
};
+
super.onCreate(savedInstanceState);
instance = this;
}
@@ -193,13 +298,11 @@ public class CallIncomingActivity extends Activity implements LinphoneSliderTrig
@Override
public void onLeftHandleTriggered() {
- answer();
- finish();
+
}
@Override
public void onRightHandleTriggered() {
- decline();
- finish();
+
}
}
\ No newline at end of file
diff --git a/src/org/linphone/LinphoneService.java b/src/org/linphone/LinphoneService.java
index 088dc80df..42ab1217d 100644
--- a/src/org/linphone/LinphoneService.java
+++ b/src/org/linphone/LinphoneService.java
@@ -155,7 +155,7 @@ public final class LinphoneService extends Service {
bm = BitmapFactory.decodeResource(getResources(), R.drawable.logo_linphone_57x57);
} catch (Exception e) {
}
- mNotif = Compatibility.createNotification(this, mNotificationTitle, "", R.drawable.status_level, IC_LEVEL_OFFLINE, bm, mNotifContentIntent, true,notifcationsPriority);
+ mNotif = Compatibility.createNotification(this, mNotificationTitle, "", R.drawable.status_level, R.drawable.logo_linphone_57x57, bm, mNotifContentIntent, true,notifcationsPriority);
LinphoneManager.createAndStart(LinphoneService.this);
@@ -200,7 +200,7 @@ public final class LinphoneService extends Service {
@Override
public void globalState(LinphoneCore lc,LinphoneCore.GlobalState state, String message) {
if (state == GlobalState.GlobalOn) {
- sendNotification(IC_LEVEL_OFFLINE, R.string.notification_started);
+ sendNotification(IC_LEVEL_ORANGE, R.string.notification_started);
}
}
@@ -216,11 +216,11 @@ public final class LinphoneService extends Service {
}
if ((state == RegistrationState.RegistrationFailed || state == RegistrationState.RegistrationCleared) && (LinphoneManager.getLc().getDefaultProxyConfig() == null || !LinphoneManager.getLc().getDefaultProxyConfig().isRegistered())) {
- sendNotification(IC_LEVEL_OFFLINE, R.string.notification_register_failure);
+ sendNotification(IC_LEVEL_ORANGE, R.string.notification_register_failure);
}
if (state == RegistrationState.RegistrationNone) {
- sendNotification(IC_LEVEL_OFFLINE, R.string.notification_started);
+ sendNotification(IC_LEVEL_ORANGE, R.string.notification_started);
}
}
}
@@ -293,7 +293,7 @@ public final class LinphoneService extends Service {
notificationTextId = R.string.incall_notif_active;
break;
case PAUSE:
- inconId = R.drawable.conf_status_paused;
+ inconId = R.drawable.topbar_call_notification;
notificationTextId = R.string.incall_notif_paused;
break;
case VIDEO:
diff --git a/src/org/linphone/StatusFragment.java b/src/org/linphone/StatusFragment.java
index 9cfda41e9..16f1c3695 100644
--- a/src/org/linphone/StatusFragment.java
+++ b/src/org/linphone/StatusFragment.java
@@ -36,8 +36,11 @@ import org.linphone.mediastream.Log;
import android.app.Activity;
import android.app.AlertDialog;
+import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
+import android.graphics.drawable.ColorDrawable;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.app.Fragment;
@@ -45,6 +48,9 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
@@ -86,8 +92,8 @@ public class StatusFragment extends Fragment {
}
if(lc.getProxyConfigList() == null){
- statusLed.setVisibility(View.INVISIBLE);
- statusText.setText("");
+ statusLed.setImageResource(R.drawable.led_disconnected);
+ statusText.setText(getString(R.string.no_account));
} else {
statusLed.setVisibility(View.VISIBLE);
}
@@ -191,8 +197,8 @@ public class StatusFragment extends Fragment {
}
if(LinphoneManager.getLc().getProxyConfigList().length == 0){
- statusLed.setVisibility(View.INVISIBLE);
- statusText.setText("");
+ statusLed.setImageResource(R.drawable.led_disconnected);
+ statusText.setText(getString(R.string.no_account));
}
}
}
@@ -372,33 +378,52 @@ public class StatusFragment extends Fragment {
}
}
- private void showZRTPDialog(final LinphoneCall call) {
+ public void showZRTPDialog(final LinphoneCall call) {
if (getActivity() == null) {
Log.w("Can't display ZRTP popup, no Activity");
return;
}
- new AlertDialog.Builder(getActivity())
- .setTitle(call.getAuthenticationToken())
- .setMessage(getString(R.string.zrtp_help))
- .setPositiveButton(R.string.zrtp_accept, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- call.setAuthenticationTokenVerified(true);
+
+ final Dialog dialog = new Dialog(getActivity());
+ dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ Drawable d = new ColorDrawable(getResources().getColor(R.color.colorC));
+ d.setAlpha(200);
+ dialog.setContentView(R.layout.dialog);
+ dialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
+ dialog.getWindow().setBackgroundDrawable(d);
+
+ TextView customText = (TextView) dialog.findViewById(R.id.customText);
+ String newText = getString(R.string.zrtp_dialog).replace("%s",call.getAuthenticationToken());
+ customText.setText(newText);
+ Button delete = (Button) dialog.findViewById(R.id.delete);
+ delete.setText(R.string.accept);
+ Button cancel = (Button) dialog.findViewById(R.id.cancel);
+ cancel.setText(R.string.deny);
+
+ delete.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ call.setAuthenticationTokenVerified(true);
+ if (encryption != null) {
+ encryption.setImageResource(R.drawable.security_ok);
+ }
+ dialog.dismiss();
+ }
+ });
+
+ cancel.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if (call != null) {
+ call.setAuthenticationTokenVerified(false);
if (encryption != null) {
- encryption.setImageResource(R.drawable.security_ok);
+ encryption.setImageResource(R.drawable.security_pending);
}
- }
- })
- .setNegativeButton(R.string.zrtp_deny, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- if (call != null) {
- call.setAuthenticationTokenVerified(false);
- if (encryption != null) {
- encryption.setImageResource(R.drawable.security_pending);
- }
- }
- }
- })
- .show();
+ }
+ dialog.dismiss();
+ }
+ });
+ dialog.show();
}
public void initCallStatsRefresher(final LinphoneCall call, final View view) {