// Path: app/src/main/java/com/gigabytedevelopersinc/app/calculator/History.java
// public class History {
//     private static final int VERSION_1 = 1;
//     private static final int MAX_ENTRIES = 100;
//     Vector<HistoryEntry> mEntries = new Vector<>();
//     private int mPos;
//     private 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 base, String edited) {
//         current().clearEdited();
//         if(mEntries.size() >= MAX_ENTRIES) {
//             mEntries.remove(0);
//         }
//         if((mEntries.size() < 2 || !base.equals(mEntries.elementAt(mEntries.size() - 2).getBase())) && !base.isEmpty() && !edited.isEmpty()) {
//             mEntries.insertElementAt(new HistoryEntry(base, edited), mEntries.size() - 1);
//         }
//         mPos = mEntries.size() - 1;
//         notifyChanged();
//     }
// 
//     private HistoryEntry current() {
//         return mEntries.elementAt(mPos);
//     }
// 
//     String getText() {
//         return current().getEdited();
//     }
// 
//     String getBase() {
//         return current().getBase();
//     }
// 
//     public void remove(HistoryEntry he) {
//         mEntries.remove(he);
//         mPos--;
//     }
// }
// 
// Path: app/src/main/java/com/gigabytedevelopersinc/app/calculator/HistoryEntry.java
// public class HistoryEntry {
//     private static final int VERSION_1 = 1;
//     private String mBase;
//     private String mEdited;
// 
//     HistoryEntry(String base, String edited) {
//         mBase = base;
//         mEdited = edited;
//     }
// 
//     HistoryEntry(int version, DataInput in) throws IOException {
//         if(version >= VERSION_1) {
//             mBase = in.readUTF();
//             mEdited = in.readUTF();
//         }
//         else {
//             throw new IOException("invalid version " + version);
//         }
//     }
// 
//     void write(DataOutput out) throws IOException {
//         out.writeUTF(mBase);
//         out.writeUTF(mEdited);
//     }
// 
//     @Override
//     public String toString() {
//         return mBase;
//     }
// 
//     void clearEdited() {
//         mEdited = mBase;
//     }
// 
//     public String getEdited() {
//         return mEdited;
//     }
// 
//     void setEdited(String edited) {
//         mEdited = edited;
//     }
// 
//     public String getBase() {
//         return mBase;
//     }
// }


import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.res.Resources;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.Toast;
import com.gigabytedevelopersinc.app.calculator.History;
import com.gigabytedevelopersinc.app.calculator.HistoryEntry;
import com.gigabytedevelopersinc.app.calculator.R;
    }

    public boolean onTextContextMenuItem(CharSequence title) {
        boolean handled = false;
        if(TextUtils.equals(title, mMenuItemsStrings[COPY])) {
            copyContent(mHistoryEntry.getBase() + "=" + mHistoryEntry.getEdited());
            handled = true;
        }
        else if(TextUtils.equals(title, mMenuItemsStrings[COPY_BASE])) {
            copyContent(mHistoryEntry.getBase());
            handled = true;
        }
        else if(TextUtils.equals(title, mMenuItemsStrings[COPY_EDITED])) {
            copyContent(mHistoryEntry.getEdited());
            handled = true;
        }
        else if(TextUtils.equals(title, mMenuItemsStrings[REMOVE])) {
            removeContent();
            handled = true;
        }
        return handled;
    }

    public void copyContent(String content) {
        ClipboardManager clipboard = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
        clipboard.setPrimaryClip(ClipData.newPlainText(null, content));
        String toastText = String.format(getResources().getString(R.string.text_copied_toast), content);
        Toast.makeText(getContext(), toastText, Toast.LENGTH_SHORT).show();
    }

// Path: app/src/main/java/com/gigabytedevelopersinc/app/calculator/History.java
// public class History {
//     private static final int VERSION_1 = 1;
//     private static final int MAX_ENTRIES = 100;
//     Vector<HistoryEntry> mEntries = new Vector<>();
//     private int mPos;
//     private 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 base, String edited) {
//         current().clearEdited();
//         if(mEntries.size() >= MAX_ENTRIES) {
//             mEntries.remove(0);
//         }
//         if((mEntries.size() < 2 || !base.equals(mEntries.elementAt(mEntries.size() - 2).getBase())) && !base.isEmpty() && !edited.isEmpty()) {
//             mEntries.insertElementAt(new HistoryEntry(base, edited), mEntries.size() - 1);
//         }
//         mPos = mEntries.size() - 1;
//         notifyChanged();
//     }
// 
//     private HistoryEntry current() {
//         return mEntries.elementAt(mPos);
//     }
// 
//     String getText() {
//         return current().getEdited();
//     }
// 
//     String getBase() {
//         return current().getBase();
//     }
// 
//     public void remove(HistoryEntry he) {
//         mEntries.remove(he);
//         mPos--;
//     }
// }
// 
// Path: app/src/main/java/com/gigabytedevelopersinc/app/calculator/HistoryEntry.java
// public class HistoryEntry {
//     private static final int VERSION_1 = 1;
//     private String mBase;
//     private String mEdited;
// 
//     HistoryEntry(String base, String edited) {
//         mBase = base;
//         mEdited = edited;
//     }
// 
//     HistoryEntry(int version, DataInput in) throws IOException {
//         if(version >= VERSION_1) {
//             mBase = in.readUTF();
//             mEdited = in.readUTF();
//         }
//         else {
//             throw new IOException("invalid version " + version);
//         }
//     }
// 
//     void write(DataOutput out) throws IOException {
//         out.writeUTF(mBase);
//         out.writeUTF(mEdited);
//     }
// 
//     @Override
//     public String toString() {
//         return mBase;
//     }
// 
//     void clearEdited() {
//         mEdited = mBase;
//     }
// 
//     public String getEdited() {
//         return mEdited;
//     }
// 
//     void setEdited(String edited) {
//         mEdited = edited;
//     }
// 
//     public String getBase() {
//         return mBase;
//     }
// }


// Path: app/src/main/java/com/gigabytedevelopersinc/app/calculator/view/HistoryLine.java
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.res.Resources;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.Toast;
import com.gigabytedevelopersinc.app.calculator.History;
import com.gigabytedevelopersinc.app.calculator.HistoryEntry;
import com.gigabytedevelopersinc.app.calculator.R;

    }

    public boolean onTextContextMenuItem(CharSequence title) {
        boolean handled = false;
        if(TextUtils.equals(title, mMenuItemsStrings[COPY])) {
            copyContent(mHistoryEntry.getBase() + "=" + mHistoryEntry.getEdited());
            handled = true;
        }
        else if(TextUtils.equals(title, mMenuItemsStrings[COPY_BASE])) {
            copyContent(mHistoryEntry.getBase());
            handled = true;
        }
        else if(TextUtils.equals(title, mMenuItemsStrings[COPY_EDITED])) {
            copyContent(mHistoryEntry.getEdited());
            handled = true;
        }
        else if(TextUtils.equals(title, mMenuItemsStrings[REMOVE])) {
            removeContent();
            handled = true;
        }
        return handled;
    }

    public void copyContent(String content) {
        ClipboardManager clipboard = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
        clipboard.setPrimaryClip(ClipData.newPlainText(null, content));
        String toastText = String.format(getResources().getString(R.string.text_copied_toast), content);
        Toast.makeText(getContext(), toastText, Toast.LENGTH_SHORT).show();
    }

    private void removeContent() {