FUCK THE INTENTS

This commit is contained in:
serso 2011-10-16 20:28:54 +04:00
parent c718380912
commit 7f33ffd9a1
7 changed files with 43 additions and 87 deletions

View File

@ -16,7 +16,6 @@
<intent-filter> <intent-filter>
<action a:name="android.intent.action.MAIN"/> <action a:name="android.intent.action.MAIN"/>
<category a:name="android.intent.category.LAUNCHER"/> <category a:name="android.intent.category.LAUNCHER"/>
<action a:name="org.solovyev.android.calculator.CalculatorActivity.insertText"/>
</intent-filter> </intent-filter>
</activity> </activity>

View File

@ -26,6 +26,8 @@
a:layout_width="match_parent" a:layout_width="match_parent"
a:layout_gravity="top|center_horizontal" a:layout_gravity="top|center_horizontal"
a:layout_weight="1" a:layout_weight="1"
a:scrollbars="vertical"
a:scrollbarFadeDuration="0"
style="@style/about_style"/> style="@style/about_style"/>
</LinearLayout> </LinearLayout>

View File

@ -7,7 +7,9 @@ package org.solovyev.android.calculator;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.*; import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
@ -26,7 +28,6 @@ import org.solovyev.android.view.FontSizeAdjuster;
import org.solovyev.android.view.widgets.*; import org.solovyev.android.view.widgets.*;
import org.solovyev.common.BooleanMapper; import org.solovyev.common.BooleanMapper;
import org.solovyev.common.utils.Announcer; import org.solovyev.common.utils.Announcer;
import org.solovyev.common.utils.StringUtils;
import org.solovyev.common.utils.history.HistoryAction; import org.solovyev.common.utils.history.HistoryAction;
import java.lang.reflect.Field; import java.lang.reflect.Field;
@ -38,13 +39,6 @@ import java.util.Map;
public class CalculatorActivity extends Activity implements FontSizeAdjuster, SharedPreferences.OnSharedPreferenceChangeListener { public class CalculatorActivity extends Activity implements FontSizeAdjuster, SharedPreferences.OnSharedPreferenceChangeListener {
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; private static final int HVGA_WIDTH_PIXELS = 320;
@NotNull @NotNull
@ -53,9 +47,6 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
@NotNull @NotNull
private CalculatorView calculatorView; private CalculatorView calculatorView;
@NotNull
private BroadcastReceiver textReceiver;
private volatile boolean initialized; private volatile boolean initialized;
@NotNull @NotNull
@ -67,9 +58,6 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
// ids of drag buttons in R.class // ids of drag buttons in R.class
private List<Integer> dragButtonIds = null; private List<Integer> dragButtonIds = null;
@NotNull
private final static Object broadcastReceiverLock = new Object();
/** /**
* Called when the activity is first created. * Called when the activity is first created.
*/ */
@ -85,7 +73,7 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
firstTimeInit(); firstTimeInit();
init(preferences); calculatorView = CalculatorView.instance.init(this, preferences, CalculatorModel.instance);
dpclRegister.clear(); dpclRegister.clear();
@ -166,49 +154,6 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
setTheme(styleId); setTheme(styleId);
} }
private void init(@NotNull SharedPreferences preferences) {
synchronized (broadcastReceiverLock) {
calculatorView = new CalculatorView(this, preferences, CalculatorModel.instance);
}
textReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
synchronized (broadcastReceiverLock) {
Log.d(this.getClass().getName(), "Intent received: " + intent.getAction());
if (INSERT_TEXT_INTENT.equals(intent.getAction())) {
final String s = intent.getStringExtra(INSERT_TEXT_INTENT_EXTRA_STRING);
Log.d(this.getClass().getName(), "Extra data: " + s);
if (!StringUtils.isEmpty(s)) {
calculatorView.doTextOperation(new CalculatorView.TextOperation() {
@Override
public void doOperation(@NotNull EditText editor) {
editor.getText().insert(editor.getSelectionStart(), s);
}
}, false);
}
} else if (SET_TEXT_INTENT.equals(intent.getAction())) {
final String s = intent.getStringExtra(SET_TEXT_INTENT_EXTRA_STRING);
Log.d(this.getClass().getName(), "Extra data: " + s);
if (!StringUtils.isEmpty(s)) {
calculatorView.doTextOperation(new CalculatorView.TextOperation() {
@Override
public void doOperation(@NotNull EditText editor) {
editor.setText(s);
calculatorView.setCursorOnEnd();
}
}, false);
}
}
}
}
};
registerReceiver(textReceiver, new IntentFilter(INSERT_TEXT_INTENT));
registerReceiver(textReceiver, new IntentFilter(SET_TEXT_INTENT));
}
private synchronized void firstTimeInit() { private synchronized void firstTimeInit() {
if (!initialized) { if (!initialized) {
try { try {
@ -220,13 +165,6 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
} }
} }
@Override
protected void onDestroy() {
unregisterReceiver(textReceiver);
super.onDestroy();
}
@SuppressWarnings({"UnusedDeclaration"}) @SuppressWarnings({"UnusedDeclaration"})
public void elementaryButtonClickHandler(@NotNull View v) { public void elementaryButtonClickHandler(@NotNull View v) {
throw new UnsupportedOperationException("Not implemented yet!"); throw new UnsupportedOperationException("Not implemented yet!");
@ -424,9 +362,7 @@ public class CalculatorActivity extends Activity implements FontSizeAdjuster, Sh
restart(); restart();
} }
synchronized (broadcastReceiverLock) { calculatorView = CalculatorView.instance.init(this, preferences, CalculatorModel.instance);
calculatorView = new CalculatorView(this, preferences, CalculatorModel.instance);
}
this.calculatorView.evaluate(); this.calculatorView.evaluate();
} }

View File

@ -8,7 +8,6 @@ package org.solovyev.android.calculator;
import android.app.ListActivity; import android.app.ListActivity;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.view.*; import android.view.*;
import android.widget.*; import android.widget.*;
@ -49,11 +48,21 @@ public class CalculatorHistoryActivity extends ListActivity {
lv.setTextFilterEnabled(true); lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, public void onItemClick(final AdapterView<?> parent,
int position, long id) { final View view,
final Intent intent = new Intent(CalculatorActivity.SET_TEXT_INTENT); final int position,
intent.putExtra(CalculatorActivity.SET_TEXT_INTENT_EXTRA_STRING, ((CalculatorHistoryState) parent.getItemAtPosition(position)).getEditorState().getText()); final long id) {
sendOrderedBroadcast(intent, null);
CalculatorView.instance.doTextOperation(new CalculatorView.TextOperation() {
@Override
public void doOperation(@NotNull EditText editor) {
final EditorHistoryState editorState = ((CalculatorHistoryState) parent.getItemAtPosition(position)).getEditorState();
editor.setText(editorState.getText());
editor.setSelection(editorState.getCursorPosition());
}
}, false);
CalculatorView.instance.setCursorOnEnd();
CalculatorHistoryActivity.this.finish(); CalculatorHistoryActivity.this.finish();
} }

View File

@ -10,7 +10,6 @@ import android.app.AlertDialog;
import android.app.ListActivity; import android.app.ListActivity;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.text.Editable; import android.text.Editable;
import android.text.TextWatcher; import android.text.TextWatcher;
@ -63,11 +62,17 @@ public class CalculatorVarsActivity extends ListActivity {
}); });
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, public void onItemClick(final AdapterView<?> parent,
int position, long id) { final View view,
final Intent intent = new Intent(CalculatorActivity.INSERT_TEXT_INTENT); final int position,
intent.putExtra(CalculatorActivity.INSERT_TEXT_INTENT_EXTRA_STRING, ((Var) parent.getItemAtPosition(position)).getName()); final long id) {
sendOrderedBroadcast(intent, null);
CalculatorView.instance.doTextOperation(new CalculatorView.TextOperation() {
@Override
public void doOperation(@NotNull EditText editor) {
editor.getText().insert(editor.getSelectionStart(), ((Var) parent.getItemAtPosition(position)).getName());
}
}, false);
CalculatorVarsActivity.this.finish(); CalculatorVarsActivity.this.finish();
} }

View File

@ -33,21 +33,23 @@ import org.solovyev.common.utils.history.HistoryAction;
* Date: 9/12/11 * Date: 9/12/11
* Time: 11:15 PM * Time: 11:15 PM
*/ */
public class CalculatorView implements CursorControl, HistoryControl<CalculatorHistoryState> { public enum CalculatorView implements CursorControl, HistoryControl<CalculatorHistoryState> {
instance;
// millis to wait before evaluation after user edit action // millis to wait before evaluation after user edit action
public static final int EVAL_DELAY_MILLIS = 1000; public static final int EVAL_DELAY_MILLIS = 1000;
@NotNull @NotNull
private final CalculatorEditor editor; private CalculatorEditor editor;
@NotNull @NotNull
private final CalculatorDisplay display; private CalculatorDisplay display;
@NotNull @NotNull
private final CalculatorModel calculatorModel; private CalculatorModel calculatorModel;
public CalculatorView(@NotNull final Activity activity, @NotNull SharedPreferences preferences, @NotNull CalculatorModel calculator) { public CalculatorView init(@NotNull final Activity activity, @NotNull SharedPreferences preferences, @NotNull CalculatorModel calculator) {
this.calculatorModel = calculator; this.calculatorModel = calculator;
this.editor = (CalculatorEditor) activity.findViewById(R.id.calculatorEditor); this.editor = (CalculatorEditor) activity.findViewById(R.id.calculatorEditor);
@ -72,6 +74,8 @@ public class CalculatorView implements CursorControl, HistoryControl<CalculatorH
setCurrentHistoryState(lastState); setCurrentHistoryState(lastState);
} }
return this;
} }
public void copyResult(@NotNull Context context) { public void copyResult(@NotNull Context context) {

View File

@ -29,6 +29,7 @@ class FromJsclTextProcessor implements TextProcessor {
result = String.valueOf(roundedValue); result = String.valueOf(roundedValue);
} }
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
result = result.replace(MathType.INFINITY_DEF, MathType.INFINITY);
if (result.contains(MathType.IMAGINARY_NUMBER_DEF)) { if (result.contains(MathType.IMAGINARY_NUMBER_DEF)) {
try { try {
result = createResultForComplexNumber(result.replace(MathType.IMAGINARY_NUMBER_DEF, MathType.IMAGINARY_NUMBER)); result = createResultForComplexNumber(result.replace(MathType.IMAGINARY_NUMBER_DEF, MathType.IMAGINARY_NUMBER));