summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanny Baumann <dannybaumann@web.de>2014-09-26 14:50:52 +0200
committerDanny Baumann <dannybaumann@web.de>2014-09-26 14:52:19 +0200
commit12b1521b7c070256727eaceed21a3ed527c1cfc7 (patch)
tree990f53bc2f2c005a9b38d37615650d4f34571216
parent169277774eab6fc6273c97661c0ba8cb792608fd (diff)
downloadandroid_packages_apps_Dialer-12b1521b7c070256727eaceed21a3ed527c1cfc7.tar.gz
android_packages_apps_Dialer-12b1521b7c070256727eaceed21a3ed527c1cfc7.tar.bz2
android_packages_apps_Dialer-12b1521b7c070256727eaceed21a3ed527c1cfc7.zip
Fix up screen rotation behaviour of call log activity.
Make sure the search fragment is hidden if not needed, and save instance state of activity and fragments. Change-Id: I9dc6e6b7cc2403abf1ad4afbe0aa8d3f4c96f05c
-rwxr-xr-xsrc/com/android/dialer/calllog/CallLogActivity.java56
-rw-r--r--src/com/android/dialer/calllog/CallLogFragment.java21
-rwxr-xr-xsrc/com/android/dialer/calllog/CallLogSearchFragment.java31
-rw-r--r--src/com/android/dialer/callstats/CallStatsFragment.java26
4 files changed, 98 insertions, 36 deletions
diff --git a/src/com/android/dialer/calllog/CallLogActivity.java b/src/com/android/dialer/calllog/CallLogActivity.java
index e1a5c64d6..1023c44d8 100755
--- a/src/com/android/dialer/calllog/CallLogActivity.java
+++ b/src/com/android/dialer/calllog/CallLogActivity.java
@@ -42,6 +42,7 @@ import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnFocusChangeListener;
+import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.view.Menu;
import android.view.MenuInflater;
@@ -82,6 +83,9 @@ public class CallLogActivity extends Activity implements
private static final int TAB_INDEX_COUNT = 3;
+ private static final String STATE_KEY_SEARCH = "calllog:search";
+ private static final String STATE_KEY_QUERY = "calllog:query";
+
public class ViewPagerAdapter extends FragmentPagerAdapter {
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
@@ -91,11 +95,9 @@ public class CallLogActivity extends Activity implements
public Fragment getItem(int position) {
switch (position) {
case TAB_INDEX_ALL:
- mAllCallsFragment = new CallLogFragment(CallLogQueryHandler.CALL_TYPE_ALL);
- return mAllCallsFragment;
+ return CallLogFragment.newInstance(CallLogQueryHandler.CALL_TYPE_ALL);
case TAB_INDEX_MISSED:
- mMissedCallsFragment = new CallLogFragment(Calls.MISSED_TYPE);
- return mMissedCallsFragment;
+ return CallLogFragment.newInstance(Calls.MISSED_TYPE);
case TAB_INDEX_STATS:
mStatsFragment = new CallStatsFragment();
return mStatsFragment;
@@ -104,6 +106,22 @@ public class CallLogActivity extends Activity implements
}
@Override
+ public Object instantiateItem(ViewGroup container, int position) {
+ // We can't distinguish the two fragments in onAttach, which is
+ // why we differentiate between them here
+ Object result = super.instantiateItem(container, position);
+ switch (position) {
+ case TAB_INDEX_ALL:
+ mAllCallsFragment = (CallLogFragment) result;
+ break;
+ case TAB_INDEX_MISSED:
+ mMissedCallsFragment = (CallLogFragment) result;
+ break;
+ }
+ return result;
+ }
+
+ @Override
public int getCount() {
return TAB_INDEX_COUNT;
}
@@ -169,7 +187,7 @@ public class CallLogActivity extends Activity implements
super.onCreate(savedInstanceState);
if (MSimTelephonyManager.getDefault().isMultiSimEnabled()) {
initMSimCallLog();
- addSearchFragment();
+ initSearchFragment();
return;
}
@@ -208,7 +226,20 @@ public class CallLogActivity extends Activity implements
mViewPager.setOnPageChangeListener(mOnPageChangeListener);
mViewPager.setOffscreenPageLimit(2);
- addSearchFragment();
+ initSearchFragment();
+ if (savedInstanceState != null && savedInstanceState.getBoolean(STATE_KEY_SEARCH, false)) {
+ enterSearchUi();
+ mSearchView.setQuery(savedInstanceState.getString(STATE_KEY_QUERY), false);
+ }
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle state) {
+ super.onSaveInstanceState(state);
+ state.putBoolean(STATE_KEY_SEARCH, mInSearchUi);
+ if (mInSearchUi) {
+ state.putString(STATE_KEY_QUERY, mSearchFragment.getQueryString());
+ }
}
@Override
@@ -217,6 +248,8 @@ public class CallLogActivity extends Activity implements
mSearchFragment = (CallLogSearchFragment) fragment;
} else if (fragment instanceof MSimCallLogFragment) {
mMSimCallsFragment = (MSimCallLogFragment) fragment;
+ } else if (fragment instanceof CallStatsFragment) {
+ mStatsFragment = (CallStatsFragment) fragment;
}
}
@@ -366,14 +399,19 @@ public class CallLogActivity extends Activity implements
}
}
- private void addSearchFragment() {
+ private void initSearchFragment() {
+ final FragmentManager fm = getFragmentManager();
+ if (mSearchFragment == null) {
+ mSearchFragment = (CallLogSearchFragment) fm.findFragmentByTag("search");
+ }
if (mSearchFragment != null) {
+ fm.beginTransaction().hide(mSearchFragment).commit();
return;
}
- final FragmentTransaction ft = getFragmentManager().beginTransaction();
+ final FragmentTransaction ft = fm.beginTransaction();
final Fragment searchFragment = new CallLogSearchFragment();
searchFragment.setUserVisibleHint(false);
- ft.add(R.id.calllog_frame, searchFragment);
+ ft.add(R.id.calllog_frame, searchFragment, "search");
ft.hide(searchFragment);
ft.commitAllowingStateLoss();
}
diff --git a/src/com/android/dialer/calllog/CallLogFragment.java b/src/com/android/dialer/calllog/CallLogFragment.java
index 3cdfb464b..dc3dfd434 100644
--- a/src/com/android/dialer/calllog/CallLogFragment.java
+++ b/src/com/android/dialer/calllog/CallLogFragment.java
@@ -140,24 +140,25 @@ public class CallLogFragment extends ListFragment
// will be used.
private int mLogLimit = -1;
- public CallLogFragment() {
- this(CallLogQueryHandler.CALL_TYPE_ALL, -1);
- }
-
- public CallLogFragment(int filterType) {
- this(filterType, -1);
+ public static CallLogFragment newInstance(int filterType) {
+ CallLogFragment f = new CallLogFragment();
+ Bundle args = new Bundle();
+ args.putInt("filter", filterType);
+ f.setArguments(args);
+ return f;
}
- public CallLogFragment(int filterType, int logLimit) {
- super();
- mCallTypeFilter = filterType;
- mLogLimit = logLimit;
+ public CallLogFragment() {
}
@Override
public void onCreate(Bundle state) {
super.onCreate(state);
+ Bundle args = getArguments();
+ mCallTypeFilter = args != null ? args.getInt("filter", -1) : -1;
+ mLogLimit = args != null ? args.getInt("limit", -1) : -1;
+
mCallLogQueryHandler = new CallLogQueryHandler(getActivity().getContentResolver(),
this, mLogLimit);
mKeyguardManager =
diff --git a/src/com/android/dialer/calllog/CallLogSearchFragment.java b/src/com/android/dialer/calllog/CallLogSearchFragment.java
index 1f04539e7..674a99ec1 100755
--- a/src/com/android/dialer/calllog/CallLogSearchFragment.java
+++ b/src/com/android/dialer/calllog/CallLogSearchFragment.java
@@ -47,13 +47,9 @@ import com.android.dialerbind.ObjectFactory;
public class CallLogSearchFragment extends CallLogFragment {
-
private String mQueryString;
- private void updateCallList(int filterType) {
- mCallLogQueryHandler.fetchCalls(CallLogQueryHandler.CALL_TYPE_ALL);
- }
-
+ @Override
public void fetchCalls() {
if (TextUtils.isEmpty(mQueryString)) {
mCallLogQueryHandler.fetchCalls(CallLogQueryHandler.CALL_TYPE_ALL);
@@ -62,29 +58,30 @@ public class CallLogSearchFragment extends CallLogFragment {
}
}
+ @Override
public void startCallsQuery() {
mAdapter.setLoading(true);
- if (TextUtils.isEmpty(mQueryString)) {
- mCallLogQueryHandler.fetchCalls(CallLogQueryHandler.CALL_TYPE_ALL);
- } else {
- mCallLogQueryHandler.fetchCalls(mQueryString);
- }
+ fetchCalls();
+ }
+
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ mAdapter.setQueryString(mQueryString);
+ startCallsQuery();
}
public void setQueryString(String queryString) {
if (!TextUtils.equals(mQueryString, queryString)) {
mQueryString = queryString;
if (mAdapter != null) {
- mAdapter.setLoading(true);
mAdapter.setQueryString(mQueryString);
- if (TextUtils.isEmpty(queryString)) {
- mCallLogQueryHandler
- .fetchCalls(CallLogQueryHandler.CALL_TYPE_ALL);
- } else {
- mCallLogQueryHandler.fetchCalls(queryString);
- }
+ startCallsQuery();
}
}
}
+ public String getQueryString() {
+ return mQueryString;
+ }
}
diff --git a/src/com/android/dialer/callstats/CallStatsFragment.java b/src/com/android/dialer/callstats/CallStatsFragment.java
index fb1e075a9..0b0ad4664 100644
--- a/src/com/android/dialer/callstats/CallStatsFragment.java
+++ b/src/com/android/dialer/callstats/CallStatsFragment.java
@@ -62,6 +62,11 @@ public class CallStatsFragment extends ListFragment implements
AdapterView.OnItemSelectedListener, DoubleDatePickerDialog.OnDateSetListener {
private static final String TAG = "CallStatsFragment";
+ private static final String STATE_KEY_FILTER = "callstats:filter";
+ private static final String STATE_KEY_FROM = "callstats:from";
+ private static final String STATE_KEY_TO = "callstats:to";
+ private static final String STATE_KEY_SORT_DURATION = "callstats:sort_by_duration";
+
private static final int[] CALL_DIRECTION_RESOURCES = new int[] {
R.drawable.ic_call_inout_holo_dark,
R.drawable.ic_call_incoming_holo_dark,
@@ -157,6 +162,17 @@ public class CallStatsFragment extends ListFragment implements
}
@Override
+ public void onViewStateRestored(Bundle savedInstanceState) {
+ super.onViewStateRestored(savedInstanceState);
+ if (savedInstanceState != null) {
+ mCallTypeFilter = savedInstanceState.getInt(STATE_KEY_FILTER);
+ mFilterFrom = savedInstanceState.getLong(STATE_KEY_FROM);
+ mFilterTo = savedInstanceState.getLong(STATE_KEY_TO);
+ mSortByDuration = savedInstanceState.getBoolean(STATE_KEY_SORT_DURATION);
+ }
+ }
+
+ @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.call_stats_options, menu);
@@ -174,12 +190,22 @@ public class CallStatsFragment extends ListFragment implements
android.R.layout.simple_list_item_1,
getResources().getStringArray(R.array.call_stats_nav_items));
mFilterSpinner.setAdapter(filterAdapter);
+ mFilterSpinner.setSelection(mCallTypeFilter);
mFilterSpinner.setOnItemSelectedListener(this);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
+ public void onSaveInstanceState(Bundle state) {
+ super.onSaveInstanceState(state);
+ state.putInt(STATE_KEY_FILTER, mCallTypeFilter);
+ state.putLong(STATE_KEY_FROM, mFilterFrom);
+ state.putLong(STATE_KEY_TO, mFilterTo);
+ state.putBoolean(STATE_KEY_SORT_DURATION, mSortByDuration);
+ }
+
+ @Override
public boolean onOptionsItemSelected(MenuItem item) {
final int itemId = item.getItemId();
switch (itemId) {