1b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project/* 2b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * 4b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * you may not use this file except in compliance with the License. 6b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * You may obtain a copy of the License at 7b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * 8b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * 10b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * See the License for the specific language governing permissions and 14b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * limitations under the License. 15b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project */ 16b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 17b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectpackage com.android.calculator2; 18b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 19b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport android.app.Activity; 20353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powellimport android.content.res.Resources; 21353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powellimport android.content.res.TypedArray; 22b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport android.os.Bundle; 23353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powellimport android.os.Parcelable; 24353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powellimport android.support.v4.view.PagerAdapter; 25353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powellimport android.support.v4.view.ViewPager; 269476df20f8c944746814d3e7ebd1f1eb41499025Dmitri Plotnikovimport android.util.Log; 279476df20f8c944746814d3e7ebd1f1eb41499025Dmitri Plotnikovimport android.view.KeyEvent; 28353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powellimport android.view.LayoutInflater; 29b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport android.view.Menu; 30b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport android.view.MenuItem; 31b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport android.view.View; 32353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powellimport android.view.View.OnClickListener; 330a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereiraimport android.view.ViewConfiguration; 34353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powellimport android.view.ViewGroup; 3592ccd21f8cad535532827ad4d10d743676019e0fGilles Debunneimport android.view.WindowManager; 360a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereiraimport android.widget.PopupMenu; 370a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereiraimport android.widget.PopupMenu.OnMenuItemClickListener; 38b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 390a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereirapublic class Calculator extends Activity implements PanelSwitcher.Listener, Logic.Listener, 400a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira OnClickListener, OnMenuItemClickListener { 41b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project EventListener mListener = new EventListener(); 42b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project private CalculatorDisplay mDisplay; 43b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project private Persist mPersist; 44b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project private History mHistory; 45b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project private Logic mLogic; 46353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell private ViewPager mPager; 472501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov private View mClearButton; 482501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov private View mBackspaceButton; 490a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira private View mOverflowMenuButton; 50b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 51b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project static final int BASIC_PANEL = 0; 52b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project static final int ADVANCED_PANEL = 1; 53b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 54b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project private static final String LOG_TAG = "Calculator"; 55b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project private static final boolean DEBUG = false; 566bef2f85bef66323b10a58b7bb3c4d20e8e1eaa7Joe Onorato private static final boolean LOG_ENABLED = false; 57cf3ca321fa8cc1f5427454c5e2501b7978bb3711Mihai Preda private static final String STATE_CURRENT_VIEW = "state-current-view"; 58b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 59b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project @Override 60cf3ca321fa8cc1f5427454c5e2501b7978bb3711Mihai Preda public void onCreate(Bundle state) { 61cf3ca321fa8cc1f5427454c5e2501b7978bb3711Mihai Preda super.onCreate(state); 620c464d2a9998866d7f21ae5cf2761f2365d16fbcJeff Hamilton 6392ccd21f8cad535532827ad4d10d743676019e0fGilles Debunne // Disable IME for this application 6492ccd21f8cad535532827ad4d10d743676019e0fGilles Debunne getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM, 6592ccd21f8cad535532827ad4d10d743676019e0fGilles Debunne WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); 6692ccd21f8cad535532827ad4d10d743676019e0fGilles Debunne 67b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project setContentView(R.layout.main); 68353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell mPager = (ViewPager) findViewById(R.id.panelswitch); 69353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell if (mPager != null) { 70353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell mPager.setAdapter(new PageAdapter(mPager)); 71353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell } else { 72353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell // Single page UI 73353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell final TypedArray buttons = getResources().obtainTypedArray(R.array.buttons); 74353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell for (int i = 0; i < buttons.length(); i++) { 75353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell setOnClickListener(null, buttons.getResourceId(i, 0)); 76353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell } 77353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell buttons.recycle(); 78353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell } 79353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell 80353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell if (mClearButton == null) { 81353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell mClearButton = findViewById(R.id.clear); 82353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell mClearButton.setOnClickListener(mListener); 83353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell mClearButton.setOnLongClickListener(mListener); 84353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell } 85353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell if (mBackspaceButton == null) { 86353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell mBackspaceButton = findViewById(R.id.del); 87353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell mBackspaceButton.setOnClickListener(mListener); 88353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell mBackspaceButton.setOnLongClickListener(mListener); 89353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell } 90b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 91b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project mPersist = new Persist(this); 922501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov mPersist.load(); 932501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov 94b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project mHistory = mPersist.history; 95b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 96b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project mDisplay = (CalculatorDisplay) findViewById(R.id.display); 97b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 982501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov mLogic = new Logic(this, mHistory, mDisplay); 992501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov mLogic.setListener(this); 1002501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov 1012501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov mLogic.setDeleteMode(mPersist.getDeleteMode()); 102582273d77e6ee8335447cbd524e7b47b851c7b46Dmitri Plotnikov mLogic.setLineLength(mDisplay.getMaxDigits()); 1032501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov 104b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project HistoryAdapter historyAdapter = new HistoryAdapter(this, mHistory, mLogic); 105b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project mHistory.setObserver(historyAdapter); 106cf3ca321fa8cc1f5427454c5e2501b7978bb3711Mihai Preda 107353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell if (mPager != null) { 108353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell mPager.setCurrentItem(state == null ? 0 : state.getInt(STATE_CURRENT_VIEW, 0)); 109e2092454e13850c551550db9879fa4fa93218c75Dmitri Plotnikov } 110cf3ca321fa8cc1f5427454c5e2501b7978bb3711Mihai Preda 111353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell mListener.setHandler(mLogic, mPager); 112b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project mDisplay.setOnKeyListener(mListener); 113b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 1140a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira if (!ViewConfiguration.get(this).hasPermanentMenuKey()) { 1150a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira createFakeMenu(); 1160a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira } 117e2092454e13850c551550db9879fa4fa93218c75Dmitri Plotnikov 118582273d77e6ee8335447cbd524e7b47b851c7b46Dmitri Plotnikov mLogic.resumeWithHistory(); 1192501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov updateDeleteMode(); 1202501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov } 1212501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov 1222501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov private void updateDeleteMode() { 1232501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov if (mLogic.getDeleteMode() == Logic.DELETE_MODE_BACKSPACE) { 1242501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov mClearButton.setVisibility(View.GONE); 1252501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov mBackspaceButton.setVisibility(View.VISIBLE); 1262501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov } else { 1272501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov mClearButton.setVisibility(View.VISIBLE); 1282501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov mBackspaceButton.setVisibility(View.GONE); 129b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project } 130b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project } 131b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 132353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell void setOnClickListener(View root, int id) { 133353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell final View target = root != null ? root.findViewById(id) : findViewById(id); 134353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell target.setOnClickListener(mListener); 135e2092454e13850c551550db9879fa4fa93218c75Dmitri Plotnikov } 136e2092454e13850c551550db9879fa4fa93218c75Dmitri Plotnikov 137b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project @Override 138b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project public boolean onCreateOptionsMenu(Menu menu) { 139b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project super.onCreateOptionsMenu(menu); 1400a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira getMenuInflater().inflate(R.menu.menu, menu); 1410a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira return true; 1420a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira } 143052c92af9b70c42a84c989876c513b456d0a500eDmitri Plotnikov 1440a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira @Override 1450a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira public boolean onPrepareOptionsMenu(Menu menu) { 1460a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira super.onPrepareOptionsMenu(menu); 147e5179484230da096d6f681eee2f488d582b7fa9fMindy Pereira menu.findItem(R.id.basic).setVisible(!getBasicVisibility()); 148e5179484230da096d6f681eee2f488d582b7fa9fMindy Pereira menu.findItem(R.id.advanced).setVisible(!getAdvancedVisibility()); 1490a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira return true; 1500a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira } 151052c92af9b70c42a84c989876c513b456d0a500eDmitri Plotnikov 152052c92af9b70c42a84c989876c513b456d0a500eDmitri Plotnikov 1530a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira private void createFakeMenu() { 1540a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira mOverflowMenuButton = findViewById(R.id.overflow_menu); 1550a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira if (mOverflowMenuButton != null) { 1560a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira mOverflowMenuButton.setVisibility(View.VISIBLE); 1570a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira mOverflowMenuButton.setOnClickListener(this); 1580a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira } 1590a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira } 160b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 1610a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira @Override 1620a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira public void onClick(View v) { 1630a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira switch (v.getId()) { 1640a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira case R.id.overflow_menu: 1650a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira PopupMenu menu = constructPopupMenu(); 1660a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira if (menu != null) { 1670a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira menu.show(); 1680a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira } 1690a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira break; 1700a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira } 171b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project } 172052c92af9b70c42a84c989876c513b456d0a500eDmitri Plotnikov 1730a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira private PopupMenu constructPopupMenu() { 1740a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira final PopupMenu popupMenu = new PopupMenu(this, mOverflowMenuButton); 1750a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira final Menu menu = popupMenu.getMenu(); 1760a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira popupMenu.inflate(R.menu.menu); 1770a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira popupMenu.setOnMenuItemClickListener(this); 1780a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira onPrepareOptionsMenu(menu); 1790a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira return popupMenu; 1800a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira } 1810a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira 1820a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira 183b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project @Override 1840a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira public boolean onMenuItemClick(MenuItem item) { 1850a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira return onOptionsItemSelected(item); 1860a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira } 187052c92af9b70c42a84c989876c513b456d0a500eDmitri Plotnikov 1880a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira private boolean getBasicVisibility() { 189e5179484230da096d6f681eee2f488d582b7fa9fMindy Pereira return mPager != null && mPager.getCurrentItem() == BASIC_PANEL; 1900a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira } 191052c92af9b70c42a84c989876c513b456d0a500eDmitri Plotnikov 1920a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira private boolean getAdvancedVisibility() { 193e5179484230da096d6f681eee2f488d582b7fa9fMindy Pereira return mPager != null && mPager.getCurrentItem() == ADVANCED_PANEL; 194b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project } 195b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 196b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project @Override 197b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project public boolean onOptionsItemSelected(MenuItem item) { 198b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project switch (item.getItemId()) { 1990a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira case R.id.clear_history: 2000a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira mHistory.clear(); 201df54c1ed29f4ca4b8b81c6085e393a4b59034475Mindy Pereira mLogic.onClear(); 2020a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira break; 2030a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira 2040a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira case R.id.basic: 2056702e4b5d52ec458a18ecc1382d020debedb2a8fMindy Pereira if (!getBasicVisibility() && mPager != null) { 20605a16111459d080a310009c1caec18eef07946f2Mindy Pereira mPager.setCurrentItem(BASIC_PANEL, true); 2070a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira } 2080a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira break; 2090a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira 2100a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira case R.id.advanced: 2116702e4b5d52ec458a18ecc1382d020debedb2a8fMindy Pereira if (!getAdvancedVisibility() && mPager != null) { 21205a16111459d080a310009c1caec18eef07946f2Mindy Pereira mPager.setCurrentItem(ADVANCED_PANEL, true); 2130a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira } 2140a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira break; 215b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project } 216b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project return super.onOptionsItemSelected(item); 217b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project } 218b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 219b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project @Override 220cf3ca321fa8cc1f5427454c5e2501b7978bb3711Mihai Preda protected void onSaveInstanceState(Bundle state) { 221cf3ca321fa8cc1f5427454c5e2501b7978bb3711Mihai Preda super.onSaveInstanceState(state); 222353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell if (mPager != null) { 223353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell state.putInt(STATE_CURRENT_VIEW, mPager.getCurrentItem()); 224e2092454e13850c551550db9879fa4fa93218c75Dmitri Plotnikov } 225b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project } 226b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 227b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project @Override 228b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project public void onPause() { 229b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project super.onPause(); 230b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project mLogic.updateHistory(); 2312501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov mPersist.setDeleteMode(mLogic.getDeleteMode()); 232b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project mPersist.save(); 233b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project } 234b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 235bcabcbb48e784ca9e466204b63edd9b0729b5df0Mihai Preda @Override 236bcabcbb48e784ca9e466204b63edd9b0729b5df0Mihai Preda public boolean onKeyDown(int keyCode, KeyEvent keyEvent) { 2376702e4b5d52ec458a18ecc1382d020debedb2a8fMindy Pereira if (keyCode == KeyEvent.KEYCODE_BACK && getAdvancedVisibility() 2386702e4b5d52ec458a18ecc1382d020debedb2a8fMindy Pereira && mPager != null) { 239353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell mPager.setCurrentItem(BASIC_PANEL); 240bcabcbb48e784ca9e466204b63edd9b0729b5df0Mihai Preda return true; 241bcabcbb48e784ca9e466204b63edd9b0729b5df0Mihai Preda } else { 242bcabcbb48e784ca9e466204b63edd9b0729b5df0Mihai Preda return super.onKeyDown(keyCode, keyEvent); 243bcabcbb48e784ca9e466204b63edd9b0729b5df0Mihai Preda } 244bcabcbb48e784ca9e466204b63edd9b0729b5df0Mihai Preda } 245bcabcbb48e784ca9e466204b63edd9b0729b5df0Mihai Preda 246b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project static void log(String message) { 247b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project if (LOG_ENABLED) { 248b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project Log.v(LOG_TAG, message); 249b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project } 250b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project } 2511d3117595c5849929588741c4ded20ceb26e7336Jacek Surazski 252052c92af9b70c42a84c989876c513b456d0a500eDmitri Plotnikov @Override 253052c92af9b70c42a84c989876c513b456d0a500eDmitri Plotnikov public void onChange() { 254052c92af9b70c42a84c989876c513b456d0a500eDmitri Plotnikov invalidateOptionsMenu(); 255052c92af9b70c42a84c989876c513b456d0a500eDmitri Plotnikov } 2562501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov 2572501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov @Override 2582501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov public void onDeleteModeChange() { 2592501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov updateDeleteMode(); 2602501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov } 261353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell 262353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell class PageAdapter extends PagerAdapter { 263353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell private View mSimplePage; 264353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell private View mAdvancedPage; 265353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell 266353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell public PageAdapter(ViewPager parent) { 267353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell final LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 268353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell final View simplePage = inflater.inflate(R.layout.simple_pad, parent, false); 269353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell final View advancedPage = inflater.inflate(R.layout.advanced_pad, parent, false); 270353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell mSimplePage = simplePage; 271353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell mAdvancedPage = advancedPage; 272353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell 273353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell final Resources res = getResources(); 274353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell final TypedArray simpleButtons = res.obtainTypedArray(R.array.simple_buttons); 275353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell for (int i = 0; i < simpleButtons.length(); i++) { 276353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell setOnClickListener(simplePage, simpleButtons.getResourceId(i, 0)); 277353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell } 278353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell simpleButtons.recycle(); 279353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell 280353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell final TypedArray advancedButtons = res.obtainTypedArray(R.array.advanced_buttons); 281353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell for (int i = 0; i < advancedButtons.length(); i++) { 282353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell setOnClickListener(advancedPage, advancedButtons.getResourceId(i, 0)); 283353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell } 284353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell advancedButtons.recycle(); 285353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell 286353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell final View clearButton = simplePage.findViewById(R.id.clear); 287353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell if (clearButton != null) { 288353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell mClearButton = clearButton; 289353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell } 290353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell 291353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell final View backspaceButton = simplePage.findViewById(R.id.del); 292353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell if (backspaceButton != null) { 293353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell mBackspaceButton = backspaceButton; 294353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell } 295353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell } 296353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell 297353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell @Override 298353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell public int getCount() { 299353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell return 2; 300353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell } 301353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell 302353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell @Override 303353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell public void startUpdate(View container) { 304353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell } 305353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell 306353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell @Override 307353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell public Object instantiateItem(View container, int position) { 308353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell final View page = position == 0 ? mSimplePage : mAdvancedPage; 309353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell ((ViewGroup) container).addView(page); 310353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell return page; 311353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell } 312353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell 313353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell @Override 314353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell public void destroyItem(View container, int position, Object object) { 315353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell ((ViewGroup) container).removeView((View) object); 316353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell } 317353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell 318353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell @Override 319353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell public void finishUpdate(View container) { 320353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell } 321353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell 322353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell @Override 323353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell public boolean isViewFromObject(View view, Object object) { 324353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell return view == object; 325353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell } 326353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell 327353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell @Override 328353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell public Parcelable saveState() { 329353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell return null; 330353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell } 331353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell 332353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell @Override 333353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell public void restoreState(Parcelable state, ClassLoader loader) { 334353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell } 335353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell } 336b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project} 337