package org.solovyev.android.calculator.keyboard;
import android.app.Activity;
import android.app.Application;
import android.content.SharedPreferences;
import android.support.annotation.Nullable;
import android.view.View;
import butterknife.Bind;
import butterknife.ButterKnife;
import com.squareup.otto.Bus;
import com.squareup.otto.Subscribe;
import jscl.NumeralBase;
import org.solovyev.android.calculator.Display;
import org.solovyev.android.calculator.Engine;
import org.solovyev.android.calculator.Keyboard;
import org.solovyev.android.calculator.R;
import org.solovyev.android.views.dragbutton.DirectionDragButton;
import javax.annotation.Nonnull;
import javax.inject.Inject;
import static org.solovyev.android.calculator.Engine.Preferences.multiplicationSign;
import static org.solovyev.android.views.dragbutton.DragDirection.*;
public class KeyboardUi extends BaseKeyboardUi {
@Bind(R.id.cpp_button_0)
public DirectionDragButton button0;
@Bind(R.id.cpp_button_1)
public DirectionDragButton button1;
@Bind(R.id.cpp_button_2)
public DirectionDragButton button2;
@Bind(R.id.cpp_button_3)
public DirectionDragButton button3;
@Bind(R.id.cpp_button_4)
public DirectionDragButton button4;
@Bind(R.id.cpp_button_5)
public DirectionDragButton button5;
@Bind(R.id.cpp_button_6)
public DirectionDragButton button6;
@Bind(R.id.cpp_button_7)
public DirectionDragButton button7;
@Bind(R.id.cpp_button_8)
public DirectionDragButton button8;
@Bind(R.id.cpp_button_9)
public DirectionDragButton button9;
@Inject
Engine engine;
@Inject
Display display;
@Inject
Bus bus;
@Inject
PartialKeyboardUi partialUi;
@Bind(R.id.cpp_button_vars)
DirectionDragButton variablesButton;
@Nullable
@Bind(R.id.cpp_button_operators)
DirectionDragButton operatorsButton;
@Bind(R.id.cpp_button_functions)
DirectionDragButton functionsButton;
@Bind(R.id.cpp_button_history)
DirectionDragButton historyButton;
@Bind(R.id.cpp_button_multiplication)
DirectionDragButton multiplicationButton;
@Bind(R.id.cpp_button_plus)
DirectionDragButton plusButton;
@Bind(R.id.cpp_button_subtraction)
DirectionDragButton subtractionButton;
@Bind(R.id.cpp_button_division)
DirectionDragButton divisionButton;
@Bind(R.id.cpp_button_period)
DirectionDragButton periodButton;
@Bind(R.id.cpp_button_round_brackets)
DirectionDragButton bracketsButton;
@Nullable
@Bind(R.id.cpp_button_like)
DirectionDragButton likeButton;
@Nullable
@Bind(R.id.cpp_button_percent)
DirectionDragButton percentButton;
@Nullable
@Bind(R.id.cpp_button_memory)
DirectionDragButton memoryButton;
@Inject
public KeyboardUi(@Nonnull Application application) {
super(application);
}
public void updateNumberMode(@Nonnull NumeralBase mode) {
final boolean hex = mode == NumeralBase.hex;
button1.setShowDirectionText(left, hex);
button2.setShowDirectionText(left, hex);
button3.setShowDirectionText(left, hex);
button4.setShowDirectionText(left, hex);
button5.setShowDirectionText(left, hex);
button6.setShowDirectionText(left, hex);
}
public void onCreateView(@Nonnull Activity activity, @Nonnull View view) {
super.onCreateView(activity, view);
partialUi.onCreateView(activity, view);
ButterKnife.bind(this, view);
prepareButton(variablesButton);
prepareButton(operatorsButton);
prepareButton(functionsButton);
prepareButton(historyButton);
prepareButton(multiplicationButton);
prepareButton(plusButton);
prepareButton(subtractionButton);
prepareButton(divisionButton);
prepareButton(periodButton);
prepareButton(bracketsButton);
prepareButton(percentButton);
prepareButton(button0);
prepareButton(button1);
prepareButton(button2);
prepareButton(button3);
prepareButton(button4);
prepareButton(button5);
prepareButton(button6);
prepareButton(button7);
prepareButton(button8);
prepareButton(button9);
prepareButton(likeButton);
prepareButton(memoryButton);
if (isSimpleMode()) {
hideText(button1, down);
hideText(button2, down);
hideText(button3, down);
hideText(button4, down);
hideText(button5, down);
hideText(button6, up);
hideText(button7, left, up, down);
hideText(button8, left, up, down);
hideText(button9, left);
hideText(multiplicationButton, left);
hideText(plusButton, up);
hideText(functionsButton, up, down);
}
multiplicationButton.setText(engine.getMultiplicationSign());
updateNumberMode(keyboard.getNumberMode());
bus.register(this);
}
@Override
public void onDestroyView() {
bus.unregister(this);
partialUi.onDestroyView();
super.onDestroyView();
}
@Override
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
super.onSharedPreferenceChanged(preferences, key);
if (multiplicationSign.isSameKey(key)) {
multiplicationButton.setText(multiplicationSign.getPreference(preferences));
}
}
@Subscribe
public void onNumberModeChanged(@Nonnull Keyboard.NumberModeChangedEvent e) {
updateNumberMode(e.mode);
}
}