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