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); } } });