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