Avoid using Locator.getKeyboard
This commit is contained in:
parent
d8a97112bc
commit
ba049e7f28
@ -33,4 +33,5 @@ public interface AppComponent {
|
||||
void inject(OperatorsFragment fragment);
|
||||
void inject(CalculatorActivity activity);
|
||||
void inject(FixableErrorsActivity activity);
|
||||
void inject(CalculatorReceiver receiver);
|
||||
}
|
||||
|
@ -36,11 +36,6 @@ import static org.solovyev.android.calculator.CalculatorSpecialButton.operators_
|
||||
import static org.solovyev.android.calculator.CalculatorSpecialButton.settings_detached;
|
||||
import static org.solovyev.android.calculator.CalculatorSpecialButton.vars_detached;
|
||||
|
||||
/**
|
||||
* User: serso
|
||||
* Date: 10/20/12
|
||||
* Time: 12:05 AM
|
||||
*/
|
||||
public enum CalculatorButton {
|
||||
|
||||
/*digits*/
|
||||
@ -93,9 +88,9 @@ public enum CalculatorButton {
|
||||
private static SparseArray<CalculatorButton> buttonsByIds = new SparseArray<>();
|
||||
private final int buttonId;
|
||||
@Nonnull
|
||||
private final String onClickText;
|
||||
public final String action;
|
||||
@Nullable
|
||||
private final String onLongClickText;
|
||||
public final String actionLong;
|
||||
|
||||
CalculatorButton(int buttonId, @Nonnull CalculatorSpecialButton onClickButton, @Nullable CalculatorSpecialButton onLongClickButton) {
|
||||
this(buttonId, onClickButton.getActionCode(), onLongClickButton == null ? null : onLongClickButton.getActionCode());
|
||||
@ -105,15 +100,15 @@ public enum CalculatorButton {
|
||||
this(buttonId, onClickButton, null);
|
||||
}
|
||||
|
||||
CalculatorButton(int buttonId, @Nonnull String onClickText, @Nullable String onLongClickText) {
|
||||
CalculatorButton(int buttonId, @Nonnull String action, @Nullable String actionLong) {
|
||||
this.buttonId = buttonId;
|
||||
this.onClickText = onClickText;
|
||||
this.onLongClickText = onLongClickText;
|
||||
this.action = action;
|
||||
this.actionLong = actionLong;
|
||||
|
||||
}
|
||||
|
||||
CalculatorButton(int buttonId, @Nonnull String onClickText) {
|
||||
this(buttonId, onClickText, null);
|
||||
CalculatorButton(int buttonId, @Nonnull String action) {
|
||||
this(buttonId, action, null);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@ -138,17 +133,6 @@ public enum CalculatorButton {
|
||||
}
|
||||
}
|
||||
|
||||
public boolean onLongClick() {
|
||||
if (onLongClickText != null) {
|
||||
return Locator.getInstance().getKeyboard().buttonPressed(onLongClickText);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean onClick() {
|
||||
return Locator.getInstance().getKeyboard().buttonPressed(onClickText);
|
||||
}
|
||||
|
||||
public int getButtonId() {
|
||||
return buttonId;
|
||||
}
|
||||
|
@ -6,12 +6,18 @@ import android.content.Intent;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.inject.Inject;
|
||||
|
||||
import static org.solovyev.android.calculator.App.cast;
|
||||
|
||||
public final class CalculatorReceiver extends BroadcastReceiver {
|
||||
|
||||
public static final String ACTION_BUTTON_ID_EXTRA = "buttonId";
|
||||
public static final String ACTION_BUTTON_PRESSED = "org.solovyev.android.calculator.BUTTON_PRESSED";
|
||||
|
||||
@Inject
|
||||
Keyboard keyboard;
|
||||
|
||||
@Nonnull
|
||||
public static Intent newButtonClickedIntent(@Nonnull Context context, @Nonnull CalculatorButton button) {
|
||||
final Intent intent = new Intent(context, CalculatorReceiver.class);
|
||||
@ -27,12 +33,14 @@ public final class CalculatorReceiver extends BroadcastReceiver {
|
||||
return;
|
||||
}
|
||||
|
||||
cast(context).getComponent().inject(this);
|
||||
|
||||
final int buttonId = intent.getIntExtra(ACTION_BUTTON_ID_EXTRA, 0);
|
||||
final CalculatorButton button = CalculatorButton.getById(buttonId);
|
||||
if (button == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
button.onClick();
|
||||
keyboard.buttonPressed(button.action);
|
||||
}
|
||||
}
|
||||
|
@ -23,16 +23,18 @@
|
||||
package org.solovyev.android.calculator;
|
||||
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.squareup.otto.Bus;
|
||||
import dagger.Lazy;
|
||||
|
||||
import org.solovyev.android.calculator.math.MathType;
|
||||
import org.solovyev.common.text.Strings;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.Lazy;
|
||||
|
||||
@Singleton
|
||||
public class Keyboard {
|
||||
|
||||
@ -51,8 +53,10 @@ public class Keyboard {
|
||||
}
|
||||
|
||||
public boolean buttonPressed(@Nullable final String text) {
|
||||
if (TextUtils.isEmpty(text)) {
|
||||
return false;
|
||||
}
|
||||
App.getGa().onButtonPressed(text);
|
||||
if (!Strings.isEmpty(text)) {
|
||||
// process special buttons
|
||||
boolean processed = processSpecialButtons(text);
|
||||
|
||||
@ -61,8 +65,6 @@ public class Keyboard {
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void processText(@Nonnull String text) {
|
||||
int cursorPositionOffset = 0;
|
||||
|
@ -41,6 +41,7 @@ import org.solovyev.android.Views;
|
||||
import org.solovyev.android.calculator.App;
|
||||
import org.solovyev.android.calculator.Display;
|
||||
import org.solovyev.android.calculator.Editor;
|
||||
import org.solovyev.android.calculator.Keyboard;
|
||||
import org.solovyev.android.calculator.Preferences;
|
||||
import org.solovyev.android.calculator.R;
|
||||
|
||||
@ -61,6 +62,14 @@ public class CalculatorOnscreenService extends Service implements OnscreenViewLi
|
||||
|
||||
@Inject
|
||||
Bus bus;
|
||||
@Inject
|
||||
Editor editor;
|
||||
@Inject
|
||||
Display display;
|
||||
@Inject
|
||||
SharedPreferences preferences;
|
||||
@Inject
|
||||
Keyboard keyboard;
|
||||
|
||||
@Nonnull
|
||||
private static Class<?> getIntentListenerClass() {
|
||||
@ -111,13 +120,13 @@ public class CalculatorOnscreenService extends Service implements OnscreenViewLi
|
||||
final int width = Math.min(width0, height0);
|
||||
final int height = Math.max(width0, height0);
|
||||
|
||||
view = CalculatorOnscreenView.create(this, CalculatorOnscreenViewState.create(width, height, -1, -1), this);
|
||||
view = CalculatorOnscreenView.create(this, CalculatorOnscreenViewState.create(width, height, -1, -1), this, preferences, keyboard);
|
||||
view.show();
|
||||
view.updateEditorState(App.getEditor().getState());
|
||||
view.updateDisplayState(App.getDisplay().getState());
|
||||
view.updateEditorState(editor.getState());
|
||||
view.updateDisplayState(display.getState());
|
||||
|
||||
bus.register(this);
|
||||
App.getPreferences().registerOnSharedPreferenceChangeListener(this);
|
||||
preferences.registerOnSharedPreferenceChangeListener(this);
|
||||
}
|
||||
|
||||
private int getHeight(int width) {
|
||||
@ -133,7 +142,7 @@ public class CalculatorOnscreenService extends Service implements OnscreenViewLi
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
if (view != null) {
|
||||
App.getPreferences().unregisterOnSharedPreferenceChangeListener(this);
|
||||
preferences.unregisterOnSharedPreferenceChangeListener(this);
|
||||
bus.unregister(this);
|
||||
view.hide();
|
||||
view = null;
|
||||
|
@ -28,16 +28,30 @@ import android.content.res.Resources;
|
||||
import android.graphics.PixelFormat;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Log;
|
||||
import android.view.*;
|
||||
import android.view.Gravity;
|
||||
import android.view.HapticFeedbackConstants;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.ImageView;
|
||||
import org.solovyev.android.calculator.*;
|
||||
|
||||
import org.solovyev.android.calculator.CalculatorButton;
|
||||
import org.solovyev.android.calculator.DisplayState;
|
||||
import org.solovyev.android.calculator.DisplayView;
|
||||
import org.solovyev.android.calculator.EditorState;
|
||||
import org.solovyev.android.calculator.EditorView;
|
||||
import org.solovyev.android.calculator.Keyboard;
|
||||
import org.solovyev.android.calculator.Preferences;
|
||||
import org.solovyev.android.calculator.R;
|
||||
import org.solovyev.android.prefs.Preference;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Locale;
|
||||
|
||||
public class CalculatorOnscreenView {
|
||||
private static final String TAG = CalculatorOnscreenView.class.getSimpleName();
|
||||
@ -63,6 +77,8 @@ public class CalculatorOnscreenView {
|
||||
private CalculatorOnscreenViewState state = CalculatorOnscreenViewState.createDefault();
|
||||
@Nullable
|
||||
private OnscreenViewListener viewListener;
|
||||
@Nonnull
|
||||
private Keyboard keyboard;
|
||||
|
||||
private boolean minimized;
|
||||
private boolean attached;
|
||||
@ -76,24 +92,26 @@ public class CalculatorOnscreenView {
|
||||
|
||||
public static CalculatorOnscreenView create(@Nonnull Context context,
|
||||
@Nonnull CalculatorOnscreenViewState state,
|
||||
@Nullable OnscreenViewListener viewListener) {
|
||||
final CalculatorOnscreenView result = new CalculatorOnscreenView();
|
||||
@Nullable OnscreenViewListener viewListener,
|
||||
@NonNull SharedPreferences preferences,
|
||||
@NonNull Keyboard keyboard) {
|
||||
final CalculatorOnscreenView view = new CalculatorOnscreenView();
|
||||
|
||||
final SharedPreferences p = App.getPreferences();
|
||||
final Preferences.SimpleTheme theme = Preferences.Onscreen.theme.getPreferenceNoError(p);
|
||||
final Preferences.Gui.Theme appTheme = Preferences.Gui.theme.getPreferenceNoError(p);
|
||||
result.root = View.inflate(context, theme.getOnscreenLayout(appTheme), null);
|
||||
result.context = context;
|
||||
result.viewListener = viewListener;
|
||||
final Preferences.SimpleTheme theme = Preferences.Onscreen.theme.getPreferenceNoError(preferences);
|
||||
final Preferences.Gui.Theme appTheme = Preferences.Gui.theme.getPreferenceNoError(preferences);
|
||||
view.root = View.inflate(context, theme.getOnscreenLayout(appTheme), null);
|
||||
view.context = context;
|
||||
view.viewListener = viewListener;
|
||||
view.keyboard = keyboard;
|
||||
|
||||
final CalculatorOnscreenViewState persistedState = readState(context);
|
||||
if (persistedState != null) {
|
||||
result.state = persistedState;
|
||||
view.state = persistedState;
|
||||
} else {
|
||||
result.state = state;
|
||||
view.state = state;
|
||||
}
|
||||
|
||||
return result;
|
||||
return view;
|
||||
}
|
||||
|
||||
public static void persistState(@Nonnull Context context, @Nonnull CalculatorOnscreenViewState state) {
|
||||
@ -142,7 +160,7 @@ public class CalculatorOnscreenView {
|
||||
button.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (widgetButton.onClick()) {
|
||||
if (keyboard.buttonPressed(widgetButton.action)) {
|
||||
v.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
|
||||
}
|
||||
if (widgetButton == CalculatorButton.app) {
|
||||
@ -153,7 +171,7 @@ public class CalculatorOnscreenView {
|
||||
button.setOnLongClickListener(new View.OnLongClickListener() {
|
||||
@Override
|
||||
public boolean onLongClick(View v) {
|
||||
if (widgetButton.onLongClick()) {
|
||||
if (keyboard.buttonPressed(widgetButton.actionLong)) {
|
||||
v.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
|
||||
}
|
||||
return true;
|
||||
|
Loading…
Reference in New Issue
Block a user