Button moved to a separate package

This commit is contained in:
serso 2016-02-04 13:06:03 +01:00
parent b09b3c11a8
commit e0528ae340
8 changed files with 68 additions and 57 deletions

View File

@ -5,6 +5,7 @@ import android.view.HapticFeedbackConstants;
import android.view.View; import android.view.View;
import android.widget.Button; import android.widget.Button;
import org.solovyev.android.calculator.buttons.CppSpecialButton;
import org.solovyev.android.calculator.view.ViewsCache; import org.solovyev.android.calculator.view.ViewsCache;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
@ -42,39 +43,39 @@ final class ButtonOnClickListener implements View.OnClickListener {
onClick(v, ((Button) v).getText().toString()); onClick(v, ((Button) v).getText().toString());
break; break;
case R.id.cpp_button_clear: case R.id.cpp_button_clear:
onClick(v, CalculatorSpecialButton.clear); onClick(v, CppSpecialButton.clear);
break; break;
case R.id.cpp_button_functions: case R.id.cpp_button_functions:
onClick(v, CalculatorSpecialButton.functions); onClick(v, CppSpecialButton.functions);
break; break;
case R.id.cpp_button_history: case R.id.cpp_button_history:
onClick(v, CalculatorSpecialButton.history); onClick(v, CppSpecialButton.history);
break; break;
case R.id.cpp_button_erase: case R.id.cpp_button_erase:
onClick(v, CalculatorSpecialButton.erase); onClick(v, CppSpecialButton.erase);
break; break;
case R.id.cpp_button_paste: case R.id.cpp_button_paste:
onClick(v, CalculatorSpecialButton.paste); onClick(v, CppSpecialButton.paste);
break; break;
case R.id.cpp_button_copy: case R.id.cpp_button_copy:
onClick(v, CalculatorSpecialButton.copy); onClick(v, CppSpecialButton.copy);
break; break;
case R.id.cpp_button_like: case R.id.cpp_button_like:
onClick(v, CalculatorSpecialButton.like); onClick(v, CppSpecialButton.like);
break; break;
case R.id.cpp_button_operators: case R.id.cpp_button_operators:
onClick(v, CalculatorSpecialButton.operators); onClick(v, CppSpecialButton.operators);
break; break;
case R.id.cpp_button_vars: case R.id.cpp_button_vars:
onClick(v, CalculatorSpecialButton.vars); onClick(v, CppSpecialButton.vars);
break; break;
case R.id.cpp_button_equals: case R.id.cpp_button_equals:
onClick(v, CalculatorSpecialButton.equals); onClick(v, CppSpecialButton.equals);
break; break;
} }
} }
private void onClick(@Nonnull View v, @Nonnull CalculatorSpecialButton b) { private void onClick(@Nonnull View v, @Nonnull CppSpecialButton b) {
onClick(v, b.getActionCode()); onClick(v, b.getActionCode());
} }

View File

