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

Commit 51067692 authored by Ta-wei Yen's avatar Ta-wei Yen
Browse files

Refactor VVM specific code from CallLogFragment

Moved visual voicemail code from CallLogFragment to
VisualVoicemailCallLogFragment.

Expected to have a lot of VVM specific code in the fragment, so it's
better to separate them.

Change-Id: I0fcad51d08f1a174a42f940fd455ce885d76c4ae
parent cbbb3cf8
Loading
Loading
Loading
Loading
+10 −39
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@

package com.android.dialer.calllog;

import static android.Manifest.permission.READ_CALL_LOG;

import android.app.Activity;
import android.app.Fragment;
import android.app.KeyguardManager;
@@ -32,7 +30,7 @@ import android.os.Message;
import android.provider.CallLog;
import android.provider.CallLog.Calls;
import android.provider.ContactsContract;
import android.provider.VoicemailContract.Status;
import android.support.annotation.Nullable;
import android.support.v13.app.FragmentCompat;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
@@ -43,14 +41,14 @@ import android.view.ViewGroup;
import com.android.contacts.common.GeoUtil;
import com.android.contacts.common.util.PermissionsUtil;
import com.android.dialer.R;
import com.android.dialer.filterednumber.FilteredNumbersUtil;
import com.android.dialer.list.ListsFragment;
import com.android.dialer.util.EmptyLoader;
import com.android.dialer.voicemail.VoicemailPlaybackPresenter;
import com.android.dialer.widget.EmptyContentView;
import com.android.dialer.widget.EmptyContentView.OnEmptyViewActionButtonClickedListener;
import com.android.dialerbind.ObjectFactory;

import static android.Manifest.permission.READ_CALL_LOG;

/**
 * Displays a list of call log entries. To filter for a particular kind of call
 * (all, missed or voicemails), specify it in the constructor.
@@ -84,11 +82,8 @@ public class CallLogFragment extends Fragment implements CallLogQueryHandler.Lis
    private LinearLayoutManager mLayoutManager;
    private CallLogAdapter mAdapter;
    private CallLogQueryHandler mCallLogQueryHandler;
    private VoicemailPlaybackPresenter mVoicemailPlaybackPresenter;
    private boolean mScrollToTop;

    /** Whether there is at least one voicemail source installed. */
    private boolean mVoicemailSourcesAvailable = false;

    private EmptyContentView mEmptyListView;
    private KeyguardManager mKeyguardManager;
@@ -111,7 +106,7 @@ public class CallLogFragment extends Fragment implements CallLogQueryHandler.Lis

    private final Handler mHandler = new Handler();

    private class CustomContentObserver extends ContentObserver {
    protected class CustomContentObserver extends ContentObserver {
        public CustomContentObserver() {
            super(mHandler);
        }
@@ -124,7 +119,6 @@ public class CallLogFragment extends Fragment implements CallLogQueryHandler.Lis
    // See issue 6363009
    private final ContentObserver mCallLogObserver = new CustomContentObserver();
    private final ContentObserver mContactsObserver = new CustomContentObserver();
    private final ContentObserver mVoicemailStatusObserver = new CustomContentObserver();
    private boolean mRefreshDataRequired = true;

    private boolean mHasReadCallLogPermission = false;
@@ -210,13 +204,7 @@ public class CallLogFragment extends Fragment implements CallLogQueryHandler.Lis
        resolver.registerContentObserver(CallLog.CONTENT_URI, true, mCallLogObserver);
        resolver.registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true,
                mContactsObserver);
        resolver.registerContentObserver(Status.CONTENT_URI, true, mVoicemailStatusObserver);
        setHasOptionsMenu(true);

        if (mCallTypeFilter == Calls.VOICEMAIL_TYPE) {
            mVoicemailPlaybackPresenter = VoicemailPlaybackPresenter
                    .getInstance(activity, state);
        }
    }

    /** Called by the CallLogQueryHandler when the list of calls has been fetched or updated. */
@@ -292,7 +280,12 @@ public class CallLogFragment extends Fragment implements CallLogQueryHandler.Lis
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
        View view = inflater.inflate(R.layout.call_log_fragment, container, false);
        setupView(view, null);
        return view;
    }

    protected void setupView(
            View view, @Nullable VoicemailPlaybackPresenter voicemailPlaybackPresenter) {
        mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
        mRecyclerView.setHasFixedSize(true);
        mLayoutManager = new LinearLayoutManager(getActivity());
@@ -306,11 +299,10 @@ public class CallLogFragment extends Fragment implements CallLogQueryHandler.Lis
                getActivity(),
                this,
                new ContactInfoHelper(getActivity(), currentCountryIso),
                mVoicemailPlaybackPresenter,
                voicemailPlaybackPresenter,
                mIsCallLogActivity);
        mRecyclerView.setAdapter(mAdapter);
        fetchCalls();
        return view;
    }

    @Override
