/* * Copyright (C) 2014 Pedro Vicente Gómez Sánchez. * * 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. */ package com.github.pedrovgs.tuentitv.ui.activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup; import android.widget.ImageButton; import android.widget.LinearLayout; import com.github.pedrovgs.tuentitv.R; import com.github.pedrovgs.tuentitv.presenter.EnterPasswordPresenter; import java.util.LinkedList; import java.util.List; import javax.inject.Inject; /** * Activity used to show enter password user interface and handle all the presentation logic * related to the enter password process. * * @author Pedro Vicente Gómez Sánchez. */ public class EnterPasswordActivity extends BaseActivity implements EnterPasswordPresenter.View { public static final String RESULT_KEY = "result"; public static final int CHANGE_PASSWORD_TIME_IN_MILLIS = 700; private static final long CLOSE_DELAY = 1000; @Inject EnterPasswordPresenter presenter; private boolean isLastPasswordElement; private final Handler handler = new Handler(); @Override public void onCreate(Bundle savedInstanceState) { setContentView(R.layout.enter_password_activity); super.onCreate(savedInstanceState); presenter.setView(this); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_DOWN: presenter.onDpadDownPressed(); return true; case KeyEvent.KEYCODE_DPAD_LEFT: presenter.onDpadLeftPressed(); return true; case KeyEvent.KEYCODE_DPAD_RIGHT: presenter.onDpadRightPressed(); return true; case KeyEvent.KEYCODE_DPAD_UP: presenter.onDpadUpPressed(); return true; default: return super.onKeyDown(keyCode, event); } } @Override public void showTopArrowOnCurrentPasswordField() { int passwordElementResource = R.drawable.icn_arrow_top; showPasswordElement(passwordElementResource); } @Override public void showRightArrowOnCurrentPasswordField() { int passwordElementResource = R.drawable.icn_arrow_right; showPasswordElement(passwordElementResource); } @Override public void showLeftArrowOnCurrentPasswordField() { int passwordElementResource = R.drawable.icn_arrow_left; showPasswordElement(passwordElementResource); } @Override public void showDownArrowOnCurrentPasswordField() { int passwordElementResource = R.drawable.icn_arrow_down; showPasswordElement(passwordElementResource); } @Override public void hidePreviousPasswordElements() { View currentViewWithFocus = getCurrentFocus(); ViewGroup parent = (ViewGroup) currentViewWithFocus.getParent(); for (int i = 0; i < parent.getChildCount(); i++) { View ib_element_item = parent.getChildAt(i); if (currentViewWithFocus.equals(ib_element_item)) { ImageButton previousFocusedElement = (ImageButton) parent.getChildAt(i - 1); updatePasswordElementWithAsterisk(previousFocusedElement, 0); } } } @Override public void moveFocusToNextElement() { View focusedElement = getCurrentFocus(); ViewGroup parent = (ViewGroup) focusedElement.getParent(); for (int i = 0; i < parent.getChildCount(); i++) { View ib_element_item = parent.getChildAt(i); if (focusedElement.equals(ib_element_item)) { View nextFocusedElement = parent.getChildAt(i + 1); nextFocusedElement.requestFocus(); this.isLastPasswordElement = parent.getChildAt(i + 2) == null; } } } @Override public boolean isLastElementFocused() { return isLastPasswordElement; } @Override public void closeViewWithSuccessPassword() { new Handler().postDelayed(new Runnable() { @Override public void run() { finishWithResult(); } }, CLOSE_DELAY); } private void finishWithResult() { Intent returnIntent = new Intent(); returnIntent.putExtra(RESULT_KEY, true); setResult(RESULT_OK, returnIntent); finish(); } private void showPasswordElement(int passwordElementResource) { ImageButton ib_password_element = (ImageButton) getCurrentFocus(); ib_password_element.setImageResource(passwordElementResource); ib_password_element.setBackgroundResource(R.color.transparent); LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) ib_password_element.getLayoutParams(); lp.height = LinearLayout.LayoutParams.WRAP_CONTENT; ib_password_element.setLayoutParams(lp); updatePasswordElementWithAsterisk(ib_password_element, CHANGE_PASSWORD_TIME_IN_MILLIS); } private void updatePasswordElementWithAsterisk(final ImageButton ib_password_element, long delay) { if (ib_password_element == null) { return; } handler.postDelayed(new Runnable() { @Override public void run() { ib_password_element.setImageResource(R.drawable.icn_pass_ok_blue); } }, delay); } @Override protected List getModules() { return new LinkedList(); } }