/* * Copyright 2013 serso aka se.solovyev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Contact details * * Email: se.solovyev@gmail.com * Site: http://se.solovyev.org */ package org.solovyev.android.calculator.wizard; import android.graphics.Typeface; import android.os.Bundle; import android.support.annotation.NonNull; import android.view.View; import android.widget.TextView; import org.solovyev.android.calculator.BaseActivity; import org.solovyev.android.calculator.R; import org.solovyev.android.calculator.keyboard.BaseKeyboardUi; import org.solovyev.android.views.Adjuster; import org.solovyev.android.views.dragbutton.DirectionDragButton; import org.solovyev.android.views.dragbutton.DirectionDragListener; import org.solovyev.android.views.dragbutton.DragDirection; import org.solovyev.android.views.dragbutton.DragEvent; import java.util.Arrays; import javax.annotation.Nullable; import javax.inject.Inject; import static org.solovyev.android.calculator.App.cast; public class DragButtonWizardStep extends WizardFragment { private static final String ACTION = "action"; @Nullable private TextView actionTextView; private DragButtonAction action = DragButtonAction.center; @Inject Typeface typeface; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); cast(this).getComponent().inject(this); } @Override protected int getViewResId() { return R.layout.cpp_wizard_step_drag_button; } @Override public void onViewCreated(View root, Bundle savedInstanceState) { super.onViewCreated(root, savedInstanceState); final DirectionDragButton dragButton =(DirectionDragButton) root.findViewById(R.id.wizard_dragbutton); dragButton.setOnClickListener(this); dragButton.setOnDragListener(new DirectionDragListener(getActivity()) { @Override protected boolean onDrag(@NonNull View view, @NonNull DragEvent event, @NonNull DragDirection direction) { if (action.dragDirection == direction) { setNextAction(); return true; } return false; } }); Adjuster.adjustText(dragButton, BaseKeyboardUi.getTextScale(getActivity())); actionTextView = (TextView) root.findViewById(R.id.wizard_dragbutton_action_textview); if (savedInstanceState != null) { setAction((DragButtonAction) savedInstanceState.getSerializable(ACTION)); } } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putSerializable(ACTION, action); } private void setNextAction() { setAction(action.getNextAction()); } private void setAction(DragButtonAction action) { if (this.action != action) { this.action = action; if (actionTextView != null) { actionTextView.setText(this.action.actionTextResId); } } } private enum DragButtonAction { center(R.string.cpp_wizard_dragbutton_action_center, null), up(R.string.cpp_wizard_dragbutton_action_up, DragDirection.up), down(R.string.cpp_wizard_dragbutton_action_down, DragDirection.down), end(R.string.cpp_wizard_dragbutton_action_end, null); private final int actionTextResId; @Nullable private final DragDirection dragDirection; DragButtonAction(int actionTextResId, @Nullable DragDirection dragDirection) { this.actionTextResId = actionTextResId; this.dragDirection = dragDirection; } @Nullable DragButtonAction getNextAction() { final DragButtonAction[] values = values(); final int position = Arrays.binarySearch(values, this); if (position < values.length - 1) { return values[position + 1]; } else { return values[0]; } } } @Override public void onClick(View v) { if(v.getId() == R.id.wizard_dragbutton) { if (action == DragButtonAction.center || action == DragButtonAction.end) { setNextAction(); } return; } super.onClick(v); } }