@@ -348,19 +340,11 @@ public class CallLogFragment extends Fragment implements CallLogQueryHandler.Lis
        mAdapter.onResume();

        rescheduleDisplayUpdate();

        if (mVoicemailPlaybackPresenter != null) {
            mVoicemailPlaybackPresenter.onResume();
        }
    }

    @Override
    public void onPause() {
        cancelDisplayUpdate();

        if (mVoicemailPlaybackPresenter != null) {
            mVoicemailPlaybackPresenter.onPause();
        }
        mAdapter.onPause();
        super.onPause();
    }
@@ -376,13 +360,8 @@ public class CallLogFragment extends Fragment implements CallLogQueryHandler.Lis
    public void onDestroy() {
        mAdapter.changeCursor(null);

        if (mVoicemailPlaybackPresenter != null) {
            mVoicemailPlaybackPresenter.onDestroy();
        }

        getActivity().getContentResolver().unregisterContentObserver(mCallLogObserver);
        getActivity().getContentResolver().unregisterContentObserver(mContactsObserver);
        getActivity().getContentResolver().unregisterContentObserver(mVoicemailStatusObserver);
        super.onDestroy();
    }

@@ -394,19 +373,11 @@ public class CallLogFragment extends Fragment implements CallLogQueryHandler.Lis
        outState.putLong(KEY_DATE_LIMIT, mDateLimit);

        mAdapter.onSaveInstanceState(outState);

        if (mVoicemailPlaybackPresenter != null) {
            mVoicemailPlaybackPresenter.onSaveInstanceState(outState);
        }
    }

    @Override
    public void fetchCalls() {
        mCallLogQueryHandler.fetchCalls(mCallTypeFilter, mDateLimit);

        if (mVoicemailPlaybackPresenter != null) {
            ((ListsFragment) getParentFragment()).updateTabUnreadCounts();
        }
    }

    private void updateEmptyMessage(int filterType) {
+87 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2016 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.
 */

package com.android.dialer.calllog;

import android.database.ContentObserver;
import android.os.Bundle;
import android.provider.CallLog;
import android.provider.VoicemailContract;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.android.dialer.R;
import com.android.dialer.list.ListsFragment;
import com.android.dialer.voicemail.VoicemailPlaybackPresenter;

public class VisualVoicemailCallLogFragment extends CallLogFragment {

    private VoicemailPlaybackPresenter mVoicemailPlaybackPresenter;
    private final ContentObserver mVoicemailStatusObserver = new CustomContentObserver();

    public VisualVoicemailCallLogFragment() {
        super(CallLog.Calls.VOICEMAIL_TYPE);
    }

    @Override
    public void onCreate(Bundle state) {
        super.onCreate(state);
        mVoicemailPlaybackPresenter = VoicemailPlaybackPresenter.getInstance(getActivity(), state);
        getActivity().getContentResolver().registerContentObserver(
                VoicemailContract.Status.CONTENT_URI, true, mVoicemailStatusObserver);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
        View view = inflater.inflate(R.layout.call_log_fragment, container, false);
        setupView(view, mVoicemailPlaybackPresenter);
        return view;
    }

    @Override
    public void onResume() {
        super.onResume();
        mVoicemailPlaybackPresenter.onResume();
    }

    @Override
    public void onPause() {
        mVoicemailPlaybackPresenter.onPause();
        super.onPause();
    }

    @Override
    public void onDestroy() {
        mVoicemailPlaybackPresenter.onDestroy();
        getActivity().getContentResolver().unregisterContentObserver(mVoicemailStatusObserver);
        super.onDestroy();
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        mVoicemailPlaybackPresenter.onSaveInstanceState(outState);
    }

    @Override
    public void fetchCalls() {
        super.fetchCalls();
        ((ListsFragment) getParentFragment()).updateTabUnreadCounts();
    }
}
+2 −1
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import com.android.dialer.DialtactsActivity;
import com.android.dialer.R;
import com.android.dialer.calllog.CallLogFragment;
import com.android.dialer.calllog.CallLogQueryHandler;
import com.android.dialer.calllog.VisualVoicemailCallLogFragment;
import com.android.dialer.logging.Logger;
import com.android.dialer.logging.ScreenEvent;
import com.android.dialer.util.DialerUtils;
@@ -126,7 +127,7 @@ public class ListsFragment extends Fragment
                    mAllContactsFragment = new AllContactsFragment();
                    return mAllContactsFragment;
                case TAB_INDEX_VOICEMAIL:
                    mVoicemailFragment = new CallLogFragment(Calls.VOICEMAIL_TYPE);
                    mVoicemailFragment = new VisualVoicemailCallLogFragment();
                    return mVoicemailFragment;
            }
            throw new IllegalStateException("No fragment at position " + position);