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 java.io.InputStream;
20b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport java.io.OutputStream;
21b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport java.io.IOException;
22b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport java.io.FileNotFoundException;
23b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport java.io.BufferedInputStream;
24b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport java.io.BufferedOutputStream;
25b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport java.io.DataInputStream;
26b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport java.io.DataOutputStream;
27b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project
28b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport android.content.Context;
29b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project
30b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectclass Persist {
312501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov    private static final int LAST_VERSION = 2;
32b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project    private static final String FILE_NAME = "calculator.data";
33b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project    private Context mContext;
34b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project
35b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project    History history = new History();
362501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov    private int mDeleteMode;
37b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project
38b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project    Persist(Context context) {
39b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project        this.mContext = context;
40b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project    }
41b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project
422501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov    public void setDeleteMode(int mode) {
432501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov        mDeleteMode = mode;
442501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov    }
452501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov
462501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov    public int getDeleteMode() {
472501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov        return mDeleteMode;
482501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov    }
492501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov
502501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov    public void load() {
51b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project        try {
52b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project            InputStream is = new BufferedInputStream(mContext.openFileInput(FILE_NAME), 8192);
53b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project            DataInputStream in = new DataInputStream(is);
54b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project            int version = in.readInt();
552501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov            if (version > 1) {
562501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov                mDeleteMode = in.readInt();
572501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov            } else if (version > LAST_VERSION) {
58b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project                throw new IOException("data version " + version + "; expected " + LAST_VERSION);
59b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project            }
60b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project            history = new History(version, in);
61b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project            in.close();
62b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project        } catch (FileNotFoundException e) {
63b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project            Calculator.log("" + e);
64b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project        } catch (IOException e) {
65b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project            Calculator.log("" + e);
66b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project        }
67b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project    }
68b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project
692501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov    public void save() {
70b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project        try {
71b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project            OutputStream os = new BufferedOutputStream(mContext.openFileOutput(FILE_NAME, 0), 8192);
72b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project            DataOutputStream out = new DataOutputStream(os);
73b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project            out.writeInt(LAST_VERSION);
742501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov            out.writeInt(mDeleteMode);
75b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project            history.write(out);
76b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project            out.close();
77b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project        } catch (IOException e) {
78b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project            Calculator.log("" + e);
792501811e0d216bce30ce01823ed1a8191333d4c1Dmitri Plotnikov        }
80b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project    }
81b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project}
82