summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoremancebo <emancebo@cyngn.com>2015-01-14 13:22:15 -0800
committeremancebo <emancebo@cyngn.com>2015-01-14 13:22:56 -0800
commitba26c2b1b8b4d1254b9b12194494c754b6ec1dad (patch)
tree2444929950cce06b7411545d3327ed99617f5886
parentfbb4f137224cafe22b16170e475bb2c360db5ed2 (diff)
downloadandroid_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.xml10
-rw-r--r--res/menu/call_log_fragment_options.xml28
-rwxr-xr-xsrc/com/android/dialer/calllog/CallLogActivity.java10
-rw-r--r--src/com/android/dialer/calllog/CallLogFragment.java15
-rwxr-xr-xsrc/com/android/dialer/calllog/CallLogQueryHandler.java23
-rwxr-xr-xsrc/com/android/dialer/calllog/MSimCallLogFragment.java72
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();
+ }
}