/* * Copyright (C) 2013 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.app.ActionBar; import android.app.Activity; import android.app.Fragment; import android.app.FragmentManager; import android.app.ActionBar.Tab; import android.app.ActionBar.TabListener; import android.app.FragmentTransaction; import android.content.Intent; import android.os.Bundle; import android.provider.CallLog.Calls; import android.support.v13.app.FragmentPagerAdapter; import android.support.v4.view.PagerTabStrip; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.text.Spannable; import android.text.SpannableString; import android.text.style.TypefaceSpan; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import com.android.dialer.DialtactsActivity; import com.android.dialer.R; import com.android.dialer.calllog.CallLogFragment; public class CallLogActivity extends Activity { private ViewPager mViewPager; private ViewPagerAdapter mViewPagerAdapter; private CallLogFragment mAllCallsFragment; private CallLogFragment mMissedCallsFragment; private static final int TAB_INDEX_ALL = 0; private static final int TAB_INDEX_MISSED = 1; private static final int TAB_INDEX_COUNT = 2; public class ViewPagerAdapter extends FragmentPagerAdapter { public ViewPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { switch (position) { case TAB_INDEX_ALL: mAllCallsFragment = new CallLogFragment(CallLogQueryHandler.CALL_TYPE_ALL); return mAllCallsFragment; case TAB_INDEX_MISSED: mMissedCallsFragment = new CallLogFragment(Calls.MISSED_TYPE); return mMissedCallsFragment; } throw new IllegalStateException("No fragment at position " + position); } @Override public int getCount() { return TAB_INDEX_COUNT; } } private final TabListener mTabListener = new TabListener() { @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { } @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { if (mViewPager != null && mViewPager.getCurrentItem() != tab.getPosition()) { mViewPager.setCurrentItem(tab.getPosition(), true); } } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { } }; private final OnPageChangeListener mOnPageChangeListener = new OnPageChangeListener() { @Override public void onPageScrolled( int position, float positionOffset, int positionOffsetPixels) {} @Override public void onPageSelected(int position) { final ActionBar actionBar = getActionBar(); actionBar.selectTab(actionBar.getTabAt(position)); } @Override public void onPageScrollStateChanged(int arg0) { } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.call_log_activity); final ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); actionBar.setDisplayShowHomeEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setDisplayShowTitleEnabled(true); final SpannableString s = new SpannableString(getString(R.string.call_log_activity_title)); s.setSpan(new TypefaceSpan(getString(R.string.call_log_activity_title_font_family)), 0, s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); actionBar.setTitle(s); final Tab allTab = actionBar.newTab(); final String allTitle = getString(R.string.call_log_all_title); allTab.setContentDescription(allTitle); allTab.setText(allTitle); allTab.setTabListener(mTabListener); actionBar.addTab(allTab); final Tab missedTab = actionBar.newTab(); final String missedTitle = getString(R.string.call_log_missed_title); missedTab.setContentDescription(missedTitle); missedTab.setText(missedTitle); missedTab.setTabListener(mTabListener); actionBar.addTab(missedTab); mViewPager = (ViewPager) findViewById(R.id.call_log_pager); mViewPagerAdapter = new ViewPagerAdapter(getFragmentManager()); mViewPager.setAdapter(mViewPagerAdapter); mViewPager.setOnPageChangeListener(mOnPageChangeListener); mViewPager.setOffscreenPageLimit(1); } @Override public boolean onCreateOptionsMenu(Menu menu) { final MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.call_log_options, menu); return true; } @Override public boolean onPrepareOptionsMenu(Menu menu) { final MenuItem itemDeleteAll = menu.findItem(R.id.delete_all); // If onPrepareOptionsMenu is called before fragments loaded. Don't do anything. if (mAllCallsFragment != null && itemDeleteAll != null) { final CallLogAdapter adapter = mAllCallsFragment.getAdapter(); itemDeleteAll.setEnabled(adapter != null && !adapter.isEmpty()); } return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: final Intent intent = new Intent(this, DialtactsActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); return true; case R.id.delete_all: ClearCallLogDialog.show(getFragmentManager()); return true; } return super.onOptionsItemSelected(item); } }