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);
175f73af2f3b387b98e9a3ec178e9b41a49984a0d5dAlan Viverette        mOverflowMenuButton.setOnTouchListener(popupMenu.getDragToOpenListener());
1760a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira        final Menu menu = popupMenu.getMenu();
1770a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira        popupMenu.inflate(R.menu.menu);
1780a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira        popupMenu.setOnMenuItemClickListener(this);
1790a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira        onPrepareOptionsMenu(menu);
1800a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira        return popupMenu;
1810a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira    }
1820a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira
1830a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira
184b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project    @Override
1850a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira    public boolean onMenuItemClick(MenuItem item) {
1860a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira        return onOptionsItemSelected(item);
1870a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira    }
188052c92af9b70c42a84c989876c513b456d0a500eDmitri Plotnikov
1890a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira    private boolean getBasicVisibility() {
190e5179484230da096d6f681eee2f488d582b7fa9fMindy Pereira        return mPager != null && mPager.getCurrentItem() == BASIC_PANEL;
1910a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira    }
192052c92af9b70c42a84c989876c513b456d0a500eDmitri Plotnikov
1930a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira    private boolean getAdvancedVisibility() {
194e5179484230da096d6f681eee2f488d582b7fa9fMindy Pereira        return mPager != null && mPager.getCurrentItem() == ADVANCED_PANEL;
195b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project    }
196b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project
197b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project    @Override
198b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project    public boolean onOptionsItemSelected(MenuItem item) {
199b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project        switch (item.getItemId()) {
2000a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira            case R.id.clear_history:
2010a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira                mHistory.clear();
202df54c1ed29f4ca4b8b81c6085e393a4b59034475Mindy Pereira                mLogic.onClear();
2030a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira                break;
2040a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira
2050a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira            case R.id.basic:
2066702e4b5d52ec458a18ecc1382d020debedb2a8fMindy Pereira                if (!getBasicVisibility() && mPager != null) {
20705a16111459d080a310009c1caec18eef07946f2Mindy Pereira                    mPager.setCurrentItem(BASIC_PANEL, true);
2080a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira                }
2090a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira                break;
2100a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira
2110a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira            case R.id.advanced:
2126702e4b5d52ec458a18ecc1382d020debedb2a8fMindy Pereira                if (!getAdvancedVisibility() && mPager != null) {
21305a16111459d080a310009c1caec18eef07946f2Mindy Pereira                    mPager.setCurrentItem(ADVANCED_PANEL, true);
2140a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira                }
2150a1148f5ac3a09c3a2bf6cb50b50a900f370853dMindy Pereira                break;
216b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project        }
217b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project        return super.onOptionsItemSelected(item);
218b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project    }
219b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project
220b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project    @Override
221cf3ca321fa8cc1f5427454c5e2501b7978bb3711Mihai Preda    protected void onSaveInstanceState(Bundle state) {
222cf3ca321fa8cc1f5427454c5e2501b7978bb3711Mihai Preda        super.onSaveInstanceState(state);
223353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        if (mPager != null) {
224353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            state.putInt(STATE_CURRENT_VIEW, mPager.getCurrentItem());
225e2092454e13850c551550db9879fa4fa93218c75Dmitri Plotnikov        }
226b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project    }
227b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project
228b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project    @Override
229b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project    public void onPause() {
230b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project        super.onPause();
231b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project        mLogic.updateHistory();
2322501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov        mPersist.setDeleteMode(mLogic.getDeleteMode());
233b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project        mPersist.save();
234b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project    }
235b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project
236bcabcbb48e784ca9e466204b63edd9b0729b5df0Mihai Preda    @Override
237bcabcbb48e784ca9e466204b63edd9b0729b5df0Mihai Preda    public boolean onKeyDown(int keyCode, KeyEvent keyEvent) {
2386702e4b5d52ec458a18ecc1382d020debedb2a8fMindy Pereira        if (keyCode == KeyEvent.KEYCODE_BACK && getAdvancedVisibility()
2396702e4b5d52ec458a18ecc1382d020debedb2a8fMindy Pereira                && mPager != null) {
240353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            mPager.setCurrentItem(BASIC_PANEL);
241bcabcbb48e784ca9e466204b63edd9b0729b5df0Mihai Preda            return true;
242bcabcbb48e784ca9e466204b63edd9b0729b5df0Mihai Preda        } else {
243bcabcbb48e784ca9e466204b63edd9b0729b5df0Mihai Preda            return super.onKeyDown(keyCode, keyEvent);
244bcabcbb48e784ca9e466204b63edd9b0729b5df0Mihai Preda        }
245bcabcbb48e784ca9e466204b63edd9b0729b5df0Mihai Preda    }
246bcabcbb48e784ca9e466204b63edd9b0729b5df0Mihai Preda
247b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project    static void log(String message) {
248b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project        if (LOG_ENABLED) {
249b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project            Log.v(LOG_TAG, message);
250b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project        }
251b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project    }
2521d3117595c5849929588741c4ded20ceb26e7336Jacek Surazski
253052c92af9b70c42a84c989876c513b456d0a500eDmitri Plotnikov    @Override
254052c92af9b70c42a84c989876c513b456d0a500eDmitri Plotnikov    public void onChange() {
255052c92af9b70c42a84c989876c513b456d0a500eDmitri Plotnikov        invalidateOptionsMenu();
256052c92af9b70c42a84c989876c513b456d0a500eDmitri Plotnikov    }
2572501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov
2582501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov    @Override
2592501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov    public void onDeleteModeChange() {
2602501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov        updateDeleteMode();
2612501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov    }
262353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell
263353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell    class PageAdapter extends PagerAdapter {
264353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        private View mSimplePage;
265353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        private View mAdvancedPage;
266353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell
267353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        public PageAdapter(ViewPager parent) {
268353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            final LayoutInflater inflater = LayoutInflater.from(parent.getContext());
269353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            final View simplePage = inflater.inflate(R.layout.simple_pad, parent, false);
270353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            final View advancedPage = inflater.inflate(R.layout.advanced_pad, parent, false);
271353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            mSimplePage = simplePage;
272353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            mAdvancedPage = advancedPage;
273353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell
274353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            final Resources res = getResources();
275353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            final TypedArray simpleButtons = res.obtainTypedArray(R.array.simple_buttons);
276353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            for (int i = 0; i < simpleButtons.length(); i++) {
277353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell                setOnClickListener(simplePage, simpleButtons.getResourceId(i, 0));
278353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            }
279353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            simpleButtons.recycle();
280353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell
281353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            final TypedArray advancedButtons = res.obtainTypedArray(R.array.advanced_buttons);
282353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            for (int i = 0; i < advancedButtons.length(); i++) {
283353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell                setOnClickListener(advancedPage, advancedButtons.getResourceId(i, 0));
284353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            }
285353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            advancedButtons.recycle();
286353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell
287353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            final View clearButton = simplePage.findViewById(R.id.clear);
288353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            if (clearButton != null) {
289353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell                mClearButton = clearButton;
290353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            }
291353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell
292353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            final View backspaceButton = simplePage.findViewById(R.id.del);
293353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            if (backspaceButton != null) {
294353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell                mBackspaceButton = backspaceButton;
295353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            }
296353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        }
297353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell
298353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        @Override
299353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        public int getCount() {
300353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            return 2;
301353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        }
302353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell
303353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        @Override
304353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        public void startUpdate(View container) {
305353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        }
306353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell
307353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        @Override
308353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        public Object instantiateItem(View container, int position) {
309353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            final View page = position == 0 ? mSimplePage : mAdvancedPage;
310353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            ((ViewGroup) container).addView(page);
311353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            return page;
312353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        }
313353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell
314353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        @Override
315353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        public void destroyItem(View container, int position, Object object) {
316353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            ((ViewGroup) container).removeView((View) object);
317353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        }
318353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell
319353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        @Override
320353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        public void finishUpdate(View container) {
321353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        }
322353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell
323353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        @Override
324353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        public boolean isViewFromObject(View view, Object object) {
325353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            return view == object;
326353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        }
327353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell
328353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        @Override
329353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        public Parcelable saveState() {
330353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell            return null;
331353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        }
332353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell
333353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        @Override
334353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        public void restoreState(Parcelable state, ClassLoader loader) {
335353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell        }
336353efcf389f91927b825a1d2db18c6b6e616f25bAdam Powell    }
337b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project}
338