Update history

This commit is contained in:
Margaux Clerc 2015-09-01 11:42:02 +02:00
parent 4c895ecb51
commit f9c8e4fbd8
8 changed files with 67 additions and 53 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 467 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

View file

@ -49,6 +49,7 @@
android:contentDescription="@string/content_description_missed_calls" android:contentDescription="@string/content_description_missed_calls"
android:id="@+id/missed_calls" android:id="@+id/missed_calls"
android:src="@drawable/history_missed" android:src="@drawable/history_missed"
android:background="@drawable/toolbar_button"
android:padding="10dp" android:padding="10dp"
android:gravity="center" android:gravity="center"
android:layout_width="wrap_content" android:layout_width="wrap_content"

View file

@ -74,6 +74,7 @@
<CheckBox <CheckBox
android:id="@+id/delete" android:id="@+id/delete"
android:button="@drawable/checkbox"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentRight="true" android:layout_alignParentRight="true"

View file

@ -39,7 +39,7 @@ import android.widget.TextView;
* @author Sylvain Berfini * @author Sylvain Berfini
*/ */
public class HistoryDetailFragment extends Fragment implements OnClickListener { public class HistoryDetailFragment extends Fragment implements OnClickListener {
private ImageView dialBack, chat, addToContacts; private ImageView dialBack, chat, addToContacts, back;
private View view; private View view;
private ImageView contactPicture; private ImageView contactPicture;
private TextView contactName, contactAddress, callDirection, time, date; private TextView contactName, contactAddress, callDirection, time, date;
@ -60,6 +60,9 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener {
dialBack = (ImageView) view.findViewById(R.id.dialBack); dialBack = (ImageView) view.findViewById(R.id.dialBack);
dialBack.setOnClickListener(this); dialBack.setOnClickListener(this);
back = (ImageView) view.findViewById(R.id.back);
back.setOnClickListener(this);
chat = (ImageView) view.findViewById(R.id.chat); chat = (ImageView) view.findViewById(R.id.chat);
chat.setOnClickListener(this); chat.setOnClickListener(this);
if (getResources().getBoolean(R.bool.disable_chat)) if (getResources().getBoolean(R.bool.disable_chat))
@ -152,7 +155,9 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener {
public void onClick(View v) { public void onClick(View v) {
int id = v.getId(); int id = v.getId();
if (id == R.id.dialBack) { if (id == R.id.back) {
getFragmentManager().popBackStackImmediate();
} if (id == R.id.dialBack) {
LinphoneActivity.instance().setAddresGoToDialerAndCall(sipUri, displayName, pictureUri == null ? null : Uri.parse(pictureUri)); LinphoneActivity.instance().setAddresGoToDialerAndCall(sipUri, displayName, pictureUri == null ? null : Uri.parse(pictureUri));
} else if (id == R.id.chat) { } else if (id == R.id.chat) {
LinphoneActivity.instance().displayChat(sipUri); LinphoneActivity.instance().displayChat(sipUri);

View file

@ -32,14 +32,10 @@ import org.linphone.mediastream.Log;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Dialog; import android.app.Dialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle; import android.os.Bundle;
import android.app.Fragment; import android.app.Fragment;
import android.view.ContextMenu; import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo; import android.view.ContextMenu.ContextMenuInfo;
import android.view.KeyEvent;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
@ -144,15 +140,15 @@ public class HistoryFragment extends Fragment implements OnClickListener, OnItem
noMissedCallHistory.setVisibility(View.VISIBLE); noMissedCallHistory.setVisibility(View.VISIBLE);
} else { } else {
noCallHistory.setVisibility(View.VISIBLE); noCallHistory.setVisibility(View.VISIBLE);
edit.setEnabled(false);
} }
historyList.setVisibility(View.GONE); historyList.setVisibility(View.GONE);
edit.setEnabled(false);
return true; return true;
} else { } else {
noCallHistory.setVisibility(View.GONE); noCallHistory.setVisibility(View.GONE);
noMissedCallHistory.setVisibility(View.GONE); noMissedCallHistory.setVisibility(View.GONE);
edit.setEnabled(true);
historyList.setVisibility(View.VISIBLE); historyList.setVisibility(View.VISIBLE);
edit.setEnabled(true);
return false; return false;
} }
} }
@ -163,10 +159,6 @@ public class HistoryFragment extends Fragment implements OnClickListener, OnItem
if (LinphoneActivity.isInstanciated()) { if (LinphoneActivity.isInstanciated()) {
LinphoneActivity.instance().selectMenu(FragmentsAvailable.HISTORY); LinphoneActivity.instance().selectMenu(FragmentsAvailable.HISTORY);
if (getResources().getBoolean(R.bool.show_statusbar_only_on_dialer)) {
LinphoneActivity.instance().hideStatusBar();
}
} }
mLogs = Arrays.asList(LinphoneManager.getLc().getCallLogs()); mLogs = Arrays.asList(LinphoneManager.getLc().getCallLogs());
@ -188,6 +180,9 @@ public class HistoryFragment extends Fragment implements OnClickListener, OnItem
LinphoneCallLog log = mLogs.get(info.position); LinphoneCallLog log = mLogs.get(info.position);
LinphoneManager.getLc().removeCallLog(log); LinphoneManager.getLc().removeCallLog(log);
mLogs = Arrays.asList(LinphoneManager.getLc().getCallLogs()); mLogs = Arrays.asList(LinphoneManager.getLc().getCallLogs());
if (!hideHistoryListAndDisplayMessageIfEmpty()) {
historyList.setAdapter(new CallHistoryAdapter(getActivity()));
}
return true; return true;
} }
@ -200,6 +195,7 @@ public class HistoryFragment extends Fragment implements OnClickListener, OnItem
Button delete = (Button) dialog.findViewById(R.id.delete); Button delete = (Button) dialog.findViewById(R.id.delete);
Button cancel = (Button) dialog.findViewById(R.id.cancel); Button cancel = (Button) dialog.findViewById(R.id.cancel);
isEditMode = false;
delete.setOnClickListener(new OnClickListener() { delete.setOnClickListener(new OnClickListener() {
@Override @Override
public void onClick(View view) { public void onClick(View view) {
@ -210,7 +206,6 @@ public class HistoryFragment extends Fragment implements OnClickListener, OnItem
LinphoneManager.getLc().removeCallLog(log); LinphoneManager.getLc().removeCallLog(log);
} }
} }
isEditMode = false;
refresh(); refresh();
historyList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE); historyList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
historyList.setAdapter(new CallHistoryAdapter(getActivity())); historyList.setAdapter(new CallHistoryAdapter(getActivity()));
@ -231,15 +226,12 @@ public class HistoryFragment extends Fragment implements OnClickListener, OnItem
deselectAll.setVisibility(View.GONE); deselectAll.setVisibility(View.GONE);
deleteAll.setVisibility(View.GONE); deleteAll.setVisibility(View.GONE);
} }
else if (id == R.id.edit) { if (id == R.id.edit) {
edit.setVisibility(View.GONE); edit.setVisibility(View.GONE);
selectAll.setVisibility(View.VISIBLE); selectAll.setVisibility(View.VISIBLE);
deleteAll.setVisibility(View.VISIBLE); deleteAll.setVisibility(View.VISIBLE);
isEditMode = true; isEditMode = true;
historyList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
historyList.setAdapter(new CallHistoryAdapter(getActivity()));
} }
if (id == R.id.all_calls) { if (id == R.id.all_calls) {
allCalls.setEnabled(false); allCalls.setEnabled(false);
allCallsSelected.setVisibility(View.VISIBLE); allCallsSelected.setVisibility(View.VISIBLE);
@ -249,13 +241,25 @@ public class HistoryFragment extends Fragment implements OnClickListener, OnItem
mLogs = Arrays.asList(LinphoneManager.getLc().getCallLogs()); mLogs = Arrays.asList(LinphoneManager.getLc().getCallLogs());
} }
else if (id == R.id.missed_calls) { if (id == R.id.missed_calls) {
allCalls.setEnabled(true); allCalls.setEnabled(true);
allCallsSelected.setVisibility(View.INVISIBLE); allCallsSelected.setVisibility(View.INVISIBLE);
missedCallsSelected.setVisibility(View.VISIBLE); missedCallsSelected.setVisibility(View.VISIBLE);
missedCalls.setEnabled(false); missedCalls.setEnabled(false);
onlyDisplayMissedCalls = true; onlyDisplayMissedCalls = true;
}else if (id == R.id.select_all) { }
if (!hideHistoryListAndDisplayMessageIfEmpty()) {
historyList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
historyList.setAdapter(new CallHistoryAdapter(getActivity().getApplicationContext()));
}
if(isEditMode){
deselectAll.setVisibility(View.GONE);
selectAll.setVisibility(View.VISIBLE);
}
if (id == R.id.select_all) {
deselectAll.setVisibility(View.VISIBLE); deselectAll.setVisibility(View.VISIBLE);
selectAll.setVisibility(View.GONE); selectAll.setVisibility(View.GONE);
int size = historyList.getAdapter().getCount(); int size = historyList.getAdapter().getCount();
@ -265,7 +269,8 @@ public class HistoryFragment extends Fragment implements OnClickListener, OnItem
isSelectAll = true; isSelectAll = true;
isDeselectAll = false; isDeselectAll = false;
} else if (id == R.id.deselect_all) { }
if (id == R.id.deselect_all) {
deselectAll.setVisibility(View.GONE); deselectAll.setVisibility(View.GONE);
selectAll.setVisibility(View.VISIBLE); selectAll.setVisibility(View.VISIBLE);
int size = historyList.getAdapter().getCount(); int size = historyList.getAdapter().getCount();
@ -356,15 +361,7 @@ public class HistoryFragment extends Fragment implements OnClickListener, OnItem
} }
class CallHistoryAdapter extends BaseAdapter { class CallHistoryAdapter extends BaseAdapter {
private Bitmap missedCall, outgoingCall, incomingCall;
CallHistoryAdapter(Context aContext) { CallHistoryAdapter(Context aContext) {
missedCall = BitmapFactory.decodeResource(getResources(), R.drawable.call_status_missed);
if (!onlyDisplayMissedCalls) {
outgoingCall = BitmapFactory.decodeResource(getResources(), R.drawable.call_status_outgoing);
incomingCall = BitmapFactory.decodeResource(getResources(), R.drawable.call_status_incoming);
}
} }
public int getCount() { public int getCount() {
return mLogs.size(); return mLogs.size();
@ -418,18 +415,21 @@ public class HistoryFragment extends Fragment implements OnClickListener, OnItem
view = convertView; view = convertView;
} else { } else {
view = mInflater.inflate(R.layout.history_cell, parent,false); view = mInflater.inflate(R.layout.history_cell, parent,false);
ViewHolder holder = new ViewHolder();
holder.contact = (TextView) view.findViewById(R.id.sipUri);
holder.detail = (ImageView) view.findViewById(R.id.detail);
holder.delete = (CheckBox) view.findViewById(R.id.delete);
holder.callDirection = (ImageView) view.findViewById(R.id.icon);
view.setTag(holder);
} }
ViewHolder holder = (ViewHolder) view.getTag();
final LinphoneCallLog log = mLogs.get(position); final LinphoneCallLog log = mLogs.get(position);
long timestamp = log.getTimestamp(); long timestamp = log.getTimestamp();
final LinphoneAddress address; final LinphoneAddress address;
TextView contact = (TextView) view.findViewById(R.id.sipUri); holder.contact.setSelected(true); // For automated horizontal scrolling of long texts
contact.setSelected(true); // For automated horizontal scrolling of long texts
ImageView detail = (ImageView) view.findViewById(R.id.detail);
CheckBox delete = (CheckBox) view.findViewById(R.id.delete);
ImageView callDirection = (ImageView) view.findViewById(R.id.icon);
TextView separator = (TextView) view.findViewById(R.id.separator); TextView separator = (TextView) view.findViewById(R.id.separator);
Calendar logTime = Calendar.getInstance(); Calendar logTime = Calendar.getInstance();
@ -454,16 +454,16 @@ public class HistoryFragment extends Fragment implements OnClickListener, OnItem
if (log.getDirection() == CallDirection.Incoming) { if (log.getDirection() == CallDirection.Incoming) {
address = log.getFrom(); address = log.getFrom();
if (log.getStatus() == CallStatus.Missed) { if (log.getStatus() == CallStatus.Missed) {
callDirection.setImageBitmap(missedCall); holder.callDirection.setImageResource(R.drawable.call_status_missed);
} else { } else {
callDirection.setImageBitmap(incomingCall); holder.callDirection.setImageResource(R.drawable.call_status_incoming);
} }
} else { } else {
address = log.getTo(); address = log.getTo();
callDirection.setImageBitmap(outgoingCall); holder.callDirection.setImageResource(R.drawable.call_status_outgoing);
} }
Contact c = ContactsManager.getInstance().findContactWithAddress(getActivity().getContentResolver(), address); Contact c = ContactsManager.getInstance().findContactWithAddress(address);
String displayName = null; String displayName = null;
final String sipUri = address.asStringUriOnly(); final String sipUri = address.asStringUriOnly();
if(c != null){ if(c != null){
@ -472,37 +472,37 @@ public class HistoryFragment extends Fragment implements OnClickListener, OnItem
if (displayName == null) { if (displayName == null) {
if (getResources().getBoolean(R.bool.only_display_username_if_unknown) && LinphoneUtils.isSipAddress(sipUri)) { if (getResources().getBoolean(R.bool.only_display_username_if_unknown) && LinphoneUtils.isSipAddress(sipUri)) {
contact.setText(address.getUserName()); holder.contact.setText(address.getUserName());
} else { } else {
contact.setText(sipUri); holder.contact.setText(sipUri);
} }
} else { } else {
if (getResources().getBoolean(R.bool.only_display_username_if_unknown) && LinphoneUtils.isSipAddress(address.getDisplayName())) { if (getResources().getBoolean(R.bool.only_display_username_if_unknown) && LinphoneUtils.isSipAddress(address.getDisplayName())) {
contact.setText(displayName); holder.contact.setText(displayName);
} else { } else {
contact.setText(sipUri); holder.contact.setText(sipUri);
} }
} }
view.setTag(sipUri); //view.setTag(sipUri);
if (isEditMode) { if (isEditMode) {
delete.setVisibility(View.VISIBLE); holder.delete.setVisibility(View.VISIBLE);
delete.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { holder.delete.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override @Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) { public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
historyList.setItemChecked(position, b); historyList.setItemChecked(position, b);
} }
}); });
detail.setVisibility(View.GONE); holder.detail.setVisibility(View.GONE);
if(historyList.isItemChecked(position)) { if(historyList.isItemChecked(position)) {
delete.setChecked(true); holder.delete.setChecked(true);
} else { } else {
delete.setChecked(false); holder.delete.setChecked(false);
} }
} else { } else {
delete.setVisibility(View.GONE); holder.delete.setVisibility(View.GONE);
detail.setVisibility(View.VISIBLE); holder.detail.setVisibility(View.VISIBLE);
detail.setOnClickListener(new OnClickListener() { holder.detail.setOnClickListener(new OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (LinphoneActivity.isInstanciated()) { if (LinphoneActivity.isInstanciated()) {
@ -511,8 +511,15 @@ public class HistoryFragment extends Fragment implements OnClickListener, OnItem
} }
}); });
} }
return view; return view;
} }
} }
static class ViewHolder {
TextView contact;
ImageView detail;
CheckBox delete;
ImageView callDirection;
int position;
}
} }