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