diff --git a/res/drawable-hdpi/chat_default.png b/res/drawable-hdpi/chat_default.png
index 27be92470..e9c671361 100644
Binary files a/res/drawable-hdpi/chat_default.png and b/res/drawable-hdpi/chat_default.png differ
diff --git a/res/drawable-hdpi/chat_over.png b/res/drawable-hdpi/chat_over.png
index 55f66d83a..415b33a84 100644
Binary files a/res/drawable-hdpi/chat_over.png and b/res/drawable-hdpi/chat_over.png differ
diff --git a/res/drawable-hdpi/chat_progressbar_background.png b/res/drawable-hdpi/chat_progressbar_background.png
new file mode 100644
index 000000000..abd966e86
Binary files /dev/null and b/res/drawable-hdpi/chat_progressbar_background.png differ
diff --git a/res/drawable-hdpi/chat_selected.png b/res/drawable-hdpi/chat_selected.png
index a20549119..a7fff16a8 100644
Binary files a/res/drawable-hdpi/chat_selected.png and b/res/drawable-hdpi/chat_selected.png differ
diff --git a/res/drawable-hdpi/settings_default.png b/res/drawable-hdpi/settings_default.png
index a64d11de2..8acb31e7c 100644
Binary files a/res/drawable-hdpi/settings_default.png and b/res/drawable-hdpi/settings_default.png differ
diff --git a/res/drawable-hdpi/settings_over.png b/res/drawable-hdpi/settings_over.png
index 75ccd32a1..c73168440 100644
Binary files a/res/drawable-hdpi/settings_over.png and b/res/drawable-hdpi/settings_over.png differ
diff --git a/res/drawable-hdpi/settings_selected.png b/res/drawable-hdpi/settings_selected.png
index d88cf8c97..6070b2c09 100644
Binary files a/res/drawable-hdpi/settings_selected.png and b/res/drawable-hdpi/settings_selected.png differ
diff --git a/res/drawable-hdpi/setup_back_over.png b/res/drawable-hdpi/setup_back_over.png
index f0f2aaec7..aa86ad542 100644
Binary files a/res/drawable-hdpi/setup_back_over.png and b/res/drawable-hdpi/setup_back_over.png differ
diff --git a/res/drawable-hdpi/setup_cancel_over.png b/res/drawable-hdpi/setup_cancel_over.png
index aab926147..cf48a5173 100644
Binary files a/res/drawable-hdpi/setup_cancel_over.png and b/res/drawable-hdpi/setup_cancel_over.png differ
diff --git a/res/drawable-hdpi/setup_start_default.png b/res/drawable-hdpi/setup_start_default.png
new file mode 100644
index 000000000..342a59a6c
Binary files /dev/null and b/res/drawable-hdpi/setup_start_default.png differ
diff --git a/res/drawable-hdpi/setup_start_disabled.png b/res/drawable-hdpi/setup_start_disabled.png
new file mode 100644
index 000000000..c57868e0a
Binary files /dev/null and b/res/drawable-hdpi/setup_start_disabled.png differ
diff --git a/res/drawable-hdpi/setup_start_over.png b/res/drawable-hdpi/setup_start_over.png
new file mode 100644
index 000000000..7fc26c6fd
Binary files /dev/null and b/res/drawable-hdpi/setup_start_over.png differ
diff --git a/res/drawable/pause.xml b/res/drawable/pause.xml
new file mode 100644
index 000000000..ef208947c
--- /dev/null
+++ b/res/drawable/pause.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
diff --git a/res/drawable/play.xml b/res/drawable/play.xml
new file mode 100644
index 000000000..7835c3562
--- /dev/null
+++ b/res/drawable/play.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
diff --git a/res/drawable/remove.xml b/res/drawable/remove.xml
new file mode 100644
index 000000000..4a288620c
--- /dev/null
+++ b/res/drawable/remove.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
diff --git a/res/layout/active_call.xml b/res/layout/active_call.xml
index 0714528d2..cba886790 100644
--- a/res/layout/active_call.xml
+++ b/res/layout/active_call.xml
@@ -31,7 +31,7 @@
android:gravity="center_vertical"
android:scaleType="fitCenter"
android:adjustViewBounds="true"
- android:src="@drawable/pause_default" />
+ android:src="@drawable/pause" />
diff --git a/res/layout/chat_bubble_alt_outgoing.xml b/res/layout/chat_bubble_alt_outgoing.xml
index 2689f0bdf..37583206a 100644
--- a/res/layout/chat_bubble_alt_outgoing.xml
+++ b/res/layout/chat_bubble_alt_outgoing.xml
@@ -8,7 +8,7 @@
diff --git a/res/layout/conference_header.xml b/res/layout/conference_header.xml
index c5607809e..c442dcce5 100644
--- a/res/layout/conference_header.xml
+++ b/res/layout/conference_header.xml
@@ -26,7 +26,7 @@
android:layout_height="30dp"
android:scaleType="fitCenter"
android:adjustViewBounds="true"
- android:src="@drawable/pause_default" />
+ android:src="@drawable/pause" />
-
-
-
-
@@ -151,6 +147,10 @@
android:visibility="gone" />
+
+
+
+
diff --git a/res/values/non_localizable_custom.xml b/res/values/non_localizable_custom.xml
index b685b4629..cea289c94 100644
--- a/res/values/non_localizable_custom.xml
+++ b/res/values/non_localizable_custom.xml
@@ -17,9 +17,10 @@
false
false
false
- false
+ true
false
+ true
false
true
true
diff --git a/src/org/linphone/AudioCallFragment.java b/src/org/linphone/AudioCallFragment.java
index bc50b63e7..af9062886 100644
--- a/src/org/linphone/AudioCallFragment.java
+++ b/src/org/linphone/AudioCallFragment.java
@@ -78,9 +78,9 @@ public class AudioCallFragment extends Fragment implements OnClickListener {
ImageView conferenceState = (ImageView) conferenceHeader.findViewById(R.id.conferenceStatus);
conferenceState.setOnClickListener(this);
if (LinphoneManager.getLc().isInConference()) {
- conferenceState.setImageResource(R.drawable.play_default);
+ conferenceState.setImageResource(R.drawable.play);
} else {
- conferenceState.setImageResource(R.drawable.pause_default);
+ conferenceState.setImageResource(R.drawable.pause);
}
callsList.addView(conferenceHeader);
@@ -121,7 +121,7 @@ public class AudioCallFragment extends Fragment implements OnClickListener {
callState.setOnClickListener(this);
if (call.getState() == State.Paused || call.getState() == State.PausedByRemote || call.getState() == State.Pausing) {
- callState.setImageResource(R.drawable.pause_default);
+ callState.setImageResource(R.drawable.pause);
isCallPaused = true;
isInConference = false;
} else if (call.getState() == State.OutgoingInit || call.getState() == State.OutgoingProgress || call.getState() == State.OutgoingRinging) {
@@ -130,10 +130,10 @@ public class AudioCallFragment extends Fragment implements OnClickListener {
isInConference = false;
} else {
if (isConferenceRunning && call.isInConference()) {
- callState.setImageResource(R.drawable.call_state_delete_default);
+ callState.setImageResource(R.drawable.remove);
isInConference = true;
} else {
- callState.setImageResource(R.drawable.play_default);
+ callState.setImageResource(R.drawable.play);
isInConference = false;
}
isCallPaused = false;
diff --git a/src/org/linphone/ChatFragment.java b/src/org/linphone/ChatFragment.java
index 7be883dbf..75398ba3c 100644
--- a/src/org/linphone/ChatFragment.java
+++ b/src/org/linphone/ChatFragment.java
@@ -49,6 +49,7 @@ import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
+import android.graphics.Rect;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
@@ -64,6 +65,7 @@ import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
+import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ProgressBar;
@@ -161,10 +163,40 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
}
uploadServerUri = getActivity().getResources().getString(R.string.upload_url);
+ addVirtualKeyboardVisiblityListener();
return view;
}
+ private void addVirtualKeyboardVisiblityListener() {
+ view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
+ @Override
+ public void onGlobalLayout() {
+ Rect visibleArea = new Rect();
+ view.getWindowVisibleDisplayFrame(visibleArea);
+
+ int heightDiff = view.getRootView().getHeight() - (visibleArea.bottom - visibleArea.top);
+ if (heightDiff > 200) {
+ showKeyboardVisibleMode();
+ } else {
+ hideKeyboardVisibleMode();
+ }
+ }
+ });
+ }
+
+ public void showKeyboardVisibleMode() {
+ LinphoneActivity.instance().hideMenu(true);
+ contactPicture.setVisibility(View.GONE);
+ scrollToEnd();
+ }
+
+ public void hideKeyboardVisibleMode() {
+ LinphoneActivity.instance().hideMenu(false);
+ contactPicture.setVisibility(View.VISIBLE);
+ scrollToEnd();
+ }
+
private void invalidate() {
messagesLayout.removeAllViews();
List messagesList = LinphoneActivity.instance().getChatMessages(sipUri);
@@ -290,14 +322,12 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
public void onPause() {
super.onPause();
latestImageMessages = null;
- Log.e("Deleted hashmap");
}
@SuppressLint("UseSparseArrays")
@Override
public void onResume() {
latestImageMessages = new HashMap();
- Log.e("New hashmap");
super.onResume();
@@ -342,7 +372,6 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
newId = LinphoneActivity.instance().onMessageSent(sipUri, bitmap, url);
}
latestImageMessages.put(newId, url);
- Log.e("Add " + newId + ", " + url + " to hashmap");
displayImageMessage(newId, bitmap, String.valueOf(System.currentTimeMillis()), false, State.InProgress, messagesLayout);
scrollToEnd();
diff --git a/src/org/linphone/DialerFragment.java b/src/org/linphone/DialerFragment.java
index abdb1f066..34beb33e0 100644
--- a/src/org/linphone/DialerFragment.java
+++ b/src/org/linphone/DialerFragment.java
@@ -159,8 +159,8 @@ public class DialerFragment extends Fragment {
mAddContact.setEnabled(true);
mAddContact.setImageResource(R.drawable.cancel);
mAddContact.setOnClickListener(cancelListener);
- } else {
mAddress.setText("");
+ } else {
mCall.setImageResource(R.drawable.call);
mAddContact.setEnabled(true);
mAddContact.setImageResource(R.drawable.add_contact);
diff --git a/src/org/linphone/FragmentsAvailable.java b/src/org/linphone/FragmentsAvailable.java
index 0f4d50411..8853e1027 100644
--- a/src/org/linphone/FragmentsAvailable.java
+++ b/src/org/linphone/FragmentsAvailable.java
@@ -59,20 +59,20 @@ public enum FragmentsAvailable {
case DIALER:
return CONTACTS.isRightOf(fragment) || fragment == CONTACT || fragment == CONTACTS;
- case ABOUT_INSTEAD_OF_SETTINGS:
- case SETTINGS:
- return DIALER.isRightOf(fragment) || fragment == DIALER;
-
- case ACCOUNT_SETTINGS:
- return SETTINGS.isRightOf(fragment) || fragment == SETTINGS;
-
case ABOUT_INSTEAD_OF_CHAT:
case CHATLIST:
- return ACCOUNT_SETTINGS.isRightOf(fragment) || fragment == ACCOUNT_SETTINGS || fragment == FragmentsAvailable.ABOUT_INSTEAD_OF_SETTINGS;
+ return DIALER.isRightOf(fragment) || fragment == DIALER;
case CHAT:
return CHATLIST.isRightOf(fragment) || fragment == CHATLIST;
+ case ABOUT_INSTEAD_OF_SETTINGS:
+ case SETTINGS:
+ return CHATLIST.isRightOf(fragment) || fragment == CHATLIST || fragment == FragmentsAvailable.ABOUT_INSTEAD_OF_CHAT;
+
+ case ACCOUNT_SETTINGS:
+ return SETTINGS.isRightOf(fragment) || fragment == SETTINGS;
+
default:
return false;
}
diff --git a/src/org/linphone/LinphoneActivity.java b/src/org/linphone/LinphoneActivity.java
index 73a1f9878..ab4f3c07a 100644
--- a/src/org/linphone/LinphoneActivity.java
+++ b/src/org/linphone/LinphoneActivity.java
@@ -89,10 +89,11 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene
private static final int callActivity = 19;
private static LinphoneActivity instance;
-
+
private StatusFragment statusFragment;
private TextView missedCalls, missedChats;
private ImageView dialer;
+ private LinearLayout menu, mark;
private RelativeLayout contacts, history, settings, chat, aboutChat, aboutSettings;
private FragmentsAvailable currentFragment, nextFragment;
private Fragment dialerFragment, messageListenerFragment;
@@ -161,6 +162,9 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene
}
private void initButtons() {
+ menu = (LinearLayout) findViewById(R.id.menu);
+ mark = (LinearLayout) findViewById(R.id.mark);
+
history = (RelativeLayout) findViewById(R.id.history);
history.setOnClickListener(this);
contacts = (RelativeLayout) findViewById(R.id.contacts);
@@ -192,6 +196,23 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene
missedChats = (TextView) findViewById(R.id.missedChats);
}
+ private void hideStatusBar() {
+ if (statusFragment == null) {
+ return;
+ }
+
+ statusFragment.getView().setVisibility(View.GONE);
+ findViewById(R.id.fragmentContainer).setPadding(0, 0, 0, 0);
+ }
+ private void showStatusBar() {
+ if (statusFragment == null) {
+ return;
+ }
+
+ statusFragment.getView().setVisibility(View.VISIBLE);
+ findViewById(R.id.fragmentContainer).setPadding(0, LinphoneUtils.pixelsToDpi(getResources(), 40), 0, 0);
+ }
+
private void changeCurrentFragment(FragmentsAvailable newFragmentType, Bundle extras) {
changeCurrentFragment(newFragmentType, extras, false);
}
@@ -263,8 +284,16 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene
}
private void changeFragment(Fragment newFragment, FragmentsAvailable newFragmentType, boolean withoutAnimation) {
- if (statusFragment != null) {
- statusFragment.closeStatusBar();
+ if (getResources().getBoolean(R.bool.show_statusbar_only_on_dialer)) {
+ if (newFragmentType == FragmentsAvailable.DIALER) {
+ showStatusBar();
+ } else {
+ hideStatusBar();
+ }
+ } else {
+ if (statusFragment != null) {
+ statusFragment.closeStatusBar();
+ }
}
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
@@ -291,8 +320,16 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene
}
private void changeFragmentForTablets(Fragment newFragment, FragmentsAvailable newFragmentType, boolean withoutAnimation) {
- if (statusFragment != null) {
- statusFragment.closeStatusBar();
+ if (getResources().getBoolean(R.bool.show_statusbar_only_on_dialer)) {
+ if (newFragmentType == FragmentsAvailable.DIALER) {
+ showStatusBar();
+ } else {
+ hideStatusBar();
+ }
+ } else {
+ if (statusFragment != null) {
+ statusFragment.closeStatusBar();
+ }
}
LinearLayout ll = (LinearLayout) findViewById(R.id.fragmentContainer2);
@@ -528,7 +565,12 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene
public void updateChatFragment(ChatFragment fragment) {
messageListenerFragment = fragment;
// Hack to maintain ADJUST_PAN flag
- getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
+ getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
+ }
+
+ public void hideMenu(boolean hide) {
+ menu.setVisibility(hide ? View.GONE : View.VISIBLE);
+ mark.setVisibility(hide ? View.GONE : View.VISIBLE);
}
public void updateStatusFragment(StatusFragment fragment) {
@@ -756,12 +798,6 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene
changeCurrentFragment(FragmentsAvailable.DIALER, null);
}
- public void onRegistrationStateChanged(RegistrationState state, String message) {
- if (statusFragment != null) {
- statusFragment.registrationStateChanged(state);
- }
- }
-
public void startVideoActivity(LinphoneCall currentCall) {
Intent intent = new Intent(this, InCallActivity.class);
intent.putExtra("VideoEnabled", true);
diff --git a/src/org/linphone/LinphoneService.java b/src/org/linphone/LinphoneService.java
index 15d71cd6e..fcf45e66e 100644
--- a/src/org/linphone/LinphoneService.java
+++ b/src/org/linphone/LinphoneService.java
@@ -515,7 +515,7 @@ public final class LinphoneService extends Service implements LinphoneServiceLis
mHandler.post(new Runnable() {
public void run() {
if (LinphoneActivity.isInstanciated()) {
- LinphoneActivity.instance().onRegistrationStateChanged(state, message);
+ LinphoneActivity.instance().onRegistrationStateChanged(state);
}
}
});