@ -5,6 +5,8 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.text.TextUtils; import android.text.TextUtils;
import org.solovyev.android.calculator.buttons.CppButton;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.inject.Inject; import javax.inject.Inject;
@ -19,7 +21,7 @@ public final class CalculatorReceiver extends BroadcastReceiver {
Keyboard keyboard; Keyboard keyboard;
@Nonnull @Nonnull
public static Intent newButtonClickedIntent(@Nonnull Context context, @Nonnull CalculatorButton button) { public static Intent newButtonClickedIntent(@Nonnull Context context, @Nonnull CppButton button) {
final Intent intent = new Intent(context, CalculatorReceiver.class); final Intent intent = new Intent(context, CalculatorReceiver.class);
intent.setAction(ACTION_BUTTON_PRESSED); intent.setAction(ACTION_BUTTON_PRESSED);
intent.putExtra(ACTION_BUTTON_ID_EXTRA, button.id); intent.putExtra(ACTION_BUTTON_ID_EXTRA, button.id);
@ -36,7 +38,7 @@ public final class CalculatorReceiver extends BroadcastReceiver {
cast(context).getComponent().inject(this); cast(context).getComponent().inject(this);
final int buttonId = intent.getIntExtra(ACTION_BUTTON_ID_EXTRA, 0); final int buttonId = intent.getIntExtra(ACTION_BUTTON_ID_EXTRA, 0);
final CalculatorButton button = CalculatorButton.getById(buttonId); final CppButton button = CppButton.getById(buttonId);
if (button == null) { if (button == null) {
return; return;
} }

View File

@ -26,6 +26,7 @@ import android.text.TextUtils;
import com.squareup.otto.Bus; import com.squareup.otto.Bus;
import org.solovyev.android.calculator.buttons.CppSpecialButton;
import org.solovyev.android.calculator.math.MathType; import org.solovyev.android.calculator.math.MathType;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
@ -106,7 +107,7 @@ public class Keyboard {
private boolean processSpecialButtons(@Nonnull String text) { private boolean processSpecialButtons(@Nonnull String text) {
boolean result = false; boolean result = false;
final CalculatorSpecialButton button = CalculatorSpecialButton.getByActionCode(text); final CppSpecialButton button = CppSpecialButton.getByActionCode(text);
if (button != null) { if (button != null) {
button.onClick(this); button.onClick(this);
result = true; result = true;

View File

@ -20,25 +20,26 @@
* Site: http://se.solovyev.org * Site: http://se.solovyev.org
*/ */
package org.solovyev.android.calculator; package org.solovyev.android.calculator.buttons;
import android.util.SparseArray; import android.util.SparseArray;
import org.solovyev.android.Check; import org.solovyev.android.Check;
import org.solovyev.android.calculator.R;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import static org.solovyev.android.calculator.CalculatorSpecialButton.cursor_left; import static org.solovyev.android.calculator.buttons.CppSpecialButton.cursor_left;
import static org.solovyev.android.calculator.CalculatorSpecialButton.cursor_right; import static org.solovyev.android.calculator.buttons.CppSpecialButton.cursor_right;
import static org.solovyev.android.calculator.CalculatorSpecialButton.functions_detached; import static org.solovyev.android.calculator.buttons.CppSpecialButton.functions_detached;
import static org.solovyev.android.calculator.CalculatorSpecialButton.history_detached; import static org.solovyev.android.calculator.buttons.CppSpecialButton.history_detached;
import static org.solovyev.android.calculator.CalculatorSpecialButton.open_app; import static org.solovyev.android.calculator.buttons.CppSpecialButton.open_app;
import static org.solovyev.android.calculator.CalculatorSpecialButton.operators_detached; import static org.solovyev.android.calculator.buttons.CppSpecialButton.operators_detached;
import static org.solovyev.android.calculator.CalculatorSpecialButton.settings_detached; import static org.solovyev.android.calculator.buttons.CppSpecialButton.settings_detached;
import static org.solovyev.android.calculator.CalculatorSpecialButton.vars_detached; import static org.solovyev.android.calculator.buttons.CppSpecialButton.vars_detached;
public enum CalculatorButton { public enum CppButton {
/*digits*/ /*digits*/
one(R.id.cpp_button_1, "1"), one(R.id.cpp_button_1, "1"),
@ -56,8 +57,8 @@ public enum CalculatorButton {
brackets(R.id.cpp_button_round_brackets, "()"), brackets(R.id.cpp_button_round_brackets, "()"),
settings(R.id.cpp_button_settings, settings_detached), settings(R.id.cpp_button_settings, settings_detached),
settings_widget(R.id.cpp_button_settings_widget, CalculatorSpecialButton.settings_widget), settings_widget(R.id.cpp_button_settings_widget, CppSpecialButton.settings_widget),
like(R.id.cpp_button_like, CalculatorSpecialButton.like), like(R.id.cpp_button_like, CppSpecialButton.like),
/*last row*/ /*last row*/
left(R.id.cpp_button_left, cursor_left), left(R.id.cpp_button_left, cursor_left),
@ -77,43 +78,43 @@ public enum CalculatorButton {
power(R.id.cpp_button_power, "^"), power(R.id.cpp_button_power, "^"),
/*last column*/ /*last column*/
clear(R.id.cpp_button_clear, CalculatorSpecialButton.clear), clear(R.id.cpp_button_clear, CppSpecialButton.clear),
erase(R.id.cpp_button_erase, CalculatorSpecialButton.erase, CalculatorSpecialButton.clear), erase(R.id.cpp_button_erase, CppSpecialButton.erase, CppSpecialButton.clear),
copy(R.id.cpp_button_copy, CalculatorSpecialButton.copy), copy(R.id.cpp_button_copy, CppSpecialButton.copy),
paste(R.id.cpp_button_paste, CalculatorSpecialButton.paste), paste(R.id.cpp_button_paste, CppSpecialButton.paste),
/*equals*/ /*equals*/
equals(R.id.cpp_button_equals, CalculatorSpecialButton.equals); equals(R.id.cpp_button_equals, CppSpecialButton.equals);
@Nonnull @Nonnull
private static SparseArray<CalculatorButton> buttonsByIds = new SparseArray<>(); private static SparseArray<CppButton> buttonsByIds = new SparseArray<>();
public final int id; public final int id;
@Nonnull @Nonnull
public final String action; public final String action;
@Nullable @Nullable
public final String actionLong; public final String actionLong;
CalculatorButton(int id, @Nonnull CalculatorSpecialButton onClickButton, @Nullable CalculatorSpecialButton onLongClickButton) { CppButton(int id, @Nonnull CppSpecialButton onClickButton, @Nullable CppSpecialButton onLongClickButton) {
this(id, onClickButton.getActionCode(), onLongClickButton == null ? null : onLongClickButton.getActionCode()); this(id, onClickButton.getActionCode(), onLongClickButton == null ? null : onLongClickButton.getActionCode());
} }
CalculatorButton(int id, @Nonnull CalculatorSpecialButton onClickButton) { CppButton(int id, @Nonnull CppSpecialButton onClickButton) {
this(id, onClickButton, null); this(id, onClickButton, null);
} }
CalculatorButton(int id, @Nonnull String action, @Nullable String actionLong) { CppButton(int id, @Nonnull String action, @Nullable String actionLong) {
this.id = id; this.id = id;
this.action = action; this.action = action;
this.actionLong = actionLong; this.actionLong = actionLong;
} }
CalculatorButton(int id, @Nonnull String action) { CppButton(int id, @Nonnull String action) {
this(id, action, null); this(id, action, null);
} }
@Nullable @Nullable
public static CalculatorButton getById(int buttonId) { public static CppButton getById(int buttonId) {
initButtonsByIdsMap(); initButtonsByIdsMap();
return buttonsByIds.get(buttonId); return buttonsByIds.get(buttonId);
} }
@ -121,7 +122,7 @@ public enum CalculatorButton {
private static void initButtonsByIdsMap() { private static void initButtonsByIdsMap() {
Check.isMainThread(); Check.isMainThread();
if (buttonsByIds.size() == 0) { if (buttonsByIds.size() == 0) {
for (CalculatorButton button : values()) { for (CppButton button : values()) {
buttonsByIds.append(button.id, button); buttonsByIds.append(button.id, button);
} }
} }

View File

@ -20,7 +20,14 @@
* Site: http://se.solovyev.org * Site: http://se.solovyev.org
*/ */
package org.solovyev.android.calculator; package org.solovyev.android.calculator.buttons;
import org.solovyev.android.calculator.App;
import org.solovyev.android.calculator.Calculator;
import org.solovyev.android.calculator.CalculatorEventType;
import org.solovyev.android.calculator.DisplayState;
import org.solovyev.android.calculator.Keyboard;
import org.solovyev.android.calculator.Locator;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -28,7 +35,7 @@ import java.util.Map;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
public enum CalculatorSpecialButton { public enum CppSpecialButton {
history("history") { history("history") {
@Override @Override
@ -72,7 +79,6 @@ public enum CalculatorSpecialButton {
Locator.getInstance().getCalculator().fireCalculatorEvent(CalculatorEventType.show_settings_widget, null); Locator.getInstance().getCalculator().fireCalculatorEvent(CalculatorEventType.show_settings_widget, null);
} }
}, },
like("like") { like("like") {
@Override @Override
public void onClick(@Nonnull Keyboard keyboard) { public void onClick(@Nonnull Keyboard keyboard) {
@ -164,17 +170,17 @@ public enum CalculatorSpecialButton {
}; };
@Nonnull @Nonnull
private static Map<String, CalculatorSpecialButton> buttonsByActionCodes = new HashMap<>(); private static Map<String, CppSpecialButton> buttonsByActionCodes = new HashMap<>();
@Nonnull @Nonnull
private final String actionCode; private final String actionCode;
CalculatorSpecialButton(@Nonnull String actionCode) { CppSpecialButton(@Nonnull String actionCode) {
this.actionCode = actionCode; this.actionCode = actionCode;
} }
@Nullable @Nullable
public static CalculatorSpecialButton getByActionCode(@Nonnull String actionCode) { public static CppSpecialButton getByActionCode(@Nonnull String actionCode) {
initButtonsByActionCodesMap(); initButtonsByActionCodesMap();
return buttonsByActionCodes.get(actionCode); return buttonsByActionCodes.get(actionCode);
} }
@ -183,10 +189,10 @@ public enum CalculatorSpecialButton {
if (buttonsByActionCodes.isEmpty()) { if (buttonsByActionCodes.isEmpty()) {
// if not initialized // if not initialized
final CalculatorSpecialButton[] specialButtons = values(); final CppSpecialButton[] specialButtons = values();
final Map<String, CalculatorSpecialButton> localButtonsByActionCodes = new HashMap<String, CalculatorSpecialButton>(specialButtons.length); final Map<String, CppSpecialButton> localButtonsByActionCodes = new HashMap<String, CppSpecialButton>(specialButtons.length);
for (CalculatorSpecialButton specialButton : specialButtons) { for (CppSpecialButton specialButton : specialButtons) {
localButtonsByActionCodes.put(specialButton.getActionCode(), specialButton); localButtonsByActionCodes.put(specialButton.getActionCode(), specialButton);
} }

View File

@ -38,7 +38,7 @@ import android.view.View;
import android.view.WindowManager; import android.view.WindowManager;
import android.widget.ImageView; import android.widget.ImageView;
import org.solovyev.android.calculator.CalculatorButton; import org.solovyev.android.calculator.buttons.CppButton;
import org.solovyev.android.calculator.DisplayState; import org.solovyev.android.calculator.DisplayState;
import org.solovyev.android.calculator.DisplayView; import org.solovyev.android.calculator.DisplayView;
import org.solovyev.android.calculator.EditorState; import org.solovyev.android.calculator.EditorState;
@ -152,7 +152,7 @@ public class CalculatorOnscreenView {
return; return;
} }
for (final CalculatorButton widgetButton : CalculatorButton.values()) { for (final CppButton widgetButton : CppButton.values()) {
final View button = root.findViewById(widgetButton.id); final View button = root.findViewById(widgetButton.id);
if (button == null) { if (button == null) {
continue; continue;
@ -163,7 +163,7 @@ public class CalculatorOnscreenView {
if (keyboard.buttonPressed(widgetButton.action)) { if (keyboard.buttonPressed(widgetButton.action)) {
v.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY); v.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
} }
if (widgetButton == CalculatorButton.app) { if (widgetButton == CppButton.app) {
minimize(); minimize();
} }
} }

View File

@ -44,7 +44,7 @@ import android.widget.RemoteViews;
import org.solovyev.android.Check; import org.solovyev.android.Check;
import org.solovyev.android.Views; import org.solovyev.android.Views;
import org.solovyev.android.calculator.App; import org.solovyev.android.calculator.App;
import org.solovyev.android.calculator.CalculatorButton; import org.solovyev.android.calculator.buttons.CppButton;
import org.solovyev.android.calculator.DisplayState; import org.solovyev.android.calculator.DisplayState;
import org.solovyev.android.calculator.EditorState; import org.solovyev.android.calculator.EditorState;
import org.solovyev.android.calculator.Locator; import org.solovyev.android.calculator.Locator;
@ -129,13 +129,13 @@ public class CalculatorWidget extends AppWidgetProvider {
final RemoteViews views = new RemoteViews(context.getPackageName(), getLayout(manager, widgetId, resources, theme)); final RemoteViews views = new RemoteViews(context.getPackageName(), getLayout(manager, widgetId, resources, theme));
if (!partially || Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { if (!partially || Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
for (CalculatorButton button : CalculatorButton.values()) { for (CppButton button : CppButton.values()) {
final PendingIntent intent = intents.get(context, button); final PendingIntent intent = intents.get(context, button);
if (intent != null) { if (intent != null) {
final int buttonId; final int buttonId;
if (button == CalculatorButton.settings_widget) { if (button == CppButton.settings_widget) {
// overriding default settings button behavior // overriding default settings button behavior
buttonId = CalculatorButton.settings.id; buttonId = CppButton.settings.id;
} else { } else {
buttonId = button.id; buttonId = button.id;
} }
@ -254,10 +254,10 @@ public class CalculatorWidget extends AppWidgetProvider {
private static class Intents { private static class Intents {
@Nonnull @Nonnull
private final EnumMap<CalculatorButton, PendingIntent> map = new EnumMap<>(CalculatorButton.class); private final EnumMap<CppButton, PendingIntent> map = new EnumMap<>(CppButton.class);
@Nullable @Nullable
PendingIntent get(@Nonnull Context context, @Nonnull CalculatorButton button) { PendingIntent get(@Nonnull Context context, @Nonnull CppButton button) {
Check.isMainThread(); Check.isMainThread();
PendingIntent intent = map.get(button); PendingIntent intent = map.get(button);

View File

@ -11,7 +11,7 @@ import org.robolectric.annotation.Config;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.robolectric.RuntimeEnvironment.application; import static org.robolectric.RuntimeEnvironment.application;
import static org.solovyev.android.calculator.CalculatorButton.four; import static org.solovyev.android.calculator.buttons.CppButton.four;
import static org.solovyev.android.calculator.CalculatorReceiver.*; import static org.solovyev.android.calculator.CalculatorReceiver.*;
@Config(constants = BuildConfig.class, sdk = Build.VERSION_CODES.LOLLIPOP) @Config(constants = BuildConfig.class, sdk = Build.VERSION_CODES.LOLLIPOP)