Home | History | Annotate | Download | only in calllog
      1 /*
      2  * Copyright (C) 2013 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 package com.android.dialer.calllog;
     17 
     18 import android.app.ActionBar;
     19 import android.app.Activity;
     20 import android.app.Fragment;
     21 import android.app.FragmentManager;
     22 import android.content.Intent;
     23 import android.database.Cursor;
     24 import android.os.Bundle;
     25 import android.os.Handler;
     26 import android.provider.CallLog;
     27 import android.provider.CallLog.Calls;
     28 import android.support.v13.app.FragmentPagerAdapter;
     29 import android.support.v4.view.ViewPager;
     30 import android.view.Menu;
     31 import android.view.MenuInflater;
     32 import android.view.MenuItem;
     33 import android.view.MotionEvent;
     34 import android.view.ViewGroup;
     35 
     36 import com.android.contacts.common.interactions.TouchPointManager;
     37 import com.android.contacts.common.list.ViewPagerTabs;
     38 import com.android.contacts.common.util.PermissionsUtil;
     39 import com.android.contacts.commonbind.analytics.AnalyticsUtil;
     40 import com.android.dialer.DialtactsActivity;
     41 import com.android.dialer.R;
     42 import com.android.dialer.voicemail.VoicemailStatusHelper;
     43 import com.android.dialer.voicemail.VoicemailStatusHelperImpl;
     44 
     45 public class CallLogActivity extends Activity implements ViewPager.OnPageChangeListener {
     46     private ViewPager mViewPager;
     47     private ViewPagerTabs mViewPagerTabs;
     48     private ViewPagerAdapter mViewPagerAdapter;
     49     private CallLogFragment mAllCallsFragment;
     50     private CallLogFragment mMissedCallsFragment;
     51 
     52     private String[] mTabTitles;
     53 
     54     private static final int TAB_INDEX_ALL = 0;
     55     private static final int TAB_INDEX_MISSED = 1;
     56 
     57     private static final int TAB_INDEX_COUNT = 2;
     58 
     59     private boolean mIsResumed;
     60 
     61     public class ViewPagerAdapter extends FragmentPagerAdapter {
     62         public ViewPagerAdapter(FragmentManager fm) {
     63             super(fm);
     64         }
     65 
     66         @Override
     67         public Fragment getItem(int position) {
     68             switch (position) {
     69                 case TAB_INDEX_ALL:
     70                     return new CallLogFragment(CallLogQueryHandler.CALL_TYPE_ALL);
     71                 case TAB_INDEX_MISSED:
     72                     return new CallLogFragment(Calls.MISSED_TYPE);
     73             }
     74             throw new IllegalStateException("No fragment at position " + position);
     75         }
     76 
     77         @Override
     78         public Object instantiateItem(ViewGroup container, int position) {
     79             final CallLogFragment fragment =
     80                     (CallLogFragment) super.instantiateItem(container, position);
     81             switch (position) {
     82                 case TAB_INDEX_ALL:
     83                     mAllCallsFragment = fragment;
     84                     break;
     85                 case TAB_INDEX_MISSED:
     86                     mMissedCallsFragment = fragment;
     87                     break;
     88             }
     89             return fragment;
     90         }
     91 
     92         @Override
     93         public CharSequence getPageTitle(int position) {
     94             return mTabTitles[position];
     95         }
     96 
     97         @Override
     98         public int getCount() {
     99             return TAB_INDEX_COUNT;
    100         }
    101     }
    102 
    103     @Override
    104     public boolean dispatchTouchEvent(MotionEvent ev) {
    105         if (ev.getAction() == MotionEvent.ACTION_DOWN) {
    106             TouchPointManager.getInstance().setPoint((int) ev.getRawX(), (int) ev.getRawY());
    107         }
    108         return super.dispatchTouchEvent(ev);
    109     }
    110 
    111     @Override
    112     protected void onCreate(Bundle savedInstanceState) {
    113         super.onCreate(savedInstanceState);
    114 
    115         setContentView(R.layout.call_log_activity);
    116         getWindow().setBackgroundDrawable(null);
    117 
    118         final ActionBar actionBar = getActionBar();
    119         actionBar.setDisplayShowHomeEnabled(true);
    120         actionBar.setDisplayHomeAsUpEnabled(true);
    121         actionBar.setDisplayShowTitleEnabled(true);
    122         actionBar.setElevation(0);
    123 
    124         int startingTab = TAB_INDEX_ALL;
    125         final Intent intent = getIntent();
    126         if (intent != null) {
    127             final int callType = intent.getIntExtra(CallLog.Calls.EXTRA_CALL_TYPE_FILTER, -1);
    128             if (callType == CallLog.Calls.MISSED_TYPE) {
    129                 startingTab = TAB_INDEX_MISSED;
    130             }
    131         }
    132 
    133         mTabTitles = new String[TAB_INDEX_COUNT];
    134         mTabTitles[0] = getString(R.string.call_log_all_title);
    135         mTabTitles[1] = getString(R.string.call_log_missed_title);
    136 
    137         mViewPager = (ViewPager) findViewById(R.id.call_log_pager);
    138 
    139         mViewPagerAdapter = new ViewPagerAdapter(getFragmentManager());
    140         mViewPager.setAdapter(mViewPagerAdapter);
    141         mViewPager.setOffscreenPageLimit(1);
    142         mViewPager.setOnPageChangeListener(this);
    143 
    144         mViewPagerTabs = (ViewPagerTabs) findViewById(R.id.viewpager_header);
    145 
    146         mViewPagerTabs.setViewPager(mViewPager);
    147         mViewPager.setCurrentItem(startingTab);
    148     }
    149 
    150     @Override
    151     protected void onResume() {
    152         mIsResumed = true;
    153         super.onResume();
    154         sendScreenViewForChildFragment(mViewPager.getCurrentItem());
    155     }
    156 
    157     @Override
    158     protected void onPause() {
    159         mIsResumed = false;
    160         super.onPause();
    161     }
    162 
    163     @Override
    164     public boolean onCreateOptionsMenu(Menu menu) {
    165         final MenuInflater inflater = getMenuInflater();
    166         inflater.inflate(R.menu.call_log_options, menu);
    167         return true;
    168     }
    169 
    170     @Override
    171     public boolean onPrepareOptionsMenu(Menu menu) {
    172         final MenuItem itemDeleteAll = menu.findItem(R.id.delete_all);
    173         if (mAllCallsFragment != null && itemDeleteAll != null) {
    174             // If onPrepareOptionsMenu is called before fragments are loaded, don't do anything.
    175             final CallLogAdapter adapter = mAllCallsFragment.getAdapter();
    176             itemDeleteAll.setVisible(adapter != null && !adapter.isEmpty());
    177         }
    178         return true;
    179     }
    180 
    181     @Override
    182     public boolean onOptionsItemSelected(MenuItem item) {
    183         switch (item.getItemId()) {
    184             case android.R.id.home:
    185                 final Intent intent = new Intent(this, DialtactsActivity.class);
    186                 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    187                 startActivity(intent);
    188                 return true;
    189             case R.id.delete_all:
    190                 ClearCallLogDialog.show(getFragmentManager());
    191                 return true;
    192         }
    193         return super.onOptionsItemSelected(item);
    194     }
    195 
    196     @Override
    197     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    198         mViewPagerTabs.onPageScrolled(position, positionOffset, positionOffsetPixels);
    199     }
    200 
    201     @Override
    202     public void onPageSelected(int position) {
    203         if (mIsResumed) {
    204             sendScreenViewForChildFragment(position);
    205         }
    206         mViewPagerTabs.onPageSelected(position);
    207     }
    208 
    209     @Override
    210     public void onPageScrollStateChanged(int state) {
    211         mViewPagerTabs.onPageScrollStateChanged(state);
    212     }
    213 
    214     private void sendScreenViewForChildFragment(int position) {
    215         AnalyticsUtil.sendScreenView(CallLogFragment.class.getSimpleName(), this,
    216                 getFragmentTagForPosition(position));
    217     }
    218 
    219     /**
    220      * Returns the fragment located at the given position in the {@link ViewPagerAdapter}. May
    221      * be null if the position is invalid.
    222      */
    223     private String getFragmentTagForPosition(int position) {
    224         switch (position) {
    225             case TAB_INDEX_ALL:
    226                 return "All";
    227             case TAB_INDEX_MISSED:
    228                 return "Missed";
    229         }
    230         return null;
    231     }
    232 }
    233