Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1f6cc5bf authored by Danny Baumann's avatar Danny Baumann
Browse files

Fix crash of date selector.

How to reproduce:
- Open date filter
- Turn off screen
- Turn on screen
- Reopen date filter

Also move around code a bit to follow existing design patterns more
closely.

Change-Id: Ibd46a09db6c5fb4623a1ef8062af971aee0e1a60
parent f4425bc9
Loading
Loading
Loading
Loading
+15 −40
Original line number Diff line number Diff line
@@ -19,8 +19,6 @@ package com.android.contacts.callstats;

import android.app.ActionBar;
import android.app.ListActivity;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
@@ -58,7 +56,8 @@ import java.util.ArrayList;
import java.util.List;

public class CallStatsActivity extends ListActivity implements
        CallStatsQueryHandler.Listener, ActionBar.OnNavigationListener {
        CallStatsQueryHandler.Listener, ActionBar.OnNavigationListener,
        DoubleDatePickerDialog.OnDateSetListener {
    private static final String TAG = "CallStatsActivity";

    private static final int[] CALL_DIRECTION_RESOURCES = new int[] {
@@ -83,7 +82,6 @@ public class CallStatsActivity extends ListActivity implements

    private final Handler mHandler = new Handler();

    DoubleDatePickerFragment mFilterFragment;
    private final ContentObserver mCallLogObserver = new CustomContentObserver();
    private final ContentObserver mContactsObserver = new CustomContentObserver();
    private boolean mRefreshDataRequired = true;
@@ -101,40 +99,6 @@ public class CallStatsActivity extends ListActivity implements
        }
    }

    public class DoubleDatePickerFragment extends DialogFragment
            implements DoubleDatePickerDialog.OnDateSetListener {

        DoubleDatePickerDialog mDialog;
        Context mContext;

        public DoubleDatePickerFragment(Context context) {
            mContext = context;
            mDialog = new DoubleDatePickerDialog(context, this);
        }

        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            return mDialog;
        }

        @Override
        public void onStart() {
            if (mFilterFrom != -1) {
                mDialog.setValues(mFilterFrom, mFilterTo);
            } else {
                mDialog.resetPickers();
            }
            super.onStart();
        }

        public void onDateSet(long from, long to) {
            mFilterFrom = from;
            mFilterTo = to;
            invalidateOptionsMenu();
            fetchCalls();
        }
    }

    public class CallStatsNavAdapter extends ArrayAdapter<String> {

        public CallStatsNavAdapter(Context context, int textResourceId, Object[] objects) {
@@ -175,7 +139,6 @@ public class CallStatsActivity extends ListActivity implements
        cr.registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, mContactsObserver);

        Resources res = getResources();
        mFilterFragment = new DoubleDatePickerFragment(this);
        mNavItems = res.getStringArray(R.array.call_stats_nav_items);
        configureActionBar();

@@ -257,7 +220,11 @@ public class CallStatsActivity extends ListActivity implements
                break;
            }
            case R.id.date_filter: {
                mFilterFragment.show(getFragmentManager(), "filter");
                final DoubleDatePickerDialog.Fragment fragment =
                        new DoubleDatePickerDialog.Fragment();
                fragment.setArguments(DoubleDatePickerDialog.Fragment.createArguments(
                        mFilterFrom, mFilterTo));
                fragment.show(getFragmentManager(), "filter");
                break;
            }
            case R.id.reset_date_filter: {
@@ -283,6 +250,14 @@ public class CallStatsActivity extends ListActivity implements
        return true;
    }

    @Override
    public void onDateSet(long from, long to) {
        mFilterFrom = from;
        mFilterTo = to;
        invalidateOptionsMenu();
        fetchCalls();
    }

    @Override
    public boolean onNavigationItemSelected(int position, long id) {
        mCallTypeFilter = position;
+39 −0
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@
package com.android.contacts.callstats;

import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
@@ -48,6 +50,43 @@ public class DoubleDatePickerDialog extends AlertDialog
        void onDateSet(long from, long to);
    }

    public static class Fragment extends DialogFragment implements OnDateSetListener {
        private DoubleDatePickerDialog mDialog;

        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            mDialog = new DoubleDatePickerDialog(getActivity(), this);
            return mDialog;
        }

        @Override
        public void onStart() {
            final Bundle args = getArguments();
            final long from = args.getLong("from", -1);
            final long to = args.getLong("to", -1);

            if (from != -1) {
                mDialog.setValues(from, to);
            } else {
                mDialog.resetPickers();
            }
            super.onStart();
        }

        @Override
        public void onDateSet(long from, long to) {
            ((DoubleDatePickerDialog.OnDateSetListener) getActivity()).onDateSet(from, to);
        }

        public static Bundle createArguments(long from, long to) {
            final Bundle args = new Bundle();
            args.putLong("from", from);
            args.putLong("to", to);
            return args;
        }
    }


    private static final String YEAR = "year";
    private static final String MONTH = "month";
    private static final String DAY = "day";