/*
* This file is part of FanshaweConnect.
*
* Copyright 2013 Gabriel Castro (c)
*
* FanshaweConnect is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* FanshaweConnect is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with FanshaweConnect. If not, see <http://www.gnu.org/licenses/>.
*/
package ca.GabrielCastro.fanshaweconnect.activities;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.view.inputmethod.InputMethodManager;
import ca.GabrielCastro.betterpreferences.MyPreferences;
import ca.GabrielCastro.fanshaweconnect.R;
import ca.GabrielCastro.fanshaweconnect.fragments.LoginFragment;
import ca.GabrielCastro.fanshaweconnect.fragments.ProgressDisplayFragment;
import ca.GabrielCastro.fanshaweconnect.util.pref.AvailablePrefs;
import ca.GabrielCastro.fanshawelogin.CONSTANTS;
import ca.GabrielCastro.fanshawelogin.util.CheckCredentials;
public class LoginActivity extends BaseActivity implements
LoginFragment.CallBacks,
ProgressDisplayFragment.Callbacks,
CONSTANTS {
private static final String EXTRA_REASON = "LoginActivity.extra_reason";
public static enum Reasons {
INIT,
USER_LOGGED_OUT,
INLAID_PASS,
CORRUPT_PREF
}
private static final String FRAG_TAG_LOGIN = "LoginActivity.LoginFragment";
private static final String FRAG_TAG_PROGRESS = "LoginActivity.Progress";
LoginFragment mLoginFragment;
Fragment mProgressFragment;
private Reasons mReason = Reasons.INIT;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] userFirstLastName = new String[2];
userFirstLastName[0] = MyPreferences.read(this, AvailablePrefs.FIRST_NAME);
userFirstLastName[1] = MyPreferences.read(this, AvailablePrefs.LAST_NAME);
if (userFirstLastName[0] != null && userFirstLastName[1] != null) {
startMain(userFirstLastName);
return;
}
mLoginFragment = (LoginFragment) getSupportFragmentManager().findFragmentByTag(FRAG_TAG_LOGIN);
mProgressFragment = getSupportFragmentManager().findFragmentByTag(FRAG_TAG_PROGRESS);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
if (mLoginFragment == null) {
mLoginFragment = LoginFragment.newInstance();
ft.replace(android.R.id.content, mLoginFragment, FRAG_TAG_LOGIN);
}
if (mProgressFragment == null) {
mProgressFragment = new ProgressDisplayFragment();
ft.add(android.R.id.content, mProgressFragment, FRAG_TAG_PROGRESS)
.hide(mProgressFragment);
}
ft.commit();
getReasonFromIntent();
}
private void getReasonFromIntent() {
String name = getIntent().getStringExtra(EXTRA_REASON);
if (name == null) {
name = Reasons.INIT.name();
}
mReason = Reasons.valueOf(name);
mLoginFragment.setReason(mReason);
}
@Override
public void showLoading() {
getSupportFragmentManager()
.beginTransaction()
.show(mProgressFragment)
.hide(mLoginFragment)
.setCustomAnimations(R.anim.abc_fade_out, R.anim.abc_fade_in)
.commit();
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), 0);
}
private void startMain(String[] userNameLastName) {
if (!isFinishing()) {
startActivity(MainActivity.IntentWithPersonName(this, userNameLastName));
finish();
}
}
@Override
public void success(String[] userNameLastName) {
MyPreferences.edit(this)
.put(AvailablePrefs.FIRST_NAME, userNameLastName[0])
.put(AvailablePrefs.LAST_NAME, userNameLastName[1])
.commit();
startMain(userNameLastName);
}
@Override
public void failed(CheckCredentials.FolAuthResponse code) {
getSupportFragmentManager()
.beginTransaction()
.hide(mProgressFragment)
.show(mLoginFragment)
.setCustomAnimations(R.anim.abc_fade_out, R.anim.abc_fade_in)
.commit();
}
public static Intent getIntent(Context context, Reasons reason) {
return new Intent(context, LoginActivity.class)
.putExtra(EXTRA_REASON, reason.name());
}
}