From cabecb97b2664058e3fb0cdeb5379e39fd5690c9 Mon Sep 17 00:00:00 2001 From: Margaux Clerc Date: Mon, 3 Aug 2015 12:24:23 +0200 Subject: [PATCH] Update UI contacts/dialer/chatlist and remove old assets --- res/drawable/add_call.xml | 6 - res/drawable/add_contact_button.xml | 5 - res/drawable/backspace.xml | 4 +- res/drawable/backspace_disabled.xml | 5 + ...add_contact.xml => contact_add_button.xml} | 4 +- res/drawable/contact_add_disabled.xml | 5 + res/layout-small/dialer.xml | 2 +- res/layout-sw533dp-land/dialer.xml | 2 +- res/layout/{setup.xml => assistant.xml} | 8 +- .../{setup_menu.xml => assistant_menu.xml} | 3 +- ...etup_toolbar.xml => assistant_toolbar.xml} | 6 +- res/layout/chatlist.xml | 31 -- res/layout/chatlist_cell.xml | 109 ++++--- res/layout/dialer.xml | 22 +- res/layout/history_detail.xml | 2 +- res/layout/incoming_alt.xml | 117 +++++++ res/layout/incoming_header.xml | 23 -- res/layout/main.xml | 7 +- res/layout/numpad.xml | 285 +++++++++++++++++- res/values/custom.xml | 1 + res/values/digit_style.xml | 1 + res/values/styles.xml | 104 +++++++ src/org/linphone/ChatListFragment.java | 93 +++--- src/org/linphone/DialerFragment.java | 14 +- src/org/linphone/LinphoneActivity.java | 7 +- src/org/linphone/setup/MenuFragment.java | 4 +- src/org/linphone/setup/SetupActivity.java | 2 +- 27 files changed, 666 insertions(+), 206 deletions(-) delete mode 100644 res/drawable/add_call.xml delete mode 100644 res/drawable/add_contact_button.xml create mode 100644 res/drawable/backspace_disabled.xml rename res/drawable/{add_contact.xml => contact_add_button.xml} (61%) create mode 100644 res/drawable/contact_add_disabled.xml rename res/layout/{setup.xml => assistant.xml} (73%) rename res/layout/{setup_menu.xml => assistant_menu.xml} (97%) rename res/layout/{setup_toolbar.xml => assistant_toolbar.xml} (89%) create mode 100644 res/layout/incoming_alt.xml delete mode 100644 res/layout/incoming_header.xml diff --git a/res/drawable/add_call.xml b/res/drawable/add_call.xml deleted file mode 100644 index ee0e337e9..000000000 --- a/res/drawable/add_call.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - diff --git a/res/drawable/add_contact_button.xml b/res/drawable/add_contact_button.xml deleted file mode 100644 index f1fa1d0a3..000000000 --- a/res/drawable/add_contact_button.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/res/drawable/backspace.xml b/res/drawable/backspace.xml index 6f2a75a42..e5209e310 100644 --- a/res/drawable/backspace.xml +++ b/res/drawable/backspace.xml @@ -1,7 +1,9 @@ - + diff --git a/res/drawable/backspace_disabled.xml b/res/drawable/backspace_disabled.xml new file mode 100644 index 000000000..9805546bd --- /dev/null +++ b/res/drawable/backspace_disabled.xml @@ -0,0 +1,5 @@ + + diff --git a/res/drawable/add_contact.xml b/res/drawable/contact_add_button.xml similarity index 61% rename from res/drawable/add_contact.xml rename to res/drawable/contact_add_button.xml index fd289bf98..c688770db 100644 --- a/res/drawable/add_contact.xml +++ b/res/drawable/contact_add_button.xml @@ -1,9 +1,7 @@ - + android:drawable="@drawable/contact_add_disabled" /> diff --git a/res/drawable/contact_add_disabled.xml b/res/drawable/contact_add_disabled.xml new file mode 100644 index 000000000..91d8435cc --- /dev/null +++ b/res/drawable/contact_add_disabled.xml @@ -0,0 +1,5 @@ + + diff --git a/res/layout-small/dialer.xml b/res/layout-small/dialer.xml index d4bdcb803..c863dc6c1 100644 --- a/res/layout-small/dialer.xml +++ b/res/layout-small/dialer.xml @@ -36,7 +36,7 @@ android:layout_height="match_parent" android:layout_weight="1" android:scaleType="fitXY" - android:src="@drawable/add_contact" /> + android:src="@drawable/toolbar_button" /> + android:src="@drawable/contact_add" /> + android:orientation="vertical"> - - + + android:orientation="vertical"> - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff --git a/res/layout/dialer.xml b/res/layout/dialer.xml index 6d6ab11e2..20dfeef56 100644 --- a/res/layout/dialer.xml +++ b/res/layout/dialer.xml @@ -2,11 +2,11 @@ + android:background="@color/colorH"> + android:layout_centerVertical="true" + style="@style/font5"/> @@ -46,20 +47,21 @@ android:layout_height="60dp"> + android:src="@drawable/contact_add_button" /> @@ -72,7 +74,7 @@ android:adjustViewBounds="true" android:scaleType="center" android:layout_weight="0.5" - android:src="@drawable/call_alt_start" /> + android:src="@drawable/call_audio_start" /> @@ -80,8 +82,8 @@ android:contentDescription="@string/content_description_numpad" android:id="@+id/Dialer" android:layout_centerInParent="true" - android:layout_width="wrap_content" - android:layout_height="wrap_content" + android:layout_width="match_parent" + android:layout_height="match_parent" android:layout_above="@id/controls" android:layout_below="@id/AddressBar" /> diff --git a/res/layout/history_detail.xml b/res/layout/history_detail.xml index 1c2436581..76d3bc98b 100644 --- a/res/layout/history_detail.xml +++ b/res/layout/history_detail.xml @@ -30,7 +30,7 @@ android:contentDescription="@string/content_description_add_contact" android:layout_alignParentRight="true" android:padding="10dp" - android:src="@drawable/add_contact" + android:src="@drawable/contact_add" android:background="@drawable/toolbar_button" android:layout_width="wrap_content" android:layout_height="match_parent" diff --git a/res/layout/incoming_alt.xml b/res/layout/incoming_alt.xml new file mode 100644 index 000000000..924f312d4 --- /dev/null +++ b/res/layout/incoming_alt.xml @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/layout/incoming_header.xml b/res/layout/incoming_header.xml deleted file mode 100644 index 4ab02face..000000000 --- a/res/layout/incoming_header.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/res/layout/main.xml b/res/layout/main.xml index 1dc4e4721..ae8791785 100644 --- a/res/layout/main.xml +++ b/res/layout/main.xml @@ -38,7 +38,7 @@ @@ -54,7 +54,6 @@ android:layout_height="wrap_content" android:adjustViewBounds="true" android:layout_margin="10dp" - android:scaleType="center" android:contentDescription="@string/content_description_history" android:src="@drawable/footer_history" /> @@ -91,7 +90,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:adjustViewBounds="true" - android:scaleType="center" android:layout_margin="10dp" android:contentDescription="@string/content_description_contacts" android:src="@drawable/footer_contacts" /> @@ -120,7 +118,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:adjustViewBounds="true" - android:scaleType="center" android:layout_margin="10dp" android:contentDescription="@string/content_description_contacts" android:src="@drawable/footer_dialer" /> @@ -146,7 +143,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:adjustViewBounds="true" - android:scaleType="center" + android:layout_margin="10dp" android:contentDescription="@string/content_description_contacts" android:src="@drawable/footer_chat" /> diff --git a/res/layout/numpad.xml b/res/layout/numpad.xml index 2e25eae44..61ffd39d0 100644 --- a/res/layout/numpad.xml +++ b/res/layout/numpad.xml @@ -1,30 +1,289 @@ + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_margin="20dp" + android:layout_weight="1"> - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/values/custom.xml b/res/values/custom.xml index a4a8974d6..f281116b8 100644 --- a/res/values/custom.xml +++ b/res/values/custom.xml @@ -3,6 +3,7 @@ d MMM yyyy/MM/dd - HH:mm HH:mm d MMM + dd/MM HH:mm linphone-mms-%s.jpg diff --git a/res/values/digit_style.xml b/res/values/digit_style.xml index 78be53796..328ddb4b1 100644 --- a/res/values/digit_style.xml +++ b/res/values/digit_style.xml @@ -3,6 +3,7 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/org/linphone/ChatListFragment.java b/src/org/linphone/ChatListFragment.java index c1caecb24..f3773577c 100644 --- a/src/org/linphone/ChatListFragment.java +++ b/src/org/linphone/ChatListFragment.java @@ -20,6 +20,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; +import java.text.SimpleDateFormat; +import java.util.Calendar; import java.util.List; import org.linphone.core.LinphoneAddress; @@ -64,9 +66,7 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte private List mConversations, mDrafts; private ListView chatList; private TextView noChatHistory; - private ImageView edit, selectAll, deselectAll, delete, newDiscussion; - private ImageView clearFastChat; - private EditText fastNewChat; + private ImageView edit, selectAll, deselectAll, delete, newDiscussion, contactPicture; private boolean isEditMode = false; private boolean useLinphoneStorage; @@ -81,6 +81,7 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte registerForContextMenu(chatList); noChatHistory = (TextView) view.findViewById(R.id.noChatHistory); + edit = (ImageView) view.findViewById(R.id.edit); edit.setOnClickListener(this); @@ -96,12 +97,6 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte delete = (ImageView) view.findViewById(R.id.delete); delete.setOnClickListener(this); - - clearFastChat = (ImageView) view.findViewById(R.id.clearFastChatField); - clearFastChat.setOnClickListener(this); - - fastNewChat = (EditText) view.findViewById(R.id.newFastChat); - return view; } @@ -212,10 +207,10 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte public void onClick(View v) { int id = v.getId(); - if (id == R.id.clearFastChatField) { + /*if (id == R.id.clearFastChatField) { fastNewChat.setText(""); - } - else if (id == R.id.delete) { + }*/ + if (id == R.id.delete) { edit.setVisibility(View.VISIBLE); selectAll.setVisibility(View.GONE); deselectAll.setVisibility(View.GONE); @@ -241,7 +236,7 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte hideAndDisplayMessageIfNoChat(); } else if (id == R.id.new_discussion) { - String sipUri = fastNewChat.getText().toString(); + /*String sipUri = fastNewChat.getText().toString(); if (sipUri.equals("")) { LinphoneActivity.instance().displayContacts(true); } else { @@ -255,7 +250,7 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte sipUri = "sip:" + sipUri; } LinphoneActivity.instance().displayChat(sipUri); - } + }*/ } } @@ -330,6 +325,38 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte } return null; } + + public String timestampToHumanDate(long timestamp) { + try { + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(timestamp); + + SimpleDateFormat dateFormat; + if (isToday(cal)) { + dateFormat = new SimpleDateFormat(getResources().getString(R.string.today_date_format)); + } else { + dateFormat = new SimpleDateFormat(getResources().getString(R.string.messages_list_date_format)); + } + + return dateFormat.format(cal.getTime()); + } catch (NumberFormatException nfe) { + return String.valueOf(timestamp); + } + } + + private boolean isToday(Calendar cal) { + return isSameDay(cal, Calendar.getInstance()); + } + + private boolean isSameDay(Calendar cal1, Calendar cal2) { + if (cal1 == null || cal2 == null) { + return false; + } + + return (cal1.get(Calendar.ERA) == cal2.get(Calendar.ERA) && + cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) && + cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR)); + } class ChatListAdapter extends BaseAdapter { private boolean useNativeAPI; @@ -380,35 +407,21 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte Contact lContact = ContactsManager.getInstance().findContactWithAddress(getActivity().getContentResolver(), address); String message = ""; - if (useNativeAPI) { - LinphoneChatRoom chatRoom = LinphoneManager.getLc().getOrCreateChatRoom(contact); - LinphoneChatMessage[] history = chatRoom.getHistory(20); - if (history != null && history.length > 0) { - for (int i = history.length - 1; i >= 0; i--) { - LinphoneChatMessage msg = history[i]; - if (msg.getText() != null && msg.getText().length() > 0 && msg.getFileTransferInformation() == null) { - message = msg.getText(); - break; - } + Long time = null; + LinphoneChatRoom chatRoom = LinphoneManager.getLc().getOrCreateChatRoom(contact); + LinphoneChatMessage[] history = chatRoom.getHistory(20); + if (history != null && history.length > 0) { + for (int i = history.length - 1; i >= 0; i--) { + LinphoneChatMessage msg = history[i]; + if (msg.getText() != null && msg.getText().length() > 0 && msg.getFileTransferInformation() == null) { + message = msg.getText(); + time = msg.getTime(); + break; } } - } else { - List messages = LinphoneActivity.instance().getChatMessages(contact); - if (messages != null && messages.size() > 0) { - int iterator = messages.size() - 1; - ChatMessage lastMessage = null; - - while (iterator >= 0) { - lastMessage = messages.get(iterator); - if (lastMessage.getMessage() == null) { - iterator--; - } else { - iterator = -1; - } - } - message = (lastMessage == null || lastMessage.getMessage() == null) ? "" : lastMessage.getMessage(); - } } + TextView date = (TextView) view.findViewById(R.id.date); + date.setText(timestampToHumanDate(time)); TextView lastMessageView = (TextView) view.findViewById(R.id.lastMessage); lastMessageView.setText(message); diff --git a/src/org/linphone/DialerFragment.java b/src/org/linphone/DialerFragment.java index 29894203a..838e5f6df 100644 --- a/src/org/linphone/DialerFragment.java +++ b/src/org/linphone/DialerFragment.java @@ -41,11 +41,10 @@ import android.widget.RelativeLayout; public class DialerFragment extends Fragment { private static DialerFragment instance; private static boolean isCallTransferOngoing = false; - - public boolean mVisible; + private AddressText mAddress; private CallButton mCall; - private RelativeLayout mAddContact; + private ImageView mAddContact; private OnClickListener addContactListener, cancelListener, transferListener; private boolean shouldEmptyAddressField = true; @@ -67,7 +66,7 @@ public class DialerFragment extends Fragment { if (isCallTransferOngoing) { mCall.setImageResource(R.drawable.call_transfer); } else { - mCall.setImageResource(R.drawable.add_call); + mCall.setImageResource(R.drawable.call_add); } } else { mCall.setImageResource(R.drawable.call_audio_start); @@ -78,7 +77,7 @@ public class DialerFragment extends Fragment { numpad.setAddressWidget(mAddress); } - mAddContact = (RelativeLayout) view.findViewById(R.id.addContact); + mAddContact = (ImageView) view.findViewById(R.id.addContact); addContactListener = new OnClickListener() { @Override @@ -162,7 +161,7 @@ public class DialerFragment extends Fragment { mCall.setImageResource(R.drawable.call_transfer); mCall.setExternalClickListener(transferListener); } else { - mCall.setImageResource(R.drawable.add_call); + mCall.setImageResource(R.drawable.call_add); mCall.resetClickListener(); } mAddContact.setEnabled(true); @@ -170,7 +169,6 @@ public class DialerFragment extends Fragment { mAddContact.setOnClickListener(cancelListener); } else { mCall.setImageResource(R.drawable.call_audio_start); - //mCall.setAlpha(30); mAddContact.setEnabled(true); //mAddContact.setImageResource(R.drawable.add_contact_button); mAddContact.setOnClickListener(addContactListener); @@ -179,7 +177,7 @@ public class DialerFragment extends Fragment { } public void enableDisableAddContact() { - mAddContact.setEnabled(LinphoneManager.getLc().getCallsNb() > 0 || !mAddress.getText().toString().equals("")); + mAddContact.setEnabled(LinphoneManager.getLc().getCallsNb() > 0 || !mAddress.getText().toString().equals("")); } public void displayTextInAddressBar(String numberOrSipAddress) { diff --git a/src/org/linphone/LinphoneActivity.java b/src/org/linphone/LinphoneActivity.java index 0701c7a5c..f4f639f80 100644 --- a/src/org/linphone/LinphoneActivity.java +++ b/src/org/linphone/LinphoneActivity.java @@ -347,6 +347,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta displaySettings(); break; case 2: + displayAssistant(); break; case 3: displayAbout(); @@ -728,9 +729,13 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta //settings.setSelected(true); } + public void displayAssistant() { + startActivity(new Intent(LinphoneActivity.this, SetupActivity.class)); + } + public boolean displayChatMessageNotification(String address){ if(chatFragment != null) { - if(chatFragment.getSipUri().equals(address)){ + if(chatFragment.getSipUri().equals(address)) { return false; } } diff --git a/src/org/linphone/setup/MenuFragment.java b/src/org/linphone/setup/MenuFragment.java index 8e6370904..c140d429d 100644 --- a/src/org/linphone/setup/MenuFragment.java +++ b/src/org/linphone/setup/MenuFragment.java @@ -26,7 +26,7 @@ import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; -import android.widget.ImageView; + /** * @author Sylvain Berfini */ @@ -36,7 +36,7 @@ public class MenuFragment extends Fragment implements OnClickListener { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.setup_menu, container, false); + View view = inflater.inflate(R.layout.assistant_menu, container, false); createAccount = (Button) view.findViewById(R.id.setup_create_account); createAccount.setOnClickListener(this); diff --git a/src/org/linphone/setup/SetupActivity.java b/src/org/linphone/setup/SetupActivity.java index 62468184d..9db37ab43 100644 --- a/src/org/linphone/setup/SetupActivity.java +++ b/src/org/linphone/setup/SetupActivity.java @@ -63,7 +63,7 @@ public class SetupActivity extends Activity implements OnClickListener { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } - setContentView(R.layout.setup); + setContentView(R.layout.assistant); firstFragment = getResources().getBoolean(R.bool.setup_use_linphone_as_first_fragment) ? SetupFragmentsEnum.LINPHONE_LOGIN : SetupFragmentsEnum.MENU; if (findViewById(R.id.fragmentContainer) != null) {