From 3a66c0490ceee5a5322ded9e08125c94d7cf74ef Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 27 Aug 2012 17:52:46 +0200 Subject: [PATCH] Some fixes + choice to use old history list --- res/layout/history_cell_simple.xml | 49 ++++ res/layout/history_simple.xml | 64 +++++ res/layout/main.xml | 1 + res/values/non_localizable_custom.xml | 1 + res/xml-v14/preferences.xml | 3 +- res/xml/account_preferences.xml | 2 + src/org/linphone/HistorySimpleFragment.java | 249 ++++++++++++++++++++ src/org/linphone/LinphoneActivity.java | 6 +- src/org/linphone/PreferencesActivity.java | 2 +- 9 files changed, 374 insertions(+), 3 deletions(-) create mode 100644 res/layout/history_cell_simple.xml create mode 100644 res/layout/history_simple.xml create mode 100644 src/org/linphone/HistorySimpleFragment.java diff --git a/res/layout/history_cell_simple.xml b/res/layout/history_cell_simple.xml new file mode 100644 index 000000000..e29e37b0c --- /dev/null +++ b/res/layout/history_cell_simple.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/res/layout/history_simple.xml b/res/layout/history_simple.xml new file mode 100644 index 000000000..e0e1f55dc --- /dev/null +++ b/res/layout/history_simple.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/layout/main.xml b/res/layout/main.xml index cefba495d..dd80d88f2 100644 --- a/res/layout/main.xml +++ b/res/layout/main.xml @@ -79,6 +79,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" tools:layout="@layout/status" /> + https://www.linphone.org/wizard.php + true false false false diff --git a/res/xml-v14/preferences.xml b/res/xml-v14/preferences.xml index 3802a19d8..162af496d 100644 --- a/res/xml-v14/preferences.xml +++ b/res/xml-v14/preferences.xml @@ -262,7 +262,8 @@ android:switchTextOn="@string/yes" android:switchTextOff="@string/no" android:key="@string/pref_debug_key" - android:title="@string/pref_debug" android:enabled="true"/> + android:title="@string/pref_debug" + android:defaultValue="false"/> diff --git a/res/xml/account_preferences.xml b/res/xml/account_preferences.xml index bc09b9d3e..2c23bfeb1 100644 --- a/res/xml/account_preferences.xml +++ b/res/xml/account_preferences.xml @@ -30,6 +30,8 @@ mLogs; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + mInflater = inflater; + View view = inflater.inflate(R.layout.history_simple, container, false); + + historyList = (ListView) view.findViewById(R.id.historyList); + historyList.setOnItemClickListener(this); + registerForContextMenu(historyList); + + allCalls = (ImageView) view.findViewById(R.id.allCalls); + allCalls.setOnClickListener(this); + missedCalls = (ImageView) view.findViewById(R.id.missedCalls); + missedCalls.setOnClickListener(this); + allCalls.setEnabled(false); + onlyDisplayMissedCalls = false; + edit = (ImageView) view.findViewById(R.id.edit); + edit.setOnClickListener(this); + ok = (ImageView) view.findViewById(R.id.ok); + ok.setOnClickListener(this); + + return view; + } + + @Override + public void onResume() { + super.onResume(); + if (LinphoneActivity.isInstanciated()) + LinphoneActivity.instance().selectMenu(FragmentsAvailable.HISTORY); + + mLogs = Arrays.asList(LinphoneManager.getLc().getCallLogs()); + historyList.setAdapter(new CallHistoryAdapter(getActivity().getApplicationContext())); + } + + @Override + public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { + super.onCreateContextMenu(menu, v, menuInfo); + menu.add(0, v.getId(), 0, getString(R.string.delete)); + } + + @Override + public boolean onContextItemSelected(MenuItem item) { + AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); + LinphoneCallLog log = mLogs.get(info.position); + LinphoneManager.getLc().removeCallLog(log); + mLogs = Arrays.asList(LinphoneManager.getLc().getCallLogs()); + historyList.setAdapter(new CallHistoryAdapter(getActivity().getApplicationContext())); + return true; + } + + @Override + public void onClick(View v) { + int id = v.getId(); + + if (id == R.id.allCalls) { + allCalls.setEnabled(false); + missedCalls.setEnabled(true); + onlyDisplayMissedCalls = false; + + mLogs = Arrays.asList(LinphoneManager.getLc().getCallLogs()); + } + else if (id == R.id.missedCalls) { + allCalls.setEnabled(true); + missedCalls.setEnabled(false); + onlyDisplayMissedCalls = true; + } + else if (id == R.id.ok) { + edit.setVisibility(View.VISIBLE); + ok.setVisibility(View.GONE); + isEditMode = false; + } + else if (id == R.id.edit) { + edit.setVisibility(View.GONE); + ok.setVisibility(View.VISIBLE); + isEditMode = true; + } + + historyList.setAdapter(new CallHistoryAdapter(getActivity().getApplicationContext())); + } + + @Override + public void onItemClick(AdapterView adapter, View view, int position, long id) { + if (isEditMode) { + LinphoneCallLog log = mLogs.get(position); + LinphoneManager.getLc().removeCallLog(log); + mLogs = Arrays.asList(LinphoneManager.getLc().getCallLogs()); + historyList.setAdapter(new CallHistoryAdapter(getActivity().getApplicationContext())); + } else { + LinphoneCallLog log = mLogs.get(position); + LinphoneAddress address; + if (log.getDirection() == CallDirection.Incoming) { + address = log.getFrom(); + } else { + address = log.getTo(); + } + LinphoneActivity.instance().displayHistoryDetail(address.asStringUriOnly(), log); + } + } + + class CallHistoryAdapter extends BaseAdapter { + private Bitmap missedCall, outgoingCall, incomingCall; + + CallHistoryAdapter(Context aContext) { + missedCall = BitmapFactory.decodeResource(getResources(), R.drawable.call_status_missed); + + if (onlyDisplayMissedCalls) { + List missedCalls = new ArrayList(); + for (LinphoneCallLog log : mLogs) { + if (log.getStatus() == CallStatus.Missed) { + missedCalls.add(log); + } + } + mLogs = missedCalls; + } else { + outgoingCall = BitmapFactory.decodeResource(getResources(), R.drawable.call_status_outgoing); + incomingCall = BitmapFactory.decodeResource(getResources(), R.drawable.call_status_incoming); + } + } + public int getCount() { + return mLogs.size(); + } + + public Object getItem(int position) { + return mLogs.get(position); + } + + public long getItemId(int position) { + return position; + } + + public View getView(int position, View convertView, ViewGroup parent) { + View view = null; + if (convertView != null) { + view = convertView; + } else { + view = mInflater.inflate(R.layout.history_cell_simple, parent,false); + } + + LinphoneCallLog log = mLogs.get(position); + LinphoneAddress address; + + TextView contact = (TextView) view.findViewById(R.id.sipUri); + ImageView detail = (ImageView) view.findViewById(R.id.detail); + ImageView delete = (ImageView) view.findViewById(R.id.delete); + ImageView callDirection = (ImageView) view.findViewById(R.id.icon); + + + if (log.getDirection() == CallDirection.Incoming) { + address = log.getFrom(); + if (log.getStatus() == CallStatus.Missed) { + callDirection.setImageBitmap(missedCall); + } else { + callDirection.setImageBitmap(incomingCall); + } + } else { + address = log.getTo(); + callDirection.setImageBitmap(outgoingCall); + } + + LinphoneUtils.findUriPictureOfContactAndSetDisplayName(address, view.getContext().getContentResolver()); + String displayName = address.getDisplayName(); + String sipUri = address.asStringUriOnly(); + + if (displayName == null) { + if (getResources().getBoolean(R.bool.only_display_username_if_unknown) && LinphoneUtils.isSipAddress(sipUri)) { + contact.setText(LinphoneUtils.getUsernameFromAddress(sipUri)); + } else { + contact.setText(sipUri); + } + } else { + if (getResources().getBoolean(R.bool.only_display_username_if_unknown) && LinphoneUtils.isSipAddress(address.getDisplayName())) { + contact.setText(LinphoneUtils.getUsernameFromAddress(address.getDisplayName())); + } else { + contact.setText(displayName); + } + } + view.setTag(sipUri); + + if (isEditMode) { + delete.setVisibility(View.VISIBLE); + detail.setVisibility(View.GONE); + } else { + delete.setVisibility(View.GONE); + detail.setVisibility(View.VISIBLE); + } + + return view; + } + + } +} \ No newline at end of file diff --git a/src/org/linphone/LinphoneActivity.java b/src/org/linphone/LinphoneActivity.java index d8802f621..e22170bc9 100644 --- a/src/org/linphone/LinphoneActivity.java +++ b/src/org/linphone/LinphoneActivity.java @@ -185,7 +185,11 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene switch (newFragmentType) { case HISTORY: - newFragment = new HistoryFragment(); + if (getResources().getBoolean(R.bool.use_simple_history)) { + newFragment = new HistorySimpleFragment(); + } else { + newFragment = new HistoryFragment(); + } break; case HISTORY_DETAIL: newFragment = new HistoryDetailFragment(); diff --git a/src/org/linphone/PreferencesActivity.java b/src/org/linphone/PreferencesActivity.java index dce9e4ce7..450b12ffe 100644 --- a/src/org/linphone/PreferencesActivity.java +++ b/src/org/linphone/PreferencesActivity.java @@ -308,7 +308,7 @@ public class PreferencesActivity extends LinphonePreferencesActivity implements videoSettings.removeAll(); videoSettings.setLayoutResource(R.layout.hidden); - CheckBoxPreference enableVideo = (CheckBoxPreference) findPreference(R.string.pref_video_enable_key); + Preference enableVideo = findPreference(R.string.pref_video_enable_key); enableVideo.setLayoutResource(R.layout.hidden); } }