summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlinus_lee <llee@cyngn.com>2015-01-02 15:38:41 -0800
committerLinus Lee <llee@cyngn.com>2015-01-06 01:22:20 +0000
commit5406f450138cd7e2f355fe6aed6f6df5dab737f1 (patch)
treeb2e3507ba041080d451b9dbbdfa9a10ac15684e0
parentb79e94e1f7299bfb12188ad1c1c18d466fd36b55 (diff)
downloadandroid_packages_apps_Dialer-5406f450138cd7e2f355fe6aed6f6df5dab737f1.tar.gz
android_packages_apps_Dialer-5406f450138cd7e2f355fe6aed6f6df5dab737f1.tar.bz2
android_packages_apps_Dialer-5406f450138cd7e2f355fe6aed6f6df5dab737f1.zip
Merge code and add CallStats in multi sim
The MultiSim call fragment merged the different fragments under a spinner and also allowed you to filter call type instead of using different fragments. I ripped out the old code and adapter the multisim fragment to handle both multi and single scenarios. Added the call stats and adapter it to handle both multi and single scenarios as well. Change-Id: I41389bbab302ff38bf0dac002c7ac8b10280fac2 (cherry picked from commit 066b90ea588e102042434fcdcb7222ad295ac3c0)
-rw-r--r--AndroidManifest.xml1
-rw-r--r--res/layout/call_spinner.xml20
-rw-r--r--res/layout/call_stats_filter_spinner.xml20
-rw-r--r--res/layout/call_stats_fragment.xml2
-rw-r--r--res/layout/msim_call_log_activity.xml37
-rw-r--r--res/layout/msim_call_log_fragment.xml22
-rw-r--r--res/menu/call_stats_options.xml5
-rw-r--r--res/values/cm_arrays.xml7
-rwxr-xr-xsrc/com/android/dialer/calllog/CallLogActivity.java230
-rwxr-xr-xsrc/com/android/dialer/calllog/MSimCallLogFragment.java133
-rw-r--r--src/com/android/dialer/calllog/SpinnerContent.java127
-rw-r--r--src/com/android/dialer/callstats/CallStatsAdapter.java3
-rw-r--r--src/com/android/dialer/callstats/CallStatsDetailHelper.java3
-rw-r--r--src/com/android/dialer/callstats/CallStatsFragment.java90
-rw-r--r--src/com/android/dialer/callstats/CallStatsQueryHandler.java18
15 files changed, 300 insertions, 418 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 0d4e4775e..2b1176254 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -145,6 +145,7 @@
<activity android:name="com.android.dialer.calllog.CallLogActivity"
android:label="@string/call_log_activity_title"
android:theme="@style/DialtactsThemeWithoutActionBarOverlay"
+ android:screenOrientation="nosensor"
android:icon="@mipmap/ic_launcher_phone">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
diff --git a/res/layout/call_spinner.xml b/res/layout/call_spinner.xml
new file mode 100644
index 000000000..2f8a95917
--- /dev/null
+++ b/res/layout/call_spinner.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:paddingLeft="@dimen/call_log_outer_margin"
+ android:paddingRight="@dimen/call_log_outer_margin">
+ <Spinner
+ android:id="@+id/filter_sub_spinner"
+ android:layout_width="0dip"
+ android:layout_height="@dimen/list_section_divider_min_height"
+ android:layout_weight="1"
+ android:layout_marginTop="5dip" />
+ <Spinner
+ android:id="@+id/filter_status_spinner"
+ android:layout_width="0dip"
+ android:layout_height="@dimen/list_section_divider_min_height"
+ android:layout_weight="2"
+ android:layout_marginTop="5dip" />
+</LinearLayout> \ No newline at end of file
diff --git a/res/layout/call_stats_filter_spinner.xml b/res/layout/call_stats_filter_spinner.xml
deleted file mode 100644
index b2054e7ad..000000000
--- a/res/layout/call_stats_filter_spinner.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2014 The CyanogenMod 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.
--->
-<Spinner xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- style="@style/DialtactsActionBarSpinner" />
diff --git a/res/layout/call_stats_fragment.xml b/res/layout/call_stats_fragment.xml
index 146e1f687..81ca0dc4d 100644
--- a/res/layout/call_stats_fragment.xml
+++ b/res/layout/call_stats_fragment.xml
@@ -24,6 +24,8 @@
android:showDividers="end"
android:background="@color/background_dialer_list_items" >
+ <include layout="@layout/call_spinner" />
+
<LinearLayout
android:id="@+id/call_stats_header"
android:layout_width="wrap_content"
diff --git a/res/layout/msim_call_log_activity.xml b/res/layout/msim_call_log_activity.xml
deleted file mode 100644
index 0315bc32c..000000000
--- a/res/layout/msim_call_log_activity.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of The Linux Foundation, Inc. nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:id="@+id/calllog_frame">
- <android.support.v4.view.ViewPager
- android:id="@+id/call_log_pager"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
-</FrameLayout>
diff --git a/res/layout/msim_call_log_fragment.xml b/res/layout/msim_call_log_fragment.xml
index e6d10b135..1a378d157 100644
--- a/res/layout/msim_call_log_fragment.xml
+++ b/res/layout/msim_call_log_fragment.xml
@@ -44,27 +44,7 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/>
</FrameLayout>
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:paddingLeft="@dimen/call_log_outer_margin"
- android:paddingRight="@dimen/call_log_outer_margin">
- <Spinner
- android:id="@+id/filter_sub_spinner"
- android:layout_width="0dip"
- android:layout_height="@dimen/list_section_divider_min_height"
- android:layout_weight="1"
- android:layout_marginTop="5dip"
- />
- <Spinner
- android:id="@+id/filter_status_spinner"
- android:layout_width="0dip"
- android:layout_height="@dimen/list_section_divider_min_height"
- android:layout_weight="2"
- android:layout_marginTop="5dip"
- />
- </LinearLayout>
+ <include layout="@layout/call_spinner" />
<FrameLayout
android:layout_width="match_parent"
diff --git a/res/menu/call_stats_options.xml b/res/menu/call_stats_options.xml
index 3c683750e..f4cdb93d8 100644
--- a/res/menu/call_stats_options.xml
+++ b/res/menu/call_stats_options.xml
@@ -16,11 +16,6 @@
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
- android:id="@+id/filter"
- android:showAsAction="always"
- android:actionLayout="@layout/call_stats_filter_spinner" />
-
- <item
android:id="@+id/date_filter"
android:showAsAction="never"
android:title="@string/call_stats_date_filter"/>
diff --git a/res/values/cm_arrays.xml b/res/values/cm_arrays.xml
index fbfe0a3ba..7f8d573eb 100644
--- a/res/values/cm_arrays.xml
+++ b/res/values/cm_arrays.xml
@@ -15,13 +15,6 @@
limitations under the License.
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string-array name="call_stats_nav_items" translatable="false">
- <item>@string/call_stats_nav_all</item>
- <item>@string/call_stats_nav_incoming</item>
- <item>@string/call_stats_nav_outgoing</item>
- <item>@string/call_stats_nav_missed</item>
- </string-array>
-
<!-- 0: sec
1: min
2: min sec
diff --git a/src/com/android/dialer/calllog/CallLogActivity.java b/src/com/android/dialer/calllog/CallLogActivity.java
index 10a77e10d..fe79ea6c0 100755
--- a/src/com/android/dialer/calllog/CallLogActivity.java
+++ b/src/com/android/dialer/calllog/CallLogActivity.java
@@ -22,12 +22,7 @@ import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Context;
import android.content.Intent;
-import android.database.Cursor;
import android.os.Bundle;
-import android.os.Handler;
-import android.provider.CallLog;
-import android.provider.CallLog.Calls;
-import android.telephony.TelephonyManager;
import android.support.v13.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.text.TextUtils;
@@ -41,80 +36,49 @@ import android.view.MotionEvent;
import android.widget.SearchView;
import android.widget.SearchView.OnCloseListener;
import android.widget.SearchView.OnQueryTextListener;
-import android.util.Log;
import com.android.contacts.common.interactions.TouchPointManager;
import com.android.contacts.common.list.ViewPagerTabs;
import com.android.dialer.DialtactsActivity;
import com.android.dialer.R;
-import com.android.dialer.voicemail.VoicemailStatusHelper;
-import com.android.dialer.voicemail.VoicemailStatusHelperImpl;
import com.android.dialerbind.analytics.AnalyticsActivity;
-import com.android.dialer.calllog.CallLogFragment;
import com.android.dialer.callstats.CallStatsFragment;
import com.android.dialer.widget.DoubleDatePickerDialog;
-public class CallLogActivity extends AnalyticsActivity implements CallLogQueryHandler.Listener,
+public class CallLogActivity extends AnalyticsActivity implements
DoubleDatePickerDialog.OnDateSetListener {
- private Handler mHandler;
private ViewPager mViewPager;
private ViewPagerTabs mViewPagerTabs;
private FragmentPagerAdapter mViewPagerAdapter;
- private CallLogFragment mAllCallsFragment;
- private CallLogFragment mMissedCallsFragment;
private CallStatsFragment mStatsFragment;
- private CallLogFragment mVoicemailFragment;
- private VoicemailStatusHelper mVoicemailStatusHelper;
-
- private static final int WAIT_FOR_VOICEMAIL_PROVIDER_TIMEOUT_MS = 300;
- private boolean mSwitchToVoicemailTab;
private MSimCallLogFragment mMSimCallsFragment;
private CallLogSearchFragment mSearchFragment;
private SearchView mSearchView;
private boolean mInSearchUi;
- private String[] mTabTitles;
-
- private static final int TAB_INDEX_ALL = 0;
- private static final int TAB_INDEX_MISSED = 1;
- private static final int TAB_INDEX_STATS = 2;
- private static final int TAB_INDEX_VOICEMAIL = 3;
-
- private static final int TAB_INDEX_COUNT_DEFAULT = 3;
- private static final int TAB_INDEX_COUNT_WITH_VOICEMAIL = 4;
-
- private boolean mHasActiveVoicemailProvider;
-
- private final Runnable mWaitForVoicemailTimeoutRunnable = new Runnable() {
- @Override
- public void run() {
- mViewPagerTabs.setViewPager(mViewPager);
- mViewPager.setCurrentItem(TAB_INDEX_ALL);
- mSwitchToVoicemailTab = false;
- }
- };
private static final int TAB_INDEX_MSIM = 0;
- private static final int TAB_INDEX_COUNT_MSIM = 1;
+ private static final int TAB_INDEX_MSIM_STATS = 1;
+ private static final int TAB_INDEX_COUNT_MSIM = 2;
- public class ViewPagerAdapter extends FragmentPagerAdapter {
- public ViewPagerAdapter(FragmentManager fm) {
+ public class MSimViewPagerAdapter extends FragmentPagerAdapter {
+ private String[] mTabTitles;
+
+ public MSimViewPagerAdapter(FragmentManager fm) {
super(fm);
+
+ mTabTitles = new String[TAB_INDEX_COUNT_MSIM];
+ mTabTitles[0] = getString(R.string.call_log_all_title);
+ mTabTitles[1] = getString(R.string.call_log_stats_title);
}
@Override
public Fragment getItem(int position) {
switch (position) {
- case TAB_INDEX_ALL:
- mAllCallsFragment = new CallLogFragment(CallLogQueryHandler.CALL_TYPE_ALL);
- return mAllCallsFragment;
- case TAB_INDEX_MISSED:
- mMissedCallsFragment = new CallLogFragment(Calls.MISSED_TYPE);
- return mMissedCallsFragment;
- case TAB_INDEX_VOICEMAIL:
- mVoicemailFragment = new CallLogFragment(Calls.VOICEMAIL_TYPE);
- return mVoicemailFragment;
- case TAB_INDEX_STATS:
+ case TAB_INDEX_MSIM:
+ mMSimCallsFragment = new MSimCallLogFragment();
+ return mMSimCallsFragment;
+ case TAB_INDEX_MSIM_STATS:
mStatsFragment = new CallStatsFragment();
return mStatsFragment;
}
@@ -128,28 +92,6 @@ public class CallLogActivity extends AnalyticsActivity implements CallLogQueryHa
@Override
public int getCount() {
- return mHasActiveVoicemailProvider ? TAB_INDEX_COUNT_WITH_VOICEMAIL :
- TAB_INDEX_COUNT_DEFAULT;
- }
- }
-
- public class MSimViewPagerAdapter extends FragmentPagerAdapter {
- public MSimViewPagerAdapter(FragmentManager fm) {
- super(fm);
- }
-
- @Override
- public Fragment getItem(int position) {
- switch (position) {
- case TAB_INDEX_MSIM:
- mMSimCallsFragment = new MSimCallLogFragment();
- return mMSimCallsFragment;
- }
- throw new IllegalStateException("No fragment at position " + position);
- }
-
- @Override
- public int getCount() {
return TAB_INDEX_COUNT_MSIM;
}
}
@@ -166,14 +108,6 @@ public class CallLogActivity extends AnalyticsActivity implements CallLogQueryHa
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- if (getTelephonyManager().isMultiSimEnabled()) {
- initMSimCallLog();
- addSearchFragment();
- return;
- }
-
- mHandler = new Handler();
-
setContentView(R.layout.call_log_activity);
getWindow().setBackgroundDrawable(null);
@@ -183,57 +117,15 @@ public class CallLogActivity extends AnalyticsActivity implements CallLogQueryHa
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setElevation(0);
- int startingTab = TAB_INDEX_ALL;
- final Intent intent = getIntent();
- if (intent != null) {
- final int callType = intent.getIntExtra(CallLog.Calls.EXTRA_CALL_TYPE_FILTER, -1);
- if (callType == CallLog.Calls.MISSED_TYPE) {
- startingTab = TAB_INDEX_MISSED;
- } else if (callType == CallLog.Calls.VOICEMAIL_TYPE) {
- startingTab = TAB_INDEX_VOICEMAIL;
- }
- }
-
- mTabTitles = new String[TAB_INDEX_COUNT_WITH_VOICEMAIL];
- mTabTitles[0] = getString(R.string.call_log_all_title);
- mTabTitles[1] = getString(R.string.call_log_missed_title);
- mTabTitles[2] = getString(R.string.call_log_stats_title);
- mTabTitles[3] = getString(R.string.call_log_voicemail_title);
-
mViewPager = (ViewPager) findViewById(R.id.call_log_pager);
- mViewPagerAdapter = new ViewPagerAdapter(getFragmentManager());
+ mViewPagerAdapter = new MSimViewPagerAdapter(getFragmentManager());
mViewPager.setAdapter(mViewPagerAdapter);
- mViewPager.setOffscreenPageLimit(2);
mViewPagerTabs = (ViewPagerTabs) findViewById(R.id.viewpager_header);
mViewPager.setOnPageChangeListener(mViewPagerTabs);
-
- if (startingTab == TAB_INDEX_VOICEMAIL) {
- // The addition of the voicemail tab is an asynchronous process, so wait till the tab
- // is added, before attempting to switch to it. If the querying of CP2 for voicemail
- // providers takes too long, give up and show the first tab instead.
- mSwitchToVoicemailTab = true;
- mHandler.postDelayed(mWaitForVoicemailTimeoutRunnable,
- WAIT_FOR_VOICEMAIL_PROVIDER_TIMEOUT_MS);
- } else {
- mViewPagerTabs.setViewPager(mViewPager);
- mViewPager.setCurrentItem(startingTab);
- }
+ mViewPagerTabs.setViewPager(mViewPager);
addSearchFragment();
- mVoicemailStatusHelper = new VoicemailStatusHelperImpl();
- }
-
- @Override
- protected void onResume() {
- super.onResume();
-
- if (getTelephonyManager().isMultiSimEnabled())
- return;
-
- CallLogQueryHandler callLogQueryHandler =
- new CallLogQueryHandler(this.getContentResolver(), this);
- callLogQueryHandler.fetchVoicemailStatus();
}
@Override
@@ -243,25 +135,6 @@ public class CallLogActivity extends AnalyticsActivity implements CallLogQueryHa
}
}
- private TelephonyManager getTelephonyManager() {
- return (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
- }
-
- private void initMSimCallLog() {
- setContentView(R.layout.msim_call_log_activity);
- getWindow().setBackgroundDrawable(null);
-
- final ActionBar actionBar = getActionBar();
- actionBar.setDisplayShowHomeEnabled(true);
- actionBar.setDisplayHomeAsUpEnabled(true);
- actionBar.setDisplayShowTitleEnabled(true);
-
- mViewPager = (ViewPager) findViewById(R.id.call_log_pager);
-
- mViewPagerAdapter = new MSimViewPagerAdapter(getFragmentManager());
- mViewPager.setAdapter(mViewPagerAdapter);
- }
-
@Override
public boolean onCreateOptionsMenu(Menu menu) {
final MenuInflater inflater = getMenuInflater();
@@ -286,16 +159,12 @@ public class CallLogActivity extends AnalyticsActivity implements CallLogQueryHa
itemSearchCallLog.setVisible(adapter != null
&& !adapter.isEmpty());
}
- // If onPrepareOptionsMenu is called before fragments loaded. Don't do anything.
- if (mAllCallsFragment != null && itemDeleteAll != null) {
- final CallLogAdapter adapter = mAllCallsFragment.getAdapter();
- itemDeleteAll.setVisible(adapter != null && !adapter.isEmpty());
- }
- if (mMSimCallsFragment != null && itemDeleteAll != null) {
- final CallLogAdapter adapter = mMSimCallsFragment.getAdapter();
- itemDeleteAll.setVisible(adapter != null && !adapter.isEmpty());
- }
+ // If onPrepareOptionsMenu is called before fragments loaded. Don't do anything.
+ if (mMSimCallsFragment != null && itemDeleteAll != null) {
+ final CallLogAdapter adapter = mMSimCallsFragment.getAdapter();
+ itemDeleteAll.setVisible(adapter != null && !adapter.isEmpty());
+ }
}
return true;
}
@@ -325,35 +194,6 @@ public class CallLogActivity extends AnalyticsActivity implements CallLogQueryHa
startActivity(intent);
}
- @Override
- public void onVoicemailStatusFetched(Cursor statusCursor) {
- if (this.isFinishing()) {
- return;
- }
-
- mHandler.removeCallbacks(mWaitForVoicemailTimeoutRunnable);
- // Update mHasActiveVoicemailProvider, which controls the number of tabs displayed.
- int activeSources = mVoicemailStatusHelper.getNumberActivityVoicemailSources(statusCursor);
- if (activeSources > 0 != mHasActiveVoicemailProvider) {
- mHasActiveVoicemailProvider = activeSources > 0;
- mViewPagerAdapter.notifyDataSetChanged();
- mViewPagerTabs.setViewPager(mViewPager);
- if (mSwitchToVoicemailTab) {
- mViewPager.setCurrentItem(TAB_INDEX_VOICEMAIL, false);
- }
- } else if (mSwitchToVoicemailTab) {
- // The voicemail tab was requested, but it does not exist because there are no
- // voicemail sources. Just fallback to the first item instead.
- mViewPagerTabs.setViewPager(mViewPager);
- }
- }
-
- @Override
- public boolean onCallsFetched(Cursor statusCursor) {
- // Return false; did not take ownership of cursor
- return false;
- }
-
private void enterSearchUi() {
if (mSearchFragment == null) {
return;
@@ -379,9 +219,8 @@ public class CallLogActivity extends AnalyticsActivity implements CallLogQueryHa
transaction.commitAllowingStateLoss();
getFragmentManager().executePendingTransactions();
mViewPager.setVisibility(View.GONE);
- if (!getTelephonyManager().isMultiSimEnabled()) {
- mViewPagerTabs.setVisibility(View.GONE);
- }
+ mViewPagerTabs.setVisibility(View.GONE);
+
// We need to call this and onActionViewCollapsed() manually, since we
// are using a custom
// layout instead of asking the search menu item to take care of
@@ -391,7 +230,7 @@ public class CallLogActivity extends AnalyticsActivity implements CallLogQueryHa
}
private void updateFragmentVisibility(int position, boolean visibility) {
- if (position >= TAB_INDEX_ALL) {
+ if (position >= TAB_INDEX_MSIM) {
final Fragment fragment = getFragmentAt(position);
if (fragment != null) {
fragment.setMenuVisibility(visibility);
@@ -402,17 +241,9 @@ public class CallLogActivity extends AnalyticsActivity implements CallLogQueryHa
private Fragment getFragmentAt(int position) {
switch (position) {
- case TAB_INDEX_ALL:
- if (getTelephonyManager().isMultiSimEnabled()) {
- return mMSimCallsFragment;
- } else {
- return mAllCallsFragment;
- }
- case TAB_INDEX_MISSED:
- return mMissedCallsFragment;
- case TAB_INDEX_VOICEMAIL:
- return mVoicemailFragment;
- case TAB_INDEX_STATS:
+ case TAB_INDEX_MSIM:
+ return mMSimCallsFragment;
+ case TAB_INDEX_MSIM_STATS:
return mStatsFragment;
default:
throw new IllegalStateException("Unknown fragment index: "
@@ -548,9 +379,8 @@ public class CallLogActivity extends AnalyticsActivity implements CallLogQueryHa
}
mViewPager.setVisibility(View.VISIBLE);
- if (!getTelephonyManager().isMultiSimEnabled()) {
- mViewPagerTabs.setVisibility(View.VISIBLE);
- }
+ mViewPagerTabs.setVisibility(View.VISIBLE);
+
hideInputMethod(getCurrentFocus());
// Request to update option menu.
diff --git a/src/com/android/dialer/calllog/MSimCallLogFragment.java b/src/com/android/dialer/calllog/MSimCallLogFragment.java
index 36fca8782..4f5c48deb 100755
--- a/src/com/android/dialer/calllog/MSimCallLogFragment.java
+++ b/src/com/android/dialer/calllog/MSimCallLogFragment.java
@@ -74,13 +74,6 @@ public class MSimCallLogFragment extends CallLogFragment {
// Default to all slots.
private int mCallSubFilter = CallLogQueryHandler.CALL_SUB_ALL;
- // The index for call type spinner.
- private static final int INDEX_CALL_TYPE_ALL = 0;
- private static final int INDEX_CALL_TYPE_INCOMING = 1;
- private static final int INDEX_CALL_TYPE_OUTGOING = 2;
- private static final int INDEX_CALL_TYPE_MISSED = 3;
- private static final int INDEX_CALL_TYPE_VOICEMAIL = 4;
-
private OnItemSelectedListener mSubSelectedListener = new OnItemSelectedListener() {
@Override
@@ -104,23 +97,7 @@ public class MSimCallLogFragment extends CallLogFragment {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Log.i(TAG, "Status selected, position: " + position);
- switch (position) {
- case INDEX_CALL_TYPE_ALL:
- mCallTypeFilter = CallLogQueryHandler.CALL_TYPE_ALL;
- break;
- case INDEX_CALL_TYPE_INCOMING:
- mCallTypeFilter = Calls.INCOMING_TYPE;
- break;
- case INDEX_CALL_TYPE_OUTGOING:
- mCallTypeFilter = Calls.OUTGOING_TYPE;
- break;
- case INDEX_CALL_TYPE_MISSED:
- mCallTypeFilter = Calls.MISSED_TYPE;
- break;
- case INDEX_CALL_TYPE_VOICEMAIL:
- mCallTypeFilter = Calls.VOICEMAIL_TYPE;
- break;
- }
+ mCallTypeFilter = ((SpinnerContent)parent.getItemAtPosition(position)).value;
mCallLogQueryHandler.fetchCalls(mCallTypeFilter, 0, mCallSubFilter);
}
@@ -182,72 +159,35 @@ public class MSimCallLogFragment extends CallLogFragment {
return;
}
- // Update the sub filter's content.
- mCallSubFilter = getSelectedSub();
- ArrayAdapter<SpinnerContent> filterSubAdapter = new ArrayAdapter<SpinnerContent>(
- this.getActivity(), R.layout.call_log_spinner_item, setupSubFilterContent());
- mFilterSubSpinnerView.setAdapter(filterSubAdapter);
- mFilterSubSpinnerView.setOnItemSelectedListener(mSubSelectedListener);
- SpinnerContent.setSpinnerContentValue(mFilterSubSpinnerView, mCallSubFilter);
+ final TelephonyManager telephony = (TelephonyManager) getActivity().getSystemService(
+ Context.TELEPHONY_SERVICE);
+ if (!telephony.isMultiSimEnabled()) {
+ mFilterSubSpinnerView.setVisibility(View.GONE);
+ } else {
+ // Update the sub filter's content.
+ ArrayAdapter<SpinnerContent> filterSubAdapter = new ArrayAdapter<SpinnerContent>(
+ this.getActivity(), R.layout.call_log_spinner_item,
+ SpinnerContent.setupSubFilterContent(getActivity()));
+
+ if (filterSubAdapter.getCount() <= 1) {
+ mFilterSubSpinnerView.setVisibility(View.GONE);
+ } else {
+ mCallSubFilter = getSelectedSub();
+ mFilterSubSpinnerView.setAdapter(filterSubAdapter);
+ mFilterSubSpinnerView.setOnItemSelectedListener(mSubSelectedListener);
+ SpinnerContent.setSpinnerContentValue(mFilterSubSpinnerView, mCallSubFilter);
+ }
+ }
// Update the status filter's content.
ArrayAdapter<SpinnerContent> filterStatusAdapter = new ArrayAdapter<SpinnerContent>(
- this.getActivity(), R.layout.call_log_spinner_item, setupStatusFilterContent());
+ this.getActivity(), R.layout.call_log_spinner_item,
+ SpinnerContent.setupStatusFilterContent(getActivity(), mVoicemailSourcesAvailable));
mFilterStatusSpinnerView.setAdapter(filterStatusAdapter);
mFilterStatusSpinnerView.setOnItemSelectedListener(mStatusSelectedListener);
SpinnerContent.setSpinnerContentValue(mFilterStatusSpinnerView, mCallTypeFilter);
}
- private SpinnerContent[] setupSubFilterContent() {
- TelephonyManager telephonyManager =
- (TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE);
- int count = telephonyManager.getPhoneCount();
- // Update the filter sub content.
- SpinnerContent filterSub[] = new SpinnerContent[count + 1];
- filterSub[0] = new SpinnerContent(CallLogQueryHandler.CALL_SUB_ALL,
- getString(R.string.call_log_show_all_slots));
- for (int i = 0; i < count; i++) {
- String subDisplayName = PhoneAccountUtils.getAccountLabel(getActivity(),
- MoreContactUtils.getAccount(i));
- filterSub[i + 1] = new SpinnerContent(i, subDisplayName);
- }
- return filterSub;
- }
-
- private SpinnerContent[] setupStatusFilterContent() {
- // Didn't show the voice mail item if not available.
- int statusCount = mVoicemailSourcesAvailable ? 5 : 4;
- SpinnerContent filterStatus[] = new SpinnerContent[statusCount];
- for (int i = 0; i < statusCount; i++) {
- int value = CallLogQueryHandler.CALL_TYPE_ALL;
- String label = null;
- switch (i) {
- case INDEX_CALL_TYPE_ALL:
- value = CallLogQueryHandler.CALL_TYPE_ALL;
- label = getString(R.string.call_log_all_calls_header);
- break;
- case INDEX_CALL_TYPE_INCOMING:
- value = Calls.INCOMING_TYPE;
- label = getString(R.string.call_log_incoming_header);
- break;
- case INDEX_CALL_TYPE_OUTGOING:
- value = Calls.OUTGOING_TYPE;
- label = getString(R.string.call_log_outgoing_header);
- break;
- case INDEX_CALL_TYPE_MISSED:
- value = Calls.MISSED_TYPE;
- label = getString(R.string.call_log_missed_header);
- break;
- case INDEX_CALL_TYPE_VOICEMAIL:
- value = Calls.VOICEMAIL_TYPE;
- label = getString(R.string.call_log_voicemail_header);
- break;
- }
- filterStatus[i] = new SpinnerContent(value, label);
- }
- return filterStatus;
- }
-
/**
* @return the saved selected subscription.
*/
@@ -266,33 +206,4 @@ public class MSimCallLogFragment extends CallLogFragment {
PreferenceManager.getDefaultSharedPreferences(this.getActivity()).edit()
.putInt(PREFERENCE_KEY_CALLLOG_SUB, sub).commit();
}
-
- /**
- * To save the spinner content.
- */
- private static class SpinnerContent {
- public final int value;
- public final String label;
-
- public static void setSpinnerContentValue(Spinner spinner, int value) {
- for (int i = 0, count = spinner.getCount(); i < count; i++) {
- SpinnerContent sc = (SpinnerContent) spinner.getItemAtPosition(i);
- if (sc.value == value) {
- spinner.setSelection(i, true);
- Log.i(TAG, "Set selection for spinner(" + sc + ") with the value: " + value);
- return;
- }
- }
- }
-
- public SpinnerContent(int value, String label) {
- this.value = value;
- this.label = label;
- }
-
- @Override
- public String toString() {
- return label;
- }
- }
}
diff --git a/src/com/android/dialer/calllog/SpinnerContent.java b/src/com/android/dialer/calllog/SpinnerContent.java
new file mode 100644
index 000000000..614b594db
--- /dev/null
+++ b/src/com/android/dialer/calllog/SpinnerContent.java
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2014 The CyanogenMod 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
+ */
+package com.android.dialer.calllog;
+
+import android.content.Context;
+import android.provider.CallLog;
+import android.telephony.TelephonyManager;
+import android.text.TextUtils;
+import android.util.Log;
+import android.widget.Spinner;
+
+import com.android.contacts.common.MoreContactUtils;
+import com.android.dialer.R;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * To save the spinner content.
+ */
+public class SpinnerContent {
+ private static String TAG = SpinnerContent.class.getSimpleName();
+
+ public final int value;
+ public final String label;
+
+ // The index for call type spinner.
+ private static final int INDEX_CALL_TYPE_ALL = 0;
+ private static final int INDEX_CALL_TYPE_INCOMING = 1;
+ private static final int INDEX_CALL_TYPE_OUTGOING = 2;
+ private static final int INDEX_CALL_TYPE_MISSED = 3;
+ private static final int INDEX_CALL_TYPE_VOICEMAIL = 4;
+
+ public static void setSpinnerContentValue(Spinner spinner, int value) {
+ for (int i = 0, count = spinner.getCount(); i < count; i++) {
+ SpinnerContent sc = (SpinnerContent) spinner.getItemAtPosition(i);
+ if (sc.value == value) {
+ spinner.setSelection(i, true);
+ Log.i(TAG, "Set selection for spinner(" + sc + ") with the value: " + value);
+ return;
+ }
+ }
+ }
+
+ public SpinnerContent(int value, String label) {
+ this.value = value;
+ this.label = label;
+ }
+
+ @Override
+ public String toString() {
+ return label;
+ }
+
+ /**
+ * @return the spinner contents for the different sims (all, sim0, sim1 etc)
+ */
+ public static List<SpinnerContent> setupSubFilterContent(Context context) {
+ TelephonyManager telephonyManager =
+ (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
+ int count = telephonyManager.getPhoneCount();
+ // Update the filter sub content.
+ ArrayList<SpinnerContent> values = new ArrayList<SpinnerContent>(count + 1);
+ values.add(new SpinnerContent(CallLogQueryHandler.CALL_SUB_ALL,
+ context.getString(R.string.call_log_show_all_slots)));
+ for (int i = 0; i < count; i++) {
+ String subDisplayName = PhoneAccountUtils.getAccountLabel(context,
+ MoreContactUtils.getAccount(i));
+ if (!TextUtils.isEmpty(subDisplayName)) {
+ values.add(new SpinnerContent(i, subDisplayName));
+ }
+ }
+ return values;
+ }
+
+ /**
+ * @param voicemailAvailable true if voicemail should be included in the return values
+ * @return the spinner contents for the different call types (incoming, outgoing etc)
+ */
+ public static List<SpinnerContent> setupStatusFilterContent(Context context,
+ boolean voicemailAvailable) {
+ // Didn't show the voice mail item if not available.
+ int statusCount = voicemailAvailable ? 5 : 4;
+ ArrayList<SpinnerContent> values = new ArrayList<SpinnerContent>(statusCount);
+ for (int i = 0; i < statusCount; i++) {
+ int value = CallLogQueryHandler.CALL_TYPE_ALL;
+ String label = null;
+ switch (i) {
+ case INDEX_CALL_TYPE_ALL:
+ value = CallLogQueryHandler.CALL_TYPE_ALL;
+ label = context.getString(R.string.call_log_all_calls_header);
+ break;
+ case INDEX_CALL_TYPE_INCOMING:
+ value = CallLog.Calls.INCOMING_TYPE;
+ label = context.getString(R.string.call_log_incoming_header);
+ break;
+ case INDEX_CALL_TYPE_OUTGOING:
+ value = CallLog.Calls.OUTGOING_TYPE;
+ label = context.getString(R.string.call_log_outgoing_header);
+ break;
+ case INDEX_CALL_TYPE_MISSED:
+ value = CallLog.Calls.MISSED_TYPE;
+ label = context.getString(R.string.call_log_missed_header);
+ break;
+ case INDEX_CALL_TYPE_VOICEMAIL:
+ value = CallLog.Calls.VOICEMAIL_TYPE;
+ label = context.getString(R.string.call_log_voicemail_header);
+ break;
+ }
+ values.add(new SpinnerContent(value, label));
+ }
+ return values;
+ }
+}
diff --git a/src/com/android/dialer/callstats/CallStatsAdapter.java b/src/com/android/dialer/callstats/CallStatsAdapter.java
index de9a71379..7cf35ef19 100644
--- a/src/com/android/dialer/callstats/CallStatsAdapter.java
+++ b/src/com/android/dialer/callstats/CallStatsAdapter.java
@@ -32,6 +32,7 @@ import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
import com.android.contacts.common.GeoUtil;
import com.android.dialer.R;
import com.android.dialer.calllog.CallLogAdapterHelper;
+import com.android.dialer.calllog.CallLogQueryHandler;
import com.android.dialer.calllog.ContactInfo;
import com.android.dialer.calllog.ContactInfoHelper;
import com.android.dialer.calllog.PhoneNumberDisplayHelper;
@@ -72,7 +73,7 @@ class CallStatsAdapter extends ArrayAdapter<CallStatsDetails>
private CallStatsDetails mTotalItem;
private Map<ContactInfo, CallStatsDetails> mInfoLookup;
- private int mType = CallStatsQueryHandler.CALL_TYPE_ALL;
+ private int mType = CallLogQueryHandler.CALL_TYPE_ALL;
private long mFilterFrom;
private long mFilterTo;
private boolean mSortByDuration;
diff --git a/src/com/android/dialer/callstats/CallStatsDetailHelper.java b/src/com/android/dialer/callstats/CallStatsDetailHelper.java
index c636451e6..b6acc92c9 100644
--- a/src/com/android/dialer/callstats/CallStatsDetailHelper.java
+++ b/src/com/android/dialer/callstats/CallStatsDetailHelper.java
@@ -26,6 +26,7 @@ import android.view.View;
import android.widget.TextView;
import com.android.dialer.R;
+import com.android.dialer.calllog.CallLogQueryHandler;
import com.android.dialer.calllog.PhoneNumberDisplayHelper;
import com.android.dialer.calllog.PhoneNumberUtilsWrapper;
@@ -81,7 +82,7 @@ public class CallStatsDetailHelper {
float ratio = getDetailValue(details, type, byDuration) /
getDetailValue(first, type, byDuration);
- if (type == CallStatsQueryHandler.CALL_TYPE_ALL) {
+ if (type == CallLogQueryHandler.CALL_TYPE_ALL) {
float full = getDetailValue(details, type, byDuration);
in = getDetailValue(details, Calls.INCOMING_TYPE, byDuration) * ratio / full;
out = getDetailValue(details, Calls.OUTGOING_TYPE, byDuration) * ratio / full;
diff --git a/src/com/android/dialer/callstats/CallStatsFragment.java b/src/com/android/dialer/callstats/CallStatsFragment.java
index c67e746ba..a1f87be9f 100644
--- a/src/com/android/dialer/callstats/CallStatsFragment.java
+++ b/src/com/android/dialer/callstats/CallStatsFragment.java
@@ -25,7 +25,9 @@ import android.os.Bundle;
import android.os.Handler;
import android.provider.CallLog;
import android.provider.ContactsContract;
+import android.telephony.TelephonyManager;
import android.text.format.DateUtils;
+import android.util.Log;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.Menu;
@@ -34,12 +36,15 @@ import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import com.android.dialer.R;
+import com.android.dialer.calllog.CallLogQueryHandler;
import com.android.dialer.calllog.ContactInfo;
+import com.android.dialer.calllog.SpinnerContent;
import com.android.dialer.widget.DoubleDatePickerDialog;
import java.util.List;
@@ -50,9 +55,7 @@ public class CallStatsFragment extends ListFragment implements
AdapterView.OnItemSelectedListener, DoubleDatePickerDialog.OnDateSetListener {
private static final String TAG = "CallStatsFragment";
- private Spinner mFilterSpinner;
-
- private int mCallTypeFilter = CallStatsQueryHandler.CALL_TYPE_ALL;
+ private int mCallTypeFilter = CallLogQueryHandler.CALL_TYPE_ALL;
private long mFilterFrom = -1;
private long mFilterTo = -1;
private boolean mSortByDuration = true;
@@ -61,6 +64,13 @@ public class CallStatsFragment extends ListFragment implements
private CallStatsAdapter mAdapter;
private CallStatsQueryHandler mCallStatsQueryHandler;
+ // Add and change for filter call stats.
+ private Spinner mFilterSubSpinnerView;
+ private Spinner mFilterStatusSpinnerView;
+
+ // Default to all slots.
+ private int mCallSubFilter = CallStatsQueryHandler.CALL_SUB_ALL;
+
private TextView mSumHeaderView;
private TextView mDateFilterView;
@@ -72,6 +82,23 @@ public class CallStatsFragment extends ListFragment implements
}
};
+ private OnItemSelectedListener mSubSelectedListener = new OnItemSelectedListener() {
+
+ @Override
+ public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+ Log.i(TAG, "Sub selected, position: " + position);
+ int sub = position - 1;
+ mCallSubFilter = sub;
+ mCallStatsQueryHandler.fetchCalls(mFilterFrom, mFilterTo, mCallSubFilter);
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView<?> parent) {
+ // Do nothing.
+ }
+
+ };
+
public static class CallStatsNavAdapter extends ArrayAdapter<String> {
private LayoutInflater mMainInflater;
private LayoutInflater mDropdownInflater;
@@ -123,9 +150,54 @@ public class CallStatsFragment extends ListFragment implements
View view = inflater.inflate(R.layout.call_stats_fragment, container, false);
mSumHeaderView = (TextView) view.findViewById(R.id.sum_header);
mDateFilterView = (TextView) view.findViewById(R.id.date_filter);
+ mFilterSubSpinnerView = (Spinner) view.findViewById(R.id.filter_sub_spinner);
+ mFilterStatusSpinnerView = (Spinner) view.findViewById(R.id.filter_status_spinner);
+
+ // Update the filter views.
+ updateFilterSpinnerViews();
+
return view;
}
+ /**
+ * Initialize the filter views content.
+ */
+ private void updateFilterSpinnerViews() {
+ if (mFilterSubSpinnerView == null
+ || mFilterStatusSpinnerView == null) {
+ Log.w(TAG, "The filter spinner view is null!");
+ return;
+ }
+
+ final TelephonyManager telephony = (TelephonyManager) getActivity().getSystemService(
+ Context.TELEPHONY_SERVICE);
+ if (!telephony.isMultiSimEnabled()) {
+ mFilterSubSpinnerView.setVisibility(View.GONE);
+ } else {
+ // Update the sub filter's content.
+ ArrayAdapter<SpinnerContent> filterSubAdapter = new ArrayAdapter<SpinnerContent>(
+ this.getActivity(), R.layout.call_log_spinner_item,
+ SpinnerContent.setupSubFilterContent(getActivity()));
+
+ if (filterSubAdapter.getCount() <= 1) {
+ mFilterSubSpinnerView.setVisibility(View.GONE);
+ } else {
+ mFilterSubSpinnerView.setAdapter(filterSubAdapter);
+ mFilterSubSpinnerView.setOnItemSelectedListener(mSubSelectedListener);
+ SpinnerContent.setSpinnerContentValue(mFilterSubSpinnerView, mCallSubFilter);
+ }
+ }
+
+
+ // Update the status filter's content.
+ ArrayAdapter<SpinnerContent> filterStatusAdapter = new ArrayAdapter<SpinnerContent>(
+ this.getActivity(), R.layout.call_log_spinner_item,
+ SpinnerContent.setupStatusFilterContent(getActivity(), false));
+ mFilterStatusSpinnerView.setAdapter(filterStatusAdapter);
+ mFilterStatusSpinnerView.setOnItemSelectedListener(this);
+ SpinnerContent.setSpinnerContentValue(mFilterStatusSpinnerView, mCallTypeFilter);
+ }
+
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
@@ -142,19 +214,11 @@ public class CallStatsFragment extends ListFragment implements
final MenuItem resetItem = menu.findItem(R.id.reset_date_filter);
final MenuItem sortDurationItem = menu.findItem(R.id.sort_by_duration);
final MenuItem sortCountItem = menu.findItem(R.id.sort_by_count);
- final MenuItem filterItem = menu.findItem(R.id.filter);
resetItem.setVisible(mFilterFrom != -1);
sortDurationItem.setVisible(!mSortByDuration);
sortCountItem.setVisible(mSortByDuration);
- mFilterSpinner = (Spinner) filterItem.getActionView();
- CallStatsNavAdapter filterAdapter = new CallStatsNavAdapter(getActivity(),
- android.R.layout.simple_list_item_1,
- getResources().getStringArray(R.array.call_stats_nav_items));
- mFilterSpinner.setAdapter(filterAdapter);
- mFilterSpinner.setOnItemSelectedListener(this);
-
super.onCreateOptionsMenu(menu, inflater);
}
@@ -190,7 +254,7 @@ public class CallStatsFragment extends ListFragment implements
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
- mCallTypeFilter = pos;
+ mCallTypeFilter = ((SpinnerContent)parent.getItemAtPosition(pos)).value;
mAdapter.updateDisplayedData(mCallTypeFilter, mSortByDuration);
if (mDataLoaded) {
updateHeader();
@@ -251,7 +315,7 @@ public class CallStatsFragment extends ListFragment implements
}
private void fetchCalls() {
- mCallStatsQueryHandler.fetchCalls(mFilterFrom, mFilterTo);
+ mCallStatsQueryHandler.fetchCalls(mFilterFrom, mFilterTo, mCallSubFilter);
}
private void updateHeader() {
diff --git a/src/com/android/dialer/callstats/CallStatsQueryHandler.java b/src/com/android/dialer/callstats/CallStatsQueryHandler.java
index f3590554e..9cc02874d 100644
--- a/src/com/android/dialer/callstats/CallStatsQueryHandler.java
+++ b/src/com/android/dialer/callstats/CallStatsQueryHandler.java
@@ -28,6 +28,7 @@ import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.provider.CallLog.Calls;
+import android.telephony.SubscriptionManager;
import android.util.Log;
import com.android.contacts.common.CallUtil;
@@ -51,7 +52,10 @@ public class CallStatsQueryHandler extends AsyncQueryHandler {
private static final int QUERY_CALLS_TOKEN = 100;
- public static final int CALL_TYPE_ALL = 0;
+ /**
+ * To specify all slots.
+ */
+ public static final int CALL_SUB_ALL = -1;
private static final String TAG = "CallStatsQueryHandler";
@@ -103,7 +107,7 @@ public class CallStatsQueryHandler extends AsyncQueryHandler {
mListener = new WeakReference<Listener>(listener);
}
- public void fetchCalls(long from, long to) {
+ public void fetchCalls(long from, long to, int slotId) {
cancelOperation(QUERY_CALLS_TOKEN);
StringBuilder selection = new StringBuilder();
@@ -120,6 +124,16 @@ public class CallStatsQueryHandler extends AsyncQueryHandler {
selection.append(String.format("(%s < ?)", Calls.DATE));
selectionArgs.add(String.valueOf(to));
}
+ if (slotId > CALL_SUB_ALL) {
+ long[] subId = SubscriptionManager.getSubId(slotId);
+ if (subId != null && subId.length >= 1) {
+ if (selection.length() > 0) {
+ selection.append(" AND ");
+ }
+ selection.append(String.format("(%s = ?)", Calls.PHONE_ACCOUNT_ID));
+ selectionArgs.add(Long.toString(subId[0]));
+ }
+ }
startQuery(QUERY_CALLS_TOKEN, null, Calls.CONTENT_URI, CallStatsQuery._PROJECTION,
selection.toString(), selectionArgs.toArray(EMPTY_STRING_ARRAY),