diff options
Diffstat (limited to 'src/com/android/dialer/calllog')
4 files changed, 103 insertions, 17 deletions
diff --git a/src/com/android/dialer/calllog/CallLogActivity.java b/src/com/android/dialer/calllog/CallLogActivity.java index fe79ea6c0..4b40f29dc 100755 --- a/src/com/android/dialer/calllog/CallLogActivity.java +++ b/src/com/android/dialer/calllog/CallLogActivity.java @@ -77,6 +77,7 @@ public class CallLogActivity extends AnalyticsActivity implements switch (position) { case TAB_INDEX_MSIM: mMSimCallsFragment = new MSimCallLogFragment(); + mMSimCallsFragment.setHasOptionsMenu(true); return mMSimCallsFragment; case TAB_INDEX_MSIM_STATS: mStatsFragment = new CallStatsFragment(); @@ -394,6 +395,13 @@ public class CallLogActivity extends AnalyticsActivity implements @Override public void onDateSet(long from, long to) { - mStatsFragment.onDateSet(from, to); + switch (mViewPager.getCurrentItem()) { + case TAB_INDEX_MSIM: + mMSimCallsFragment.onDateSet(from, to); + break; + case TAB_INDEX_MSIM_STATS: + mStatsFragment.onDateSet(from, to); + break; + } } } diff --git a/src/com/android/dialer/calllog/CallLogFragment.java b/src/com/android/dialer/calllog/CallLogFragment.java index 9eba829bf..a38783bc5 100644 --- a/src/com/android/dialer/calllog/CallLogFragment.java +++ b/src/com/android/dialer/calllog/CallLogFragment.java @@ -33,16 +33,14 @@ import android.provider.CallLog; import android.provider.CallLog.Calls; import android.provider.ContactsContract; import android.provider.VoicemailContract.Status; -import android.util.MutableInt; import android.view.LayoutInflater; import android.view.View; -import android.view.ViewGroup; -import android.view.ViewTreeObserver; import android.view.View.OnClickListener; +import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; +import android.view.ViewTreeObserver; import android.widget.ListView; import android.widget.TextView; - import com.android.contacts.common.GeoUtil; import com.android.contacts.common.util.ViewUtil; import com.android.dialer.R; @@ -205,7 +203,6 @@ public class CallLogFragment extends AnalyticsListFragment ContactsContract.Contacts.CONTENT_URI, true, mContactsObserver); getActivity().getContentResolver().registerContentObserver( Status.CONTENT_URI, true, mVoicemailStatusObserver); - setHasOptionsMenu(true); updateCallList(mCallTypeFilter, mDateLimit); mExpandedItemTranslationZ = @@ -416,7 +413,13 @@ public class CallLogFragment extends AnalyticsListFragment @Override public void fetchCalls() { - mCallLogQueryHandler.fetchCalls(mCallTypeFilter, mDateLimit); + fetchCalls(-1, -1, CallLogQueryHandler.CALL_SUB_ALL); + } + + protected void fetchCalls(long filterFromDate, long filterToDate, int subId) { + mCallLogQueryHandler.fetchCallsInDateRange( + mCallTypeFilter, filterFromDate, filterToDate > 0 ? filterToDate : mDateLimit, + subId); } public void startCallsQuery() { diff --git a/src/com/android/dialer/calllog/CallLogQueryHandler.java b/src/com/android/dialer/calllog/CallLogQueryHandler.java index b2399b9ea..8af604985 100755 --- a/src/com/android/dialer/calllog/CallLogQueryHandler.java +++ b/src/com/android/dialer/calllog/CallLogQueryHandler.java @@ -126,12 +126,12 @@ public class CallLogQueryHandler extends NoNullCursorAsyncQueryHandler { */ public void fetchCalls(int callType, long newerThan) { cancelFetch(); - fetchCalls(QUERY_CALLLOG_TOKEN, callType, false /* newOnly */, newerThan); + fetchCalls(QUERY_CALLLOG_TOKEN, callType, false /* newOnly */, 0, newerThan); } public void fetchCalls(int callType, long newerThan, int sub) { cancelFetch(); - fetchCalls(QUERY_CALLLOG_TOKEN, callType, false /* newOnly */, newerThan, sub); + fetchCalls(QUERY_CALLLOG_TOKEN, callType, false /* newOnly */, 0, newerThan, sub); } public void fetchCalls(int callType) { @@ -152,18 +152,23 @@ public class CallLogQueryHandler extends NoNullCursorAsyncQueryHandler { Calls.DEFAULT_SORT_ORDER); } + public void fetchCallsInDateRange(int callType, long fromDate, long toDate, int subId) { + fetchCalls(QUERY_CALLLOG_TOKEN, callType, false, toDate, fromDate, subId); + } + public void fetchVoicemailStatus() { startQuery(QUERY_VOICEMAIL_STATUS_TOKEN, null, Status.CONTENT_URI, VoicemailStatusHelperImpl.PROJECTION, null, null, null); } /** Fetches the list of calls in the call log. */ - private void fetchCalls(int token, int callType, boolean newOnly, long newerThan) { - fetchCalls(token, callType, newOnly, newerThan, CALL_SUB_ALL); + private void fetchCalls(int token, int callType, boolean newOnly, + long olderThan, long newerThan) { + fetchCalls(token, callType, newOnly, olderThan, newerThan, CALL_SUB_ALL); } private void fetchCalls(int token, int callType, boolean newOnly, - long newerThan, int slotId) { + long olderThan, long newerThan, int slotId) { // We need to check for NULL explicitly otherwise entries with where READ is NULL // may not match either the query or its negation. // We consider the calls that are not yet consumed (i.e. IS_READ = 0) as "new". @@ -204,6 +209,14 @@ public class CallLogQueryHandler extends NoNullCursorAsyncQueryHandler { selectionArgs.add(Long.toString(newerThan)); } + if (olderThan > 0) { + if (where.length() > 0) { + where.append(" AND "); + } + where.append(String.format("(%s <= ?)", Calls.DATE)); + selectionArgs.add(Long.toString(olderThan)); + } + final int limit = (mLogLimit == -1) ? NUM_LOGS_TO_DISPLAY : mLogLimit; final String selection = where.length() > 0 ? where.toString() : null; Uri uri = Calls.CONTENT_URI_WITH_VOICEMAIL.buildUpon() diff --git a/src/com/android/dialer/calllog/MSimCallLogFragment.java b/src/com/android/dialer/calllog/MSimCallLogFragment.java index 4f5c48deb..ecc601d4d 100755 --- a/src/com/android/dialer/calllog/MSimCallLogFragment.java +++ b/src/com/android/dialer/calllog/MSimCallLogFragment.java @@ -31,11 +31,13 @@ package com.android.dialer.calllog; import android.app.Activity; import android.content.Context; +import android.database.Cursor; import android.os.Bundle; import android.preference.PreferenceManager; import android.provider.CallLog.Calls; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; +import android.text.format.DateUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; @@ -52,6 +54,7 @@ import android.widget.TextView; import com.android.contacts.common.MoreContactUtils; import com.android.dialer.R; import com.android.dialer.voicemail.VoicemailStatusHelperImpl; +import com.android.dialer.widget.DoubleDatePickerDialog; import com.google.common.annotations.VisibleForTesting; import java.util.List; @@ -59,9 +62,14 @@ import java.util.List; /** * Displays a list of call log entries. */ -public class MSimCallLogFragment extends CallLogFragment { +public class MSimCallLogFragment extends CallLogFragment + implements DoubleDatePickerDialog.OnDateSetListener { private static final String TAG = "MSimCallLogFragment"; + private long mFilterFrom = -1; + private long mFilterTo = -1; + private TextView mDateFilterView; + /** * Key for the call log sub saved in the default preference. */ @@ -82,7 +90,7 @@ public class MSimCallLogFragment extends CallLogFragment { int sub = position - 1; mCallSubFilter = sub; setSelectedSub(sub); - mCallLogQueryHandler.fetchCalls(mCallTypeFilter, 0, mCallSubFilter); + fetchCalls(); } @Override @@ -98,7 +106,7 @@ public class MSimCallLogFragment extends CallLogFragment { public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Log.i(TAG, "Status selected, position: " + position); mCallTypeFilter = ((SpinnerContent)parent.getItemAtPosition(position)).value; - mCallLogQueryHandler.fetchCalls(mCallTypeFilter, 0, mCallSubFilter); + fetchCalls(); } @Override @@ -131,6 +139,7 @@ public class MSimCallLogFragment extends CallLogFragment { mFilterSubSpinnerView = (Spinner) view.findViewById(R.id.filter_sub_spinner); mFilterStatusSpinnerView = (Spinner) view.findViewById(R.id.filter_status_spinner); + mDateFilterView = (TextView) view.findViewById(R.id.date_filter); // Update the filter views. updateFilterSpinnerViews(); @@ -140,13 +149,13 @@ public class MSimCallLogFragment extends CallLogFragment { @Override public void fetchCalls() { - mCallLogQueryHandler.fetchCalls(mCallTypeFilter, 0, mCallSubFilter); + fetchCalls(mFilterFrom, mFilterTo, mCallSubFilter); } @Override public void startCallsQuery() { mAdapter.setLoading(true); - mCallLogQueryHandler.fetchCalls(mCallTypeFilter, 0, mCallSubFilter); + fetchCalls(); } /** @@ -206,4 +215,57 @@ public class MSimCallLogFragment extends CallLogFragment { PreferenceManager.getDefaultSharedPreferences(this.getActivity()).edit() .putInt(PREFERENCE_KEY_CALLLOG_SUB, sub).commit(); } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + super.onCreateOptionsMenu(menu, inflater); + + inflater.inflate(R.menu.call_log_fragment_options, menu); + MenuItem resetItem = menu.findItem(R.id.reset_date_filter); + resetItem.setVisible(mFilterFrom != -1); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.date_filter: + final DoubleDatePickerDialog.Fragment fragment = + new DoubleDatePickerDialog.Fragment(); + fragment.setArguments(DoubleDatePickerDialog.Fragment.createArguments( + mFilterFrom, mFilterTo)); + fragment.show(getFragmentManager(), "filter"); + return true; + case R.id.reset_date_filter: + mFilterFrom = -1; + mFilterTo = -1; + fetchCalls(); + getActivity().invalidateOptionsMenu(); + return true; + } + return super.onOptionsItemSelected(item); + } + + @Override + public boolean onCallsFetched(Cursor cursor) { + boolean result = super.onCallsFetched(cursor); + + if (mDateFilterView != null) { + if (mFilterFrom == -1) { + mDateFilterView.setVisibility(View.GONE); + } else { + mDateFilterView.setText(DateUtils.formatDateRange(getActivity(), + mFilterFrom, mFilterTo, 0)); + mDateFilterView.setVisibility(View.VISIBLE); + } + } + return result; + } + + @Override + public void onDateSet(long from, long to) { + mFilterFrom = from; + mFilterTo = to; + getActivity().invalidateOptionsMenu(); + fetchCalls(); + } } |