diff options
author | emancebo <emancebo@cyngn.com> | 2015-01-14 13:22:15 -0800 |
---|---|---|
committer | emancebo <emancebo@cyngn.com> | 2015-01-14 13:22:56 -0800 |
commit | ba26c2b1b8b4d1254b9b12194494c754b6ec1dad (patch) | |
tree | 2444929950cce06b7411545d3327ed99617f5886 | |
parent | fbb4f137224cafe22b16170e475bb2c360db5ed2 (diff) | |
download | android_packages_apps_Dialer-ba26c2b1b8b4d1254b9b12194494c754b6ec1dad.tar.gz android_packages_apps_Dialer-ba26c2b1b8b4d1254b9b12194494c754b6ec1dad.tar.bz2 android_packages_apps_Dialer-ba26c2b1b8b4d1254b9b12194494c754b6ec1dad.zip |
Port "filter by date range" from call stats page to call log
Change-Id: I78b73c8e59a53143b98f8889dc0085af02364d4c
-rw-r--r-- | res/layout/msim_call_log_fragment.xml | 10 | ||||
-rw-r--r-- | res/menu/call_log_fragment_options.xml | 28 | ||||
-rwxr-xr-x | src/com/android/dialer/calllog/CallLogActivity.java | 10 | ||||
-rw-r--r-- | src/com/android/dialer/calllog/CallLogFragment.java | 15 | ||||
-rwxr-xr-x | src/com/android/dialer/calllog/CallLogQueryHandler.java | 23 | ||||
-rwxr-xr-x | src/com/android/dialer/calllog/MSimCallLogFragment.java | 72 |
6 files changed, 141 insertions, 17 deletions
diff --git a/res/layout/msim_call_log_fragment.xml b/res/layout/msim_call_log_fragment.xml index 1a378d157..76b38acb1 100644 --- a/res/layout/msim_call_log_fragment.xml +++ b/res/layout/msim_call_log_fragment.xml @@ -46,6 +46,16 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. <include layout="@layout/call_spinner" /> + <TextView + android:id="@+id/date_filter" + style="@style/ContactListSeparatorTextViewStyle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginStart="@dimen/call_log_outer_margin" + android:layout_marginEnd="@dimen/call_log_outer_margin" + android:background="@null" + android:visibility="gone" /> + <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> diff --git a/res/menu/call_log_fragment_options.xml b/res/menu/call_log_fragment_options.xml new file mode 100644 index 000000000..2582f59e9 --- /dev/null +++ b/res/menu/call_log_fragment_options.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2015 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<menu xmlns:android="http://schemas.android.com/apk/res/android" > + <item + android:id="@+id/date_filter" + android:showAsAction="never" + android:title="@string/call_stats_date_filter"/> + + <item + android:id="@+id/reset_date_filter" + android:showAsAction="never" + android:visible="false" + android:title="@string/call_stats_reset_filter"/> +</menu> 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(); + } } |