history activity
This commit is contained in:
parent
59ddbb7ee0
commit
40d37934c8
@ -23,6 +23,9 @@
|
||||
<activity a:name=".CalculatorPreferencesActivity"
|
||||
a:label="@string/c_app_settings"/>
|
||||
|
||||
<activity a:name=".CalculatorHistoryActivity"
|
||||
a:label="@string/c_app_history"/>
|
||||
|
||||
<activity a:name=".AboutActivity"
|
||||
a:label="@string/c_about"/>
|
||||
|
||||
|
@ -17,12 +17,24 @@
|
||||
|
||||
<LinearLayout a:layout_weight="1" a:layout_width="match_parent" a:layout_height="0dp">
|
||||
|
||||
<include layout="@layout/calc_left_button"
|
||||
<org.solovyev.android.view.widgets.DirectionDragButton xmlns:a="http://schemas.android.com/apk/res/android"
|
||||
xmlns:calc="http://schemas.android.com/apk/res/org.solovyev.android.calculator"
|
||||
a:id="@+id/leftButton"
|
||||
calc:textUp="↞"
|
||||
a:text="←"
|
||||
style="@style/control_button_style"
|
||||
a:onClick="moveLeftButtonClickHandler"
|
||||
a:layout_width="match_parent"
|
||||
a:layout_height="match_parent"
|
||||
a:layout_weight="1.5"/>
|
||||
|
||||
<include layout="@layout/calc_erase_button"
|
||||
|
||||
<org.solovyev.android.view.widgets.ColorButton xmlns:a="http://schemas.android.com/apk/res/android"
|
||||
xmlns:calc="http://schemas.android.com/apk/res/org.solovyev.android.calculator"
|
||||
a:id="@+id/eraseButton"
|
||||
a:drawableTop="@drawable/sym_keyboard_delete"
|
||||
style="@style/control_image_button_style"
|
||||
a:onClick="eraseButtonClickHandler"
|
||||
a:layout_width="match_parent"
|
||||
a:layout_height="match_parent"
|
||||
a:layout_weight="1.5"/>
|
||||
@ -33,12 +45,24 @@
|
||||
a:layout_height="match_parent"
|
||||
a:layout_weight="1"/>
|
||||
|
||||
<include layout="@layout/calc_clear_button"
|
||||
<org.solovyev.android.view.widgets.ColorButton xmlns:a="http://schemas.android.com/apk/res/android"
|
||||
xmlns:calc="http://schemas.android.com/apk/res/org.solovyev.android.calculator"
|
||||
a:id="@+id/clearButton"
|
||||
a:text="@string/c_clear"
|
||||
a:textStyle="bold"
|
||||
style="@style/control_image_button_style"
|
||||
a:onClick="clearButtonClickHandler"
|
||||
a:layout_width="match_parent"
|
||||
a:layout_height="match_parent"
|
||||
a:layout_weight="1.5"/>
|
||||
|
||||
<include layout="@layout/calc_right_button"
|
||||
<org.solovyev.android.view.widgets.DirectionDragButton xmlns:a="http://schemas.android.com/apk/res/android"
|
||||
xmlns:calc="http://schemas.android.com/apk/res/org.solovyev.android.calculator"
|
||||
a:id="@+id/rightButton"
|
||||
calc:textUp="↠"
|
||||
a:text="→"
|
||||
style="@style/control_button_style"
|
||||
a:onClick="moveRightButtonClickHandler"
|
||||
a:layout_width="match_parent"
|
||||
a:layout_height="match_parent"
|
||||
a:layout_weight="1.5"/>
|
||||
|
@ -8,7 +8,10 @@
|
||||
<org.solovyev.android.view.widgets.DirectionDragButton xmlns:a="http://schemas.android.com/apk/res/android"
|
||||
xmlns:calc="http://schemas.android.com/apk/res/org.solovyev.android.calculator"
|
||||
a:id="@+id/historyButton"
|
||||
a:text=""
|
||||
a:text="@string/c_history_button"
|
||||
calc:textUp="@string/c_undo"
|
||||
calc:textDown="@string/c_redo"
|
||||
style="@style/control_button_style"/>
|
||||
style="@style/control_button_style"
|
||||
a:textSize="18dp"
|
||||
a:textStyle="bold"
|
||||
a:onClick="historyButtonClickHandler"/>
|
29
res/layout/history.xml
Normal file
29
res/layout/history.xml
Normal file
@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!--
|
||||
~ Copyright (c) 2009-2011. Created by serso aka se.solovyev.
|
||||
~ For more information, please, contact se.solovyev@gmail.com
|
||||
~ or visit http://se.solovyev.org
|
||||
-->
|
||||
|
||||
<LinearLayout xmlns:a="http://schemas.android.com/apk/res/android"
|
||||
a:orientation="vertical"
|
||||
a:layout_width="match_parent"
|
||||
a:layout_height="match_parent">
|
||||
|
||||
<TextView a:id="@+id/history_time"
|
||||
a:layout_width="match_parent"
|
||||
a:layout_height="match_parent"
|
||||
a:textColor="@android:color/white"
|
||||
a:paddingLeft="6dp"
|
||||
a:paddingRight="6dp"
|
||||
a:textStyle="bold"/>
|
||||
|
||||
<TextView a:id="@+id/history_item"
|
||||
a:layout_width="match_parent"
|
||||
a:layout_height="match_parent"
|
||||
a:paddingBottom="6dp"
|
||||
a:paddingLeft="6dp"
|
||||
a:paddingRight="6dp"/>
|
||||
|
||||
</LinearLayout>
|
20
res/layout/history_activity.xml
Normal file
20
res/layout/history_activity.xml
Normal file
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!--
|
||||
~ Copyright (c) 2009-2011. Created by serso aka se.solovyev.
|
||||
~ For more information, please, contact se.solovyev@gmail.com
|
||||
~ or visit http://se.solovyev.org
|
||||
-->
|
||||
|
||||
<LinearLayout xmlns:a="http://schemas.android.com/apk/res/android"
|
||||
a:orientation="vertical"
|
||||
a:layout_width="match_parent"
|
||||
a:layout_height="match_parent">
|
||||
|
||||
<ListView
|
||||
a:layout_width="match_parent"
|
||||
a:layout_height="match_parent"
|
||||
a:layout_weight="1"
|
||||
a:id="@android:id/list"/>
|
||||
|
||||
</LinearLayout>
|
@ -20,6 +20,7 @@
|
||||
a:layout_width="match_parent"
|
||||
a:layout_height="match_parent"
|
||||
a:textSize="20dp"
|
||||
a:textColor="@android:color/white"
|
||||
a:paddingBottom="3dp"
|
||||
a:paddingLeft="6dp"
|
||||
a:paddingRight="6dp"
|
||||
|
@ -5,6 +5,9 @@
|
||||
<item a:id="@+id/main_menu_item_settings"
|
||||
a:title="@string/c_settings"/>
|
||||
|
||||
<item a:id="@+id/main_menu_item_history"
|
||||
a:title="@string/c_history"/>
|
||||
|
||||
<item a:id="@+id/main_menu_item_about"
|
||||
a:title="@string/c_about"/>
|
||||
|
||||
|
@ -70,4 +70,9 @@
|
||||
http://paypal.com</a>\n
|
||||
</string>
|
||||
|
||||
<string name="c_history">История</string>
|
||||
<string name="c_history_button">M</string>
|
||||
<string name="c_history_is_empty">История пуста!</string>
|
||||
<string name="c_app_history">История</string>
|
||||
|
||||
</resources>
|
||||
|
@ -70,4 +70,8 @@
|
||||
<string name="c_donate_text">You can thank the author of this program by email\n\n
|
||||
<a href="mailto:se.solovyev@gmail.com">se.solovyev@gmail.com</a>\n\n
|
||||
or donate money via\n\n<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=se%2esolovyev%40gmail%2ecom&lc=RU&item_name=Android%20Calculator&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted">http://paypal.com</a>\n</string>
|
||||
<string name="c_history">History</string>
|
||||
<string name="c_history_button">M</string>
|
||||
<string name="c_history_is_empty">History is empty!</string>
|
||||
<string name="c_app_history">History</string>
|
||||
</resources>
|
||||
|
@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Copyright (c) 2009-2011. Created by serso aka se.solovyev.
|
||||
* For more information, please, contact se.solovyev@gmail.com
|
||||
* or visit http://se.solovyev.org
|
||||
*/
|
||||
|
||||
package org.solovyev.android.calculator;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* User: serso
|
||||
* Date: 10/15/11
|
||||
* Time: 1:45 PM
|
||||
*/
|
||||
public class AbstractHistoryState {
|
||||
|
||||
@NotNull
|
||||
private final Date time = new Date();
|
||||
|
||||
@NotNull
|
||||
public Date getTime() {
|
||||
return time;
|
||||
}
|
||||
}
|
@ -37,6 +37,10 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
|
||||
public static final String INSERT_TEXT_INTENT = "org.solovyev.android.calculator.CalculatorActivity.insertText";
|
||||
public static final String INSERT_TEXT_INTENT_EXTRA_STRING = "org.solovyev.android.calculator.CalculatorActivity.insertText.extraString";
|
||||
|
||||
public static final String SET_TEXT_INTENT = "org.solovyev.android.calculator.CalculatorActivity.setText";
|
||||
public static final String SET_TEXT_INTENT_EXTRA_STRING = "org.solovyev.android.calculator.CalculatorActivity.settText.extraString";
|
||||
|
||||
|
||||
private static final int HVGA_WIDTH_PIXELS = 320;
|
||||
|
||||
@NotNull
|
||||
@ -46,7 +50,7 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
|
||||
private CalculatorView calculatorView;
|
||||
|
||||
@NotNull
|
||||
private BroadcastReceiver insertTextReceiver;
|
||||
private BroadcastReceiver textReceiver;
|
||||
|
||||
private volatile boolean initialized;
|
||||
|
||||
@ -106,7 +110,7 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
|
||||
|
||||
calculatorView = new CalculatorView(this, CalculatorModel.instance);
|
||||
|
||||
insertTextReceiver = new BroadcastReceiver() {
|
||||
textReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
if (INSERT_TEXT_INTENT.equals(intent.getAction())) {
|
||||
@ -119,11 +123,22 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
|
||||
}
|
||||
});
|
||||
}
|
||||
} else if (SET_TEXT_INTENT.equals(intent.getAction())) {
|
||||
final String s = intent.getStringExtra(SET_TEXT_INTENT_EXTRA_STRING);
|
||||
if (!StringUtils.isEmpty(s)) {
|
||||
calculatorView.doTextOperation(new CalculatorView.TextOperation() {
|
||||
@Override
|
||||
public void doOperation(@NotNull EditText editor) {
|
||||
editor.setText(s);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
registerReceiver(insertTextReceiver, new IntentFilter(INSERT_TEXT_INTENT));
|
||||
registerReceiver(textReceiver, new IntentFilter(INSERT_TEXT_INTENT));
|
||||
registerReceiver(textReceiver, new IntentFilter(SET_TEXT_INTENT));
|
||||
}
|
||||
|
||||
private synchronized void firstTimeInit() {
|
||||
@ -140,7 +155,7 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
unregisterReceiver(insertTextReceiver);
|
||||
unregisterReceiver(textReceiver);
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
@ -154,6 +169,11 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
|
||||
this.calculatorView.evaluate();
|
||||
}
|
||||
|
||||
@SuppressWarnings({"UnusedDeclaration"})
|
||||
public void historyButtonClickHandler(@NotNull View v) {
|
||||
this.showHistory();
|
||||
}
|
||||
|
||||
@SuppressWarnings({"UnusedDeclaration"})
|
||||
public void eraseButtonClickHandler(@NotNull View v) {
|
||||
calculatorView.doTextOperation(new CalculatorView.TextOperation() {
|
||||
@ -267,6 +287,10 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
|
||||
showSettings();
|
||||
result = true;
|
||||
break;
|
||||
case R.id.main_menu_item_history:
|
||||
showHistory();
|
||||
result = true;
|
||||
break;
|
||||
case R.id.main_menu_item_about:
|
||||
showAbout();
|
||||
result = true;
|
||||
@ -282,6 +306,10 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
|
||||
return result;
|
||||
}
|
||||
|
||||
private void showHistory() {
|
||||
startActivity(new Intent(this, CalculatorHistoryActivity.class));
|
||||
}
|
||||
|
||||
private void showSettings() {
|
||||
startActivity(new Intent(this, CalculatorPreferencesActivity.class));
|
||||
}
|
||||
|
@ -42,6 +42,7 @@ public class CalculatorDisplayHistoryState {
|
||||
this.valid = valid;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public EditorHistoryState getEditorHistoryState() {
|
||||
return editorHistoryState;
|
||||
}
|
||||
|
@ -12,6 +12,8 @@ import org.solovyev.common.utils.history.HistoryAction;
|
||||
import org.solovyev.common.utils.history.HistoryHelper;
|
||||
import org.solovyev.common.utils.history.SimpleHistoryHelper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* User: serso
|
||||
* Date: 10/9/11
|
||||
@ -68,5 +70,9 @@ public enum CalculatorHistory implements HistoryHelper<CalculatorHistoryState> {
|
||||
historyHelper.addState(currentState);
|
||||
}
|
||||
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public List<CalculatorHistoryState> getStates() {
|
||||
return historyHelper.getStates();
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Copyright (c) 2009-2011. Created by serso aka se.solovyev.
|
||||
* For more information, please, contact se.solovyev@gmail.com
|
||||
* or visit http://se.solovyev.org
|
||||
*/
|
||||
|
||||
package org.solovyev.android.calculator;
|
||||
|
||||
import android.app.ListActivity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.*;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.solovyev.common.utils.Filter;
|
||||
import org.solovyev.common.utils.FilterRule;
|
||||
import org.solovyev.common.utils.FilterRulesChain;
|
||||
import org.solovyev.common.utils.StringUtils;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* User: serso
|
||||
* Date: 10/15/11
|
||||
* Time: 1:13 PM
|
||||
*/
|
||||
public class CalculatorHistoryActivity extends ListActivity {
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
setContentView(R.layout.history_activity);
|
||||
|
||||
final List<CalculatorHistoryState> historyList = getHistoryList();
|
||||
if ( historyList.isEmpty() ) {
|
||||
Toast.makeText(this, R.string.c_history_is_empty, Toast.LENGTH_SHORT).show();
|
||||
this.finish();
|
||||
}
|
||||
|
||||
setListAdapter(new HistoryArrayAdapter(this, R.layout.history, R.id.history_item, historyList));
|
||||
|
||||
final ListView lv = getListView();
|
||||
lv.setTextFilterEnabled(true);
|
||||
|
||||
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
||||
public void onItemClick(AdapterView<?> parent, View view,
|
||||
int position, long id) {
|
||||
final Intent intent = new Intent(CalculatorActivity.SET_TEXT_INTENT);
|
||||
intent.putExtra(CalculatorActivity.SET_TEXT_INTENT_EXTRA_STRING, ((CalculatorHistoryState) parent.getItemAtPosition(position)).getEditorState().getText());
|
||||
sendOrderedBroadcast(intent, null);
|
||||
|
||||
CalculatorHistoryActivity.this.finish();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static List<CalculatorHistoryState> getHistoryList() {
|
||||
final List<CalculatorHistoryState> calculatorHistoryStates = new ArrayList<CalculatorHistoryState>(CalculatorHistory.instance.getStates());
|
||||
|
||||
final FilterRulesChain<CalculatorHistoryState> filterRulesChain = new FilterRulesChain<CalculatorHistoryState>();
|
||||
filterRulesChain.addFilterRule(new FilterRule<CalculatorHistoryState>() {
|
||||
@Override
|
||||
public boolean isFiltered(CalculatorHistoryState object) {
|
||||
return object == null || StringUtils.isEmpty(object.getEditorState().getText());
|
||||
}
|
||||
});
|
||||
|
||||
new Filter<CalculatorHistoryState>(filterRulesChain).filter(calculatorHistoryStates.iterator());
|
||||
|
||||
return calculatorHistoryStates;
|
||||
}
|
||||
|
||||
private static class HistoryArrayAdapter extends ArrayAdapter<CalculatorHistoryState> {
|
||||
|
||||
private HistoryArrayAdapter(Context context, int resource, int textViewResourceId, @NotNull List<CalculatorHistoryState> historyList) {
|
||||
super(context, resource, textViewResourceId, historyList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
final ViewGroup result = (ViewGroup) super.getView(position, convertView, parent);
|
||||
|
||||
final CalculatorHistoryState state = getItem(position);
|
||||
|
||||
final TextView time = (TextView) result.findViewById(R.id.history_time);
|
||||
time.setText(new SimpleDateFormat().format(state.getTime()));
|
||||
|
||||
final TextView editor = (TextView) result.findViewById(R.id.history_item);
|
||||
editor.setText(state.getEditorState().getText() + "=" + state.getDisplayState().getEditorHistoryState().getText());
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
@ -12,7 +12,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
* Date: 9/11/11
|
||||
* Time: 12:16 AM
|
||||
*/
|
||||
public class CalculatorHistoryState {
|
||||
public class CalculatorHistoryState extends AbstractHistoryState{
|
||||
|
||||
@NotNull
|
||||
private EditorHistoryState editorState;
|
||||
@ -20,7 +20,8 @@ public class CalculatorHistoryState {
|
||||
@NotNull
|
||||
private CalculatorDisplayHistoryState displayState;
|
||||
|
||||
public CalculatorHistoryState(@NotNull EditorHistoryState editorState, @NotNull CalculatorDisplayHistoryState displayState) {
|
||||
public CalculatorHistoryState(@NotNull EditorHistoryState editorState,
|
||||
@NotNull CalculatorDisplayHistoryState displayState) {
|
||||
this.editorState = editorState;
|
||||
this.displayState = displayState;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user