blob: ff2cc655173a29d8427441047386fc9331f3ba6f [file] [log] [blame]
/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.calculator2;
import android.widget.BaseAdapter;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.util.Vector;
class History {
private static final int VERSION_1 = 1;
private static final int MAX_ENTRIES = 100;
Vector<HistoryEntry> mEntries = new Vector<HistoryEntry>();
int mPos;
BaseAdapter mObserver;
History() {
clear();
}
History(int version, DataInput in) throws IOException {
if (version >= VERSION_1) {
int size = in.readInt();
for (int i = 0; i < size; ++i) {
mEntries.add(new HistoryEntry(version, in));
}
mPos = in.readInt();
} else {
throw new IOException("invalid version " + version);
}
}
void setObserver(BaseAdapter observer) {
mObserver = observer;
}
private void notifyChanged() {
if (mObserver != null) {
mObserver.notifyDataSetChanged();
}
}
void clear() {
mEntries.clear();
mEntries.add(new HistoryEntry(""));
mPos = 0;
notifyChanged();
}
void write(DataOutput out) throws IOException {
out.writeInt(mEntries.size());
for (HistoryEntry entry : mEntries) {
entry.write(out);
}
out.writeInt(mPos);
}
void update(String text) {
current().setEdited(text);
}
boolean moveToPrevious() {
if (mPos > 0) {
--mPos;
return true;
}
return false;
}
boolean moveToNext() {
if (mPos < mEntries.size() - 1) {
++mPos;
return true;
}
return false;
}
void enter(String text) {
current().clearEdited();
if (mEntries.size() >= MAX_ENTRIES) {
mEntries.remove(0);
}
if (mEntries.size() < 2 ||
!text.equals(mEntries.elementAt(mEntries.size() - 2).getBase())) {
mEntries.insertElementAt(new HistoryEntry(text), mEntries.size() - 1);
}
mPos = mEntries.size() - 1;
notifyChanged();
}
HistoryEntry current() {
return mEntries.elementAt(mPos);
}
String getText() {
return current().getEdited();
}
String getBase() {
return current().getBase();
}
}