diff --git a/app/src/main/java/org/solovyev/android/calculator/CalculatorApplication.java b/app/src/main/java/org/solovyev/android/calculator/CalculatorApplication.java index e7c17cd2..8c18473c 100644 --- a/app/src/main/java/org/solovyev/android/calculator/CalculatorApplication.java +++ b/app/src/main/java/org/solovyev/android/calculator/CalculatorApplication.java @@ -26,10 +26,8 @@ import android.content.SharedPreferences; import android.os.Handler; import android.preference.PreferenceManager; import android.util.Log; - import com.squareup.leakcanary.LeakCanary; import com.squareup.otto.Bus; - import org.acra.ACRA; import org.acra.ACRAConfiguration; import org.acra.sender.HttpSender; @@ -43,15 +41,14 @@ import org.solovyev.android.calculator.plot.AndroidCalculatorPlotter; import org.solovyev.android.calculator.plot.CalculatorPlotterImpl; import org.solovyev.common.msg.MessageType; +import javax.annotation.Nonnull; +import javax.inject.Inject; +import javax.inject.Named; import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.concurrent.Executor; -import javax.annotation.Nonnull; -import javax.inject.Inject; -import javax.inject.Named; - public class CalculatorApplication extends android.app.Application implements SharedPreferences.OnSharedPreferenceChangeListener { @Inject @@ -107,7 +104,6 @@ public class CalculatorApplication extends android.app.Application implements Sh .build(); component.inject(this); history.init(initThread); - display.init(); onPostCreate(preferences, languages); } diff --git a/app/src/main/java/org/solovyev/android/calculator/history/BaseHistoryFragment.java b/app/src/main/java/org/solovyev/android/calculator/history/BaseHistoryFragment.java index 7c267d65..790bb8ee 100644 --- a/app/src/main/java/org/solovyev/android/calculator/history/BaseHistoryFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/history/BaseHistoryFragment.java @@ -30,37 +30,22 @@ import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.ListFragment; import android.text.ClipboardManager; -import android.view.ContextMenu; -import android.view.LayoutInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; +import android.view.*; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; -import android.widget.Toast; - import com.melnykov.fab.FloatingActionButton; import com.squareup.otto.Bus; import com.squareup.otto.Subscribe; - -import org.solovyev.android.calculator.App; -import org.solovyev.android.calculator.CalculatorActivity; -import org.solovyev.android.calculator.CalculatorApplication; -import org.solovyev.android.calculator.CalculatorFragmentType; -import org.solovyev.android.calculator.FragmentUi; -import org.solovyev.android.calculator.R; +import org.solovyev.android.calculator.*; import org.solovyev.android.calculator.jscl.JsclOperation; import org.solovyev.common.text.Strings; -import java.util.ArrayList; -import java.util.List; - import javax.annotation.Nonnull; import javax.annotation.Nullable; import javax.inject.Inject; - -import static android.view.Menu.NONE; +import java.util.ArrayList; +import java.util.List; public abstract class BaseHistoryFragment extends ListFragment { @@ -167,73 +152,52 @@ public abstract class BaseHistoryFragment extends ListFragment { } @Override - public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { + public final void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); final AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; final HistoryState state = (HistoryState) getListView().getItemAtPosition(info.position); - if (!isRecentHistory()) { - menu.add(NONE, R.string.c_use, NONE, R.string.c_use); - menu.add(NONE, R.string.c_copy_expression, NONE, R.string.c_copy_expression); - if (shouldHaveCopyResult(state)) { - menu.add(NONE, R.string.c_copy_result, NONE, R.string.c_copy_result); - } - menu.add(NONE, R.string.c_edit, NONE, R.string.c_edit); - menu.add(NONE, R.string.c_remove, NONE, R.string.c_remove); - } else { - menu.add(NONE, R.string.c_use, NONE, R.string.c_use); - menu.add(NONE, R.string.c_copy_expression, NONE, R.string.c_copy_expression); - if (shouldHaveCopyResult(state)) { - menu.add(NONE, R.string.c_copy_result, NONE, R.string.c_copy_result); - } - menu.add(NONE, R.string.c_save, NONE, R.string.c_save); - } + onCreateContextMenu(menu, state); } + protected abstract void onCreateContextMenu(@Nonnull ContextMenu menu, @Nonnull HistoryState state); + @Override - public boolean onContextItemSelected(MenuItem item) { - final Context context = getActivity(); + public final boolean onContextItemSelected(MenuItem item) { final AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); final HistoryState state = (HistoryState) getListView().getItemAtPosition(info.position); - switch (item.getItemId()) { - case R.string.c_use: - useState(state); - return true; - case R.string.c_copy_expression: - final String editorText = state.editor.getTextString(); - if (!Strings.isEmpty(editorText)) { - final ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Activity.CLIPBOARD_SERVICE); - clipboard.setText(editorText); - Toast.makeText(context, context.getText(R.string.c_expression_copied), Toast.LENGTH_SHORT).show(); - } - return true; - case R.string.c_copy_result: - final String displayText = state.display.text; - if (!Strings.isEmpty(displayText)) { - final ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Activity.CLIPBOARD_SERVICE); - clipboard.setText(displayText); - Toast.makeText(context, context.getText(R.string.c_result_copied), Toast.LENGTH_SHORT).show(); - } - return true; - case R.string.c_save: - EditHistoryFragment.show(state, true, getFragmentManager()); - return true; - case R.string.c_edit: - EditHistoryFragment.show(state, false, getFragmentManager()); - return true; - case R.string.c_remove: - getAdapter().remove(state); - history.removeSaved(state); - Toast.makeText(context, context.getText(R.string.c_history_was_removed), Toast.LENGTH_LONG).show(); - getAdapter().notifyDataSetChanged(); - return true; - + if (onContextItemSelected(item, state)) { + return true; } return super.onContextItemSelected(item); } - private boolean shouldHaveCopyResult(@Nonnull HistoryState state) { + protected abstract boolean onContextItemSelected(@Nonnull MenuItem item, @Nonnull HistoryState state); + + @SuppressWarnings("deprecation") + protected final void copyResult(@Nonnull HistoryState state) { + final Context context = getActivity(); + final String displayText = state.display.text; + if (Strings.isEmpty(displayText)) { + return; + } + final ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Activity.CLIPBOARD_SERVICE); + clipboard.setText(displayText); + } + + @SuppressWarnings("deprecation") + protected final void copyExpression(@Nonnull HistoryState state) { + final Context context = getActivity(); + final String editorText = state.editor.getTextString(); + if (Strings.isEmpty(editorText)) { + return; + } + final ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Activity.CLIPBOARD_SERVICE); + clipboard.setText(editorText); + } + + protected final boolean shouldHaveCopyResult(@Nonnull HistoryState state) { return !state.display.valid || !Strings.isEmpty(state.display.text); } diff --git a/app/src/main/java/org/solovyev/android/calculator/history/EditHistoryFragment.java b/app/src/main/java/org/solovyev/android/calculator/history/EditHistoryFragment.java index 26ad3c49..a0099ffb 100644 --- a/app/src/main/java/org/solovyev/android/calculator/history/EditHistoryFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/history/EditHistoryFragment.java @@ -12,16 +12,14 @@ import android.view.LayoutInflater; import android.view.View; import android.widget.EditText; import android.widget.TextView; - +import butterknife.Bind; +import butterknife.ButterKnife; import org.solovyev.android.calculator.AppComponent; import org.solovyev.android.calculator.BaseDialogFragment; import org.solovyev.android.calculator.R; import javax.inject.Inject; -import butterknife.Bind; -import butterknife.ButterKnife; - public class EditHistoryFragment extends BaseDialogFragment { public static final String ARG_STATE = "state"; @@ -76,7 +74,6 @@ public class EditHistoryFragment extends BaseDialogFragment { @Override protected void onPrepareDialog(@NonNull AlertDialog.Builder builder) { - builder.setTitle(newState ? R.string.c_save_history : R.string.c_edit_history); builder.setNegativeButton(R.string.c_cancel, null); builder.setPositiveButton(R.string.c_save, new DialogInterface.OnClickListener() { @Override diff --git a/app/src/main/java/org/solovyev/android/calculator/history/RecentHistoryFragment.java b/app/src/main/java/org/solovyev/android/calculator/history/RecentHistoryFragment.java index 531599a7..00f325ff 100644 --- a/app/src/main/java/org/solovyev/android/calculator/history/RecentHistoryFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/history/RecentHistoryFragment.java @@ -22,12 +22,16 @@ package org.solovyev.android.calculator.history; +import android.view.ContextMenu; +import android.view.MenuItem; import org.solovyev.android.calculator.CalculatorFragmentType; import org.solovyev.android.calculator.R; import javax.annotation.Nonnull; import java.util.List; +import static android.view.Menu.NONE; + public class RecentHistoryFragment extends BaseHistoryFragment { public RecentHistoryFragment() { @@ -55,4 +59,31 @@ public class RecentHistoryFragment extends BaseHistoryFragment { protected boolean isRecentHistory() { return true; } + + protected void onCreateContextMenu(@Nonnull ContextMenu menu, @Nonnull HistoryState state) { + menu.add(NONE, R.string.c_use, NONE, R.string.c_use); + menu.add(NONE, R.string.c_copy_expression, NONE, R.string.c_copy_expression); + if (shouldHaveCopyResult(state)) { + menu.add(NONE, R.string.c_copy_result, NONE, R.string.c_copy_result); + } + menu.add(NONE, R.string.c_save, NONE, R.string.c_save); + } + + protected boolean onContextItemSelected(@Nonnull MenuItem item, @Nonnull HistoryState state) { + switch (item.getItemId()) { + case R.string.c_use: + useState(state); + return true; + case R.string.c_copy_expression: + copyExpression(state); + return true; + case R.string.c_copy_result: + copyResult(state); + return true; + case R.string.c_save: + EditHistoryFragment.show(state, true, getFragmentManager()); + return true; + } + return false; + } } diff --git a/app/src/main/java/org/solovyev/android/calculator/history/SavedHistoryFragment.java b/app/src/main/java/org/solovyev/android/calculator/history/SavedHistoryFragment.java index 7b5eb7eb..3b0d761a 100644 --- a/app/src/main/java/org/solovyev/android/calculator/history/SavedHistoryFragment.java +++ b/app/src/main/java/org/solovyev/android/calculator/history/SavedHistoryFragment.java @@ -22,12 +22,16 @@ package org.solovyev.android.calculator.history; +import android.view.ContextMenu; +import android.view.MenuItem; import org.solovyev.android.calculator.CalculatorFragmentType; import org.solovyev.android.calculator.R; import javax.annotation.Nonnull; import java.util.List; +import static android.view.Menu.NONE; + public class SavedHistoryFragment extends BaseHistoryFragment { public SavedHistoryFragment() { @@ -55,4 +59,36 @@ public class SavedHistoryFragment extends BaseHistoryFragment { protected boolean isRecentHistory() { return false; } + + protected void onCreateContextMenu(@Nonnull ContextMenu menu, @Nonnull HistoryState state) { + menu.add(NONE, R.string.c_use, NONE, R.string.c_use); + menu.add(NONE, R.string.c_copy_expression, NONE, R.string.c_copy_expression); + if (shouldHaveCopyResult(state)) { + menu.add(NONE, R.string.c_copy_result, NONE, R.string.c_copy_result); + } + menu.add(NONE, R.string.c_edit, NONE, R.string.c_edit); + menu.add(NONE, R.string.c_remove, NONE, R.string.c_remove); + } + + protected boolean onContextItemSelected(@Nonnull MenuItem item, @Nonnull HistoryState state) { + switch (item.getItemId()) { + case R.string.c_use: + useState(state); + return true; + case R.string.c_copy_expression: + copyExpression(state); + return true; + case R.string.c_copy_result: + copyResult(state); + return true; + case R.string.c_edit: + EditHistoryFragment.show(state, false, getFragmentManager()); + return true; + case R.string.c_remove: + history.removeSaved(state); + return true; + + } + return false; + } } diff --git a/app/src/main/res/layout/history_edit.xml b/app/src/main/res/layout/history_edit.xml index 79206315..3fd5e26e 100644 --- a/app/src/main/res/layout/history_edit.xml +++ b/app/src/main/res/layout/history_edit.xml @@ -34,13 +34,11 @@ @@ -51,12 +49,10 @@ + a:inputType="text" />