Home | History | Annotate | Download | only in calllog
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.dialer.app.calllog;
     18 
     19 import android.content.Intent;
     20 import android.database.ContentObserver;
     21 import android.media.AudioManager;
     22 import android.os.Bundle;
     23 import android.provider.CallLog;
     24 import android.provider.VoicemailContract;
     25 import android.view.LayoutInflater;
     26 import android.view.View;
     27 import android.view.ViewGroup;
     28 import com.android.dialer.app.R;
     29 import com.android.dialer.app.list.ListsFragment;
     30 import com.android.dialer.app.voicemail.VoicemailAudioManager;
     31 import com.android.dialer.app.voicemail.VoicemailErrorManager;
     32 import com.android.dialer.app.voicemail.VoicemailPlaybackPresenter;
     33 import com.android.dialer.common.LogUtil;
     34 import com.android.dialer.logging.DialerImpression;
     35 import com.android.dialer.logging.Logger;
     36 import com.android.dialer.util.PermissionsUtil;
     37 
     38 public class VisualVoicemailCallLogFragment extends CallLogFragment {
     39 
     40   private final ContentObserver mVoicemailStatusObserver = new CustomContentObserver();
     41   private VoicemailPlaybackPresenter mVoicemailPlaybackPresenter;
     42 
     43   private VoicemailErrorManager mVoicemailErrorManager;
     44 
     45   public VisualVoicemailCallLogFragment() {
     46     super(CallLog.Calls.VOICEMAIL_TYPE);
     47   }
     48 
     49   @Override
     50   protected VoicemailPlaybackPresenter getVoicemailPlaybackPresenter() {
     51     return mVoicemailPlaybackPresenter;
     52   }
     53 
     54   @Override
     55   public void onActivityCreated(Bundle savedInstanceState) {
     56     mVoicemailPlaybackPresenter =
     57         VoicemailPlaybackPresenter.getInstance(getActivity(), savedInstanceState);
     58 
     59     if (PermissionsUtil.hasReadVoicemailPermissions(getContext())
     60         && PermissionsUtil.hasAddVoicemailPermissions(getContext())) {
     61       getActivity()
     62           .getContentResolver()
     63           .registerContentObserver(
     64               VoicemailContract.Status.CONTENT_URI, true, mVoicemailStatusObserver);
     65     } else {
     66       LogUtil.w(
     67           "VisualVoicemailCallLogFragment.onActivityCreated",
     68           "read voicemail permission unavailable.");
     69     }
     70     super.onActivityCreated(savedInstanceState);
     71     mVoicemailErrorManager =
     72         new VoicemailErrorManager(getContext(), getAdapter().getAlertManager(), mModalAlertManager);
     73 
     74     if (PermissionsUtil.hasReadVoicemailPermissions(getContext())
     75         && PermissionsUtil.hasAddVoicemailPermissions(getContext())) {
     76       getActivity()
     77           .getContentResolver()
     78           .registerContentObserver(
     79               VoicemailContract.Status.CONTENT_URI,
     80               true,
     81               mVoicemailErrorManager.getContentObserver());
     82     } else {
     83       LogUtil.w(
     84           "VisualVoicemailCallLogFragment.onActivityCreated",
     85           "read voicemail permission unavailable.");
     86     }
     87   }
     88 
     89   @Override
     90   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
     91     View view = inflater.inflate(R.layout.call_log_fragment, container, false);
     92     setupView(view);
     93     return view;
     94   }
     95 
     96   @Override
     97   public void onResume() {
     98     super.onResume();
     99     mVoicemailPlaybackPresenter.onResume();
    100     mVoicemailErrorManager.onResume();
    101   }
    102 
    103   @Override
    104   public void onPause() {
    105     mVoicemailPlaybackPresenter.onPause();
    106     mVoicemailErrorManager.onPause();
    107     super.onPause();
    108   }
    109 
    110   @Override
    111   public void onDestroy() {
    112     getActivity()
    113         .getContentResolver()
    114         .unregisterContentObserver(mVoicemailErrorManager.getContentObserver());
    115     mVoicemailPlaybackPresenter.onDestroy();
    116     mVoicemailErrorManager.onDestroy();
    117     getActivity().getContentResolver().unregisterContentObserver(mVoicemailStatusObserver);
    118     super.onDestroy();
    119   }
    120 
    121   @Override
    122   public void onSaveInstanceState(Bundle outState) {
    123     super.onSaveInstanceState(outState);
    124     mVoicemailPlaybackPresenter.onSaveInstanceState(outState);
    125   }
    126 
    127   @Override
    128   public void fetchCalls() {
    129     super.fetchCalls();
    130     ((ListsFragment) getParentFragment()).updateTabUnreadCounts();
    131   }
    132 
    133   @Override
    134   public void onVisible() {
    135     LogUtil.enterBlock("VisualVoicemailCallLogFragment.onPageSelected");
    136     super.onVisible();
    137     if (getActivity() != null) {
    138       Intent intent = new Intent(VoicemailContract.ACTION_SYNC_VOICEMAIL);
    139       intent.setPackage(getActivity().getPackageName());
    140       getActivity().sendBroadcast(intent);
    141       Logger.get(getActivity()).logImpression(DialerImpression.Type.VVM_TAB_VIEWED);
    142       getActivity().setVolumeControlStream(VoicemailAudioManager.PLAYBACK_STREAM);
    143     }
    144   }
    145 
    146   @Override
    147   public void onNotVisible() {
    148     LogUtil.enterBlock("VisualVoicemailCallLogFragment.onPageUnselected");
    149     super.onNotVisible();
    150     if (getActivity() != null) {
    151       getActivity().setVolumeControlStream(AudioManager.USE_DEFAULT_STREAM_TYPE);
    152     }
    153   }
    154 }
    155