/* * Created by Itzik Braun on 12/3/2015. * Copyright (c) 2015 deluge. All rights reserved. * * Last Modification at: 3/12/15 4:27 PM */ package com.braunster.chatsdk.activities.abstracted; import android.content.Intent; import android.widget.EditText; import com.braunster.chatsdk.R; import com.braunster.chatsdk.Utils.Debug; import com.braunster.chatsdk.Utils.DialogUtils; import com.braunster.chatsdk.activities.ChatSDKBaseActivity; import com.braunster.chatsdk.activities.ChatSDKMainActivity; import com.braunster.chatsdk.dao.BUser; import com.braunster.chatsdk.network.AbstractNetworkAdapter; import com.braunster.chatsdk.network.BDefines; import com.braunster.chatsdk.network.BFacebookManager; import com.braunster.chatsdk.network.BNetworkManager; import com.braunster.chatsdk.object.BError; import com.facebook.FacebookException; import com.facebook.FacebookOperationCanceledException; import com.facebook.Session; import com.facebook.SessionState; import com.facebook.widget.LoginButton; import org.apache.commons.lang3.StringUtils; import org.jdeferred.DoneCallback; import org.jdeferred.FailCallback; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import timber.log.Timber; /** * Created by itzik on 6/8/2014. */ public class ChatSDKAbstractLoginActivity extends ChatSDKBaseActivity { private static final String TAG = ChatSDKAbstractLoginActivity.class.getSimpleName(); private static boolean DEBUG = Debug.LoginActivity; private boolean exitOnBackPressed = false; protected EditText etEmail, etPass; protected LoginButton facebookLogin; /** Passed to the activity in the intent extras, Indicates that the activity was called after the user press the logout button, * That means the activity wont try to authenticate in inResume. */ public static final String FLAG_LOGGED_OUT = "LoggedOut"; protected void initViews(){ facebookLogin = (LoginButton) findViewById(R.id.chat_sdk_facebook_button); } @Override protected void onResume() { super.onResume(); // If there is preferences saved dont check auth ot the info does not contain AccountType. Map<String, ?> loginInfo =BNetworkManager.sharedManager().getNetworkAdapter().getLoginInfo(); if (loginInfo != null && loginInfo.containsKey(BDefines.Prefs.AccountTypeKey)) if (getIntent() == null || getIntent().getExtras() == null || !getIntent().getExtras().containsKey(FLAG_LOGGED_OUT)) { showProgDialog(getString(R.string.authenticating)); authenticate().done(new DoneCallback<BUser>() { @Override public void onDone(BUser bUser) { if (DEBUG) Timber.d("Authenticated"); dismissProgDialog(); afterLogin(); } }) .fail(new FailCallback<BError>() { @Override public void onFail(BError bError) { dismissProgDialog(); if (DEBUG) Timber.d("Auth Failed"); /*FIXME remove if not needed. if (bError.code != BError.Code.NO_LOGIN_INFO) showAlertToast(getString(R.string.login_activity_auth_failed));*/ } }); } } /* Dismiss dialog and open main activity.*/ protected void afterLogin(){ // Indexing the user. BUser currentUser = getNetworkAdapter().currentUserModel(); if(getNetworkAdapter().currentUserModel() != null) { getNetworkAdapter().pushUser(); } Intent logout = new Intent(ChatSDKMainActivity.Action_clear_data); sendBroadcast(logout); dismissProgDialog(); } public void passwordLogin(){ if (!checkFields()) return; showProgDialog(getString(R.string.connecting)); Map<String, Object> data = AbstractNetworkAdapter.getMap( new String[]{BDefines.Prefs.LoginTypeKey, BDefines.Prefs.LoginEmailKey, BDefines.Prefs.LoginPasswordKey}, BDefines.BAccountType.Password, etEmail.getText().toString(), etPass.getText().toString()); BNetworkManager.sharedManager().getNetworkAdapter() .authenticateWithMap(data).done(new DoneCallback<Object>() { @Override public void onDone(Object o) { afterLogin(); } }).fail(new FailCallback<BError>() { @Override public void onFail(BError bError) { toastErrorMessage(bError, true); dismissProgDialog(); } }); } public void register(){ if (!checkFields()) return; showProgDialog(getString(R.string.registering)); Map<String, Object> data = AbstractNetworkAdapter.getMap( new String[]{BDefines.Prefs.LoginTypeKey, BDefines.Prefs.LoginEmailKey, BDefines.Prefs.LoginPasswordKey }, BDefines.BAccountType.Register, etEmail.getText().toString(), etPass.getText().toString()); BNetworkManager.sharedManager().getNetworkAdapter() .authenticateWithMap(data).done(new DoneCallback<Object>() { @Override public void onDone(Object o) { afterLogin(); } }).fail(new FailCallback<BError>() { @Override public void onFail(BError bError) { toastErrorMessage(bError, false); dismissProgDialog(); } }); } public void anonymosLogin(){ showProgDialog(getString(R.string.connecting)); Map<String, Object> data = new HashMap<String, Object>(); data.put(BDefines.Prefs.LoginTypeKey, BDefines.BAccountType.Anonymous); BNetworkManager.sharedManager().getNetworkAdapter() .authenticateWithMap(data).done(new DoneCallback<Object>() { @Override public void onDone(Object o) { afterLogin(); } }).fail(new FailCallback<BError>() { @Override public void onFail(BError bError) { toastErrorMessage(bError, false); dismissProgDialog(); } }); } public void twitterLogin(){ if (!BNetworkManager.sharedManager().getNetworkAdapter().twitterEnabled()) { showAlertToast("Twitter is disabled."); return; } final DialogUtils.ChatSDKTwitterLoginDialog dialog = DialogUtils.ChatSDKTwitterLoginDialog.getInstance(); dialog.promise().done(new DoneCallback<Object>() { @Override public void onDone(Object o) { dialog.dismiss(); showProgDialog(getString(R.string.authenticating)); afterLogin(); } }).fail(new FailCallback<BError>() { @Override public void onFail(BError bError) { dialog.dismiss(); toastErrorMessage(bError, true); } }); dialog.show(getFragmentManager(), "TwitterLogin"); } protected void setFacebookLogin(){ facebookLogin.setOnErrorListener(new LoginButton.OnErrorListener() { @Override public void onError(FacebookException error) { if (error instanceof FacebookOperationCanceledException) return; else if (error.getMessage() != null && error.getMessage().equals("Log in attempt aborted.")) return; showAlertToast("Facebook error: " + error.getMessage() + " " + error.getClass().getSimpleName()); } }); facebookLogin.setReadPermissions(Arrays.asList("email", "user_friends")); } /* Exit Stuff*/ @Override public void onBackPressed() { if (exitOnBackPressed) { // Exit the app. // If logged out from the main activity pressing back in the LoginActivity will get me back to the Main so this have to be done. Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } else super.onBackPressed(); } public void toastErrorMessage(BError error, boolean login){ String errorMessage = ""; if (StringUtils.isNotBlank(error.message)) errorMessage = error.message; else if (login) errorMessage = getString(R.string.login_activity_failed_to_login_toast); else errorMessage = getString(R.string.login_activity_failed_to_register_toast); showAlertToast(errorMessage); } protected boolean checkFields(){ if (etEmail.getText().toString().isEmpty()) { showAlertToast(getString(R.string.login_activity_no_mail_toast)); return false; } if (etPass.getText().toString().isEmpty()) { showAlertToast( getString(R.string.login_activity_no_password_toast) ); return false; } return true; } public void onSessionStateChange(Session session, SessionState state, Exception exception){ if (!getNetworkAdapter().facebookEnabled()) { return; } if (exception != null) { exception.printStackTrace(); if (exception instanceof FacebookOperationCanceledException) { return; } }else showOrUpdateProgDialog(getString(R.string.authenticating)); BFacebookManager.onSessionStateChange(session, state, exception).done(new DoneCallback<Object>() { @Override public void onDone(Object o) { if (DEBUG) Timber.i("Connected to facebook"); afterLogin(); } }).fail(new FailCallback<BError>() { @Override public void onFail(BError bError) { if (DEBUG) Timber.i(TAG, "Error connecting to Facebook"); // Toast.makeText(LoginActivity.this, "Failed connect to facebook.", Toast.LENGTH_SHORT).show(); showAlertToast( getString(R.string.login_activity_facebook_connection_fail_toast) ); BFacebookManager.logout(ChatSDKAbstractLoginActivity.this); dismissProgDialog(); } }); } protected void setExitOnBackPressed(boolean exitOnBackPressed) { this.exitOnBackPressed = exitOnBackPressed; } }