package com.ijoomer.common.classes;
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Dialog;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.text.Html;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.method.ScrollingMovementMethod;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.LinearLayout;
import android.widget.RadioGroup;
import android.widget.SeekBar;
import android.widget.TextView.BufferType;
import com.Facebook.entities.Profile;
import com.facebook.Session;
import com.ijoomer.common.configuration.IjoomerGlobalConfiguration;
import com.ijoomer.customviews.IjoomerButton;
import com.ijoomer.customviews.IjoomerCheckBox;
import com.ijoomer.customviews.IjoomerEditText;
import com.ijoomer.customviews.IjoomerTextView;
import com.ijoomer.oauth.IjoomerOauth;
import com.ijoomer.oauth.IjoomerUsersDataProvider;
import com.ijoomer.src.R;
import com.ijoomer.weservice.WebCallListener;
import com.smart.framework.CustomAlertNeutral;
/**
* This Class Contains All Method Related To IjoomerLoginMaster.
*
* @author tasol
*
*/
public abstract class IjoomerLoginMaster extends IjoomerSuperMaster {
private Dialog dialog;
private Dialog fbSelectionDialog;
public IjoomerLoginMaster() {
super();
}
@Override
public int setTabBarDividerResId() {
return 0;
}
@Override
public int setTabItemLayoutId() {
return 0;
}
@Override
public String[] setTabItemNames() {
return null;
}
@Override
public int[] setTabItemOffDrawables() {
return null;
}
@Override
public int[] setTabItemOnDrawables() {
return null;
}
@Override
public int[] setTabItemPressDrawables() {
return null;
}
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
}
@Override
public int setFooterLayoutId() {
return 0;
}
@Override
public int setHeaderLayoutId() {
return 0;
}
@Override
public View setLayoutView() {
return null;
}
/**
* Class method
*/
/**
* This method used to show register using facebook login selection dialog.
* @param profile represented facebook user object
*/
public void showUserSelectionDialog(final Profile profile) {
fbSelectionDialog= new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar);
fbSelectionDialog.setContentView(R.layout.ijoomer_facebook_user);
IjoomerTextView txtWelcome = (IjoomerTextView) fbSelectionDialog.findViewById(R.id.txtWelcome);
IjoomerButton btnNewUser = (IjoomerButton) fbSelectionDialog.findViewById(R.id.btnNewUser);
IjoomerButton btnMemberOfSite = (IjoomerButton) fbSelectionDialog.findViewById(R.id.btnMemberOfSite);
try {
txtWelcome.setText(Html.fromHtml(String.format(getString(R.string.facebook_welcome), profile.getName())));
} catch (Throwable e) {
}
btnNewUser.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showNewUserDialog(profile);
}
});
btnMemberOfSite.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showExistingUserDialog(profile);
}
});
fbSelectionDialog.show();
}
/**
* This method used to show register as new user using facebook login dialog.
* @param profile represented facebook user data json object
*/
public void showNewUserDialog(final Profile profile) {
final Dialog dialog = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar);
dialog.setContentView(R.layout.ijoomer_facebook_new_user);
final IjoomerEditText edtUserName = (IjoomerEditText) dialog.findViewById(R.id.edtUserName);
final IjoomerTextView txtName = (IjoomerTextView) dialog.findViewById(R.id.txtName);
final IjoomerTextView txtEmail = (IjoomerTextView) dialog.findViewById(R.id.txtEmail);
final LinearLayout lnrTermsNCondition = (LinearLayout) dialog.findViewById(R.id.lnrTermsNCondition);
final IjoomerTextView txtTermsNCondition = (IjoomerTextView) dialog.findViewById(R.id.txtTermsNCondition);
txtTermsNCondition.setMovementMethod(new LinkMovementMethod());
txtTermsNCondition.setText(addClickablePart(Html.fromHtml(getString(R.string.terms_n_condition_first) + " " + getString(R.string.terms_n_condition_second))), BufferType.SPANNABLE);
final IjoomerCheckBox chkTermsNCondition = (IjoomerCheckBox) dialog.findViewById(R.id.chkTermsNCondition);
txtName.setMovementMethod(new ScrollingMovementMethod());
txtEmail.setMovementMethod(new ScrollingMovementMethod());
if(IjoomerGlobalConfiguration.isEnableTerms()){
lnrTermsNCondition.setVisibility(View.VISIBLE);
}
try {
txtName.setText(profile.getName());
edtUserName.setText(profile.getUsername());
Drawable errorIcon = getResources().getDrawable(R.drawable.com_facebook_close);
errorIcon.setBounds(new Rect(0, 0, errorIcon.getIntrinsicWidth(), errorIcon.getIntrinsicHeight()));
edtUserName.setError(getString(R.string.username), errorIcon);
edtUserName.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
edtUserName.setError(null, null);
}
});
txtEmail.setText(profile.getEmail());
} catch (Throwable e) {
e.printStackTrace();
}
IjoomerButton btnBack = (IjoomerButton) dialog.findViewById(R.id.btnBack);
IjoomerButton btnCreate = (IjoomerButton) dialog.findViewById(R.id.btnCreate);
btnCreate.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (edtUserName.getText().toString().trim().length() <= 0) {
edtUserName.setError(getString(R.string.validation_value_required));
} if (IjoomerGlobalConfiguration.isEnableTerms() && !chkTermsNCondition.isChecked()) {
IjoomerUtilities.getCustomOkDialog(getString(R.string.dialog_loading_facebook_login), getString(R.string.accept_terms_and_condition), getString(R.string.ok),
R.layout.ijoomer_ok_dialog, new CustomAlertNeutral() {
@Override
public void NeutralMethod() {
}
});
}else {
final SeekBar progressBar = IjoomerUtilities.getLoadingDialog(getString(R.string.dialog_loading_connect_facebook));
IjoomerOauth.getInstance(IjoomerLoginMaster.this).authenticateUserWithFacebook(profile, edtUserName.getText().toString().trim(), new WebCallListener() {
@Override
public void onProgressUpdate(int progressCount) {
progressBar.setProgress(progressCount);
}
@Override
public void onCallComplete(int responseCode, String errorMessage, ArrayList<HashMap<String, String>> data1, Object data2) {
if (responseCode == 200) {
try {
if (getSmartApplication().readSharedPreferences().getString(SP_LAST_ACTIVITY, "").length() > 0) {
Intent intent = new Intent();
intent.setClassName(IjoomerLoginMaster.this, getSmartApplication().readSharedPreferences().getString(SP_LAST_ACTIVITY, ""));
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
getSmartApplication().writeSharedPreferences(SP_LAST_ACTIVITY, "");
startActivity(intent);
getSmartApplication().writeSharedPreferences(SP_ISLOGOUT, false);
getSmartApplication().writeSharedPreferences(SP_ISFACEBOOKLOGIN, true);
finish();
} else {
if (getSmartApplication().readSharedPreferences().getString(SP_DEFAULT_LANDING_SCREEN, "").length() > 0) {
Intent intent = new Intent();
intent.setClassName(IjoomerLoginMaster.this, getSmartApplication().readSharedPreferences().getString(SP_DEFAULT_LANDING_SCREEN, ""));
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
} else {
}
}
} catch (Throwable e) {
e.printStackTrace();
}
getSmartApplication().writeSharedPreferences(SP_ISLOGOUT, false);
getSmartApplication().writeSharedPreferences(SP_ISFACEBOOKLOGIN, true);
} else {
responseMessageHandler(responseCode, false);
}
}
});
}
}
});
btnBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
Session.getActiveSession().closeAndClearTokenInformation();
} catch (Throwable e) {
e.printStackTrace();
}
dialog.dismiss();
}
});
dialog.show();
}
/**
* This method used to show register as existing user using facebook login dialog.
* @param profile represented facebook user object
*/
public void showExistingUserDialog(final Profile profile) {
final Dialog dialog = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar);
dialog.setContentView(R.layout.ijoomer_facebook_existing_site_user);
final IjoomerEditText edtUserName = (IjoomerEditText) dialog.findViewById(R.id.edtUserName);
final IjoomerEditText edtPassword = (IjoomerEditText) dialog.findViewById(R.id.edtPassword);
IjoomerButton btnBack = (IjoomerButton) dialog.findViewById(R.id.btnBack);
IjoomerButton btnLogin = (IjoomerButton) dialog.findViewById(R.id.btnLogin);
btnLogin.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
boolean validationFlag = true;
if (edtUserName.getText().toString().trim().length() <= 0) {
edtUserName.setError(getString(R.string.validation_value_required));
validationFlag = false;
}
if (edtPassword.getText().toString().trim().length() <= 0) {
edtPassword.setError(getString(R.string.validation_value_required));
validationFlag = false;
}
if (validationFlag) {
final SeekBar progressBar = IjoomerUtilities.getLoadingDialog(getString(R.string.dialog_loading_connect_facebook));
IjoomerOauth.getInstance(IjoomerLoginMaster.this).authenticateUserWithFacebook(profile, edtUserName.getText().toString().trim(),
edtPassword.getText().toString().trim(), new WebCallListener() {
@Override
public void onProgressUpdate(int progressCount) {
progressBar.setProgress(progressCount);
}
@Override
public void onCallComplete(int responseCode, String errorMessage, ArrayList<HashMap<String, String>> data1, Object data2) {
if (responseCode == 200) {
try {
if (getSmartApplication().readSharedPreferences().getString(SP_LAST_ACTIVITY, "").length() > 0) {
Intent intent = new Intent();
intent.setClassName(IjoomerLoginMaster.this, getSmartApplication().readSharedPreferences().getString(SP_LAST_ACTIVITY, ""));
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
getSmartApplication().writeSharedPreferences(SP_LAST_ACTIVITY, "");
startActivity(intent);
getSmartApplication().writeSharedPreferences(SP_ISLOGOUT, false);
getSmartApplication().writeSharedPreferences(SP_ISFACEBOOKLOGIN, true);
finish();
} else {
if (getSmartApplication().readSharedPreferences().getString(SP_DEFAULT_LANDING_SCREEN, "").length() > 0) {
Intent intent = new Intent();
intent.setClassName(IjoomerLoginMaster.this,
getSmartApplication().readSharedPreferences().getString(SP_DEFAULT_LANDING_SCREEN, ""));
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
} else {
}
}
} catch (Throwable e) {
e.printStackTrace();
}
getSmartApplication().writeSharedPreferences(SP_ISLOGOUT, false);
getSmartApplication().writeSharedPreferences(SP_ISFACEBOOKLOGIN, true);
} else {
responseMessageHandler(responseCode, false);
}
}
});
}
}
});
btnBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
Session.getActiveSession().closeAndClearTokenInformation();
} catch (Throwable e) {
e.printStackTrace();
}
dialog.dismiss();
}
});
dialog.show();
}
/**
* This method used to add clickablepart on string.
* @param strSpanned represented string
* @return represented {@link SpannableStringBuilder}
*/
public SpannableStringBuilder addClickablePart(Spanned strSpanned) {
String str = strSpanned.toString();
SpannableStringBuilder ssb = new SpannableStringBuilder(strSpanned);
if (str.contains(getString(R.string.terms_n_condition_second))) {
ssb.setSpan(new IjoomerSpannable(Color.parseColor(getString(R.color.blue)), true) {
@Override
public void onClick(View widget) {
final SeekBar proSeekBar = IjoomerUtilities.getLoadingDialog(getString(R.string.dialog_loading_facebook_login));
new IjoomerUsersDataProvider(IjoomerLoginMaster.this).getTermsNCondition(IjoomerGlobalConfiguration.getTermsObject(), new WebCallListener() {
@Override
public void onProgressUpdate(int progressCount) {
proSeekBar.setProgress(progressCount);
}
@Override
public void onCallComplete(int responseCode, String errorMessage, ArrayList<HashMap<String, String>> data1, Object data2) {
if (responseCode == 200) {
IjoomerUtilities.getTermsNConditionDialog(getString(R.string.terms_n_condition_second), data1.get(0).get("termsNcondition"));
} else {
responseMessageHandler(responseCode, false);
}
}
});
}
}, str.indexOf(getString(R.string.terms_n_condition_second)), str.indexOf(getString(R.string.terms_n_condition_second))
+ getString(R.string.terms_n_condition_second).length(), 0);
}
return ssb;
}
/**
* This method used to show forget password dialog.
*/
public void showForgetPasswordDialog() {
dialog = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar);
dialog.setContentView(R.layout.ijoomer_forget_reset_password);
final IjoomerTextView txtTitle = (IjoomerTextView) dialog.findViewById(R.id.txtTitle);
final LinearLayout lntStep1 = (LinearLayout) dialog.findViewById(R.id.lntStep1);
final IjoomerEditText edtEmail = (IjoomerEditText) dialog.findViewById(R.id.edtEmail);
final LinearLayout lntStep2 = (LinearLayout) dialog.findViewById(R.id.lntStep2);
final IjoomerEditText edtUserName = (IjoomerEditText) dialog.findViewById(R.id.edtUserName);
final IjoomerEditText edtToken = (IjoomerEditText) dialog.findViewById(R.id.edtToken);
final LinearLayout lntStep3 = (LinearLayout) dialog.findViewById(R.id.lntStep3);
final IjoomerEditText edtPassword = (IjoomerEditText) dialog.findViewById(R.id.edtPassword);
final IjoomerEditText edtRetypePassword = (IjoomerEditText) dialog.findViewById(R.id.edtRetypePassword);
final IjoomerButton btnNext = (IjoomerButton) dialog.findViewById(R.id.btnNext);
final IjoomerButton btnCancel = (IjoomerButton) dialog.findViewById(R.id.btnCancel);
btnNext.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View paramView) {
hideSoftKeyboard();
boolean validationFlag = true;
if (lntStep1.getVisibility() == View.VISIBLE) {
if (edtEmail.getText().toString().trim().length() <= 0) {
edtEmail.setError(getString(R.string.validation_value_required));
validationFlag = false;
} else {
if (IjoomerUtilities.emailValidator(edtEmail.getText().toString().trim())) {
final SeekBar progressBar = IjoomerUtilities.getLoadingDialog(getString(R.string.dialog_loading_verifying_emailid));
IjoomerOauth.getInstance(IjoomerLoginMaster.this).forgetPasswordStep1(edtEmail.getText().toString().trim(), new WebCallListener() {
@Override
public void onProgressUpdate(int progressCount) {
progressBar.setProgress(progressCount);
}
@Override
public void onCallComplete(int responseCode, String errorMessage, ArrayList<HashMap<String, String>> data1, Object data2) {
if (responseCode == 200) {
lntStep1.setVisibility(View.GONE);
lntStep2.setVisibility(View.VISIBLE);
lntStep3.setVisibility(View.GONE);
} else {
IjoomerUtilities.getCustomOkDialog(getString(R.string.alert_title_forget_password),
getString(getResources().getIdentifier("code" + responseCode, "string", getPackageName())), getString(R.string.ok),
R.layout.ijoomer_ok_dialog, new CustomAlertNeutral() {
@Override
public void NeutralMethod() {
}
});
}
}
});
} else {
IjoomerUtilities.getCustomOkDialog(getString(R.string.alert_title_forget_password), getString(R.string.validation_invalid_email), getString(R.string.ok),
R.layout.ijoomer_ok_dialog, new CustomAlertNeutral() {
@Override
public void NeutralMethod() {
}
});
}
}
} else if (lntStep2.getVisibility() == View.VISIBLE) {
if (edtUserName.getText().toString().trim().length() <= 0) {
edtUserName.setError(getString(R.string.validation_value_required));
validationFlag = false;
}
if (edtToken.getText().toString().trim().length() <= 0) {
edtToken.setError(getString(R.string.validation_value_required));
validationFlag = false;
}
if (validationFlag) {
final SeekBar progressBar = IjoomerUtilities.getLoadingDialog(getString(R.string.dialog_loading_verifying_token));
IjoomerOauth.getInstance(IjoomerLoginMaster.this).forgetPasswordStep2(edtUserName.getText().toString().trim(), edtToken.getText().toString().trim(),
new WebCallListener() {
@Override
public void onProgressUpdate(int progressCount) {
progressBar.setProgress(progressCount);
}
@Override
public void onCallComplete(int responseCode, String errorMessage, ArrayList<HashMap<String, String>> data1, Object data2) {
if (responseCode == 200) {
lntStep1.setVisibility(View.GONE);
lntStep2.setVisibility(View.GONE);
lntStep3.setVisibility(View.VISIBLE);
btnNext.setText(getString(R.string.resetpassword_finish));
txtTitle.setText(getString(R.string.resetpassword_step3));
} else {
IjoomerUtilities.getCustomOkDialog(getString(R.string.alert_title_forget_password),
getString(getResources().getIdentifier("code" + responseCode, "string", getPackageName())), getString(R.string.ok),
R.layout.ijoomer_ok_dialog, new CustomAlertNeutral() {
@Override
public void NeutralMethod() {
}
});
}
}
});
}
} else {
if (edtPassword.getText().toString().trim().length() <= 0) {
edtPassword.setError(getString(R.string.validation_value_required));
validationFlag = false;
}
if (edtRetypePassword.getText().toString().trim().length() <= 0) {
edtRetypePassword.setError(getString(R.string.validation_value_required));
validationFlag = false;
}
if (!edtRetypePassword.getText().toString().equals(edtPassword.getText().toString())) {
edtRetypePassword.setError(getString(R.string.validation_passwod_not_match));
validationFlag = false;
}
if (validationFlag) {
final SeekBar progressBar = IjoomerUtilities.getLoadingDialog(getString(R.string.dialog_loading_resetiing_password));
IjoomerOauth.getInstance(IjoomerLoginMaster.this).forgetPasswordStep3(edtPassword.getText().toString().trim(), new WebCallListener() {
@Override
public void onProgressUpdate(int progressCount) {
progressBar.setProgress(progressCount);
}
@Override
public void onCallComplete(int responseCode, String errorMessage, ArrayList<HashMap<String, String>> data1, Object data2) {
if (responseCode == 200) {
IjoomerUtilities.getCustomOkDialog(getString(R.string.alert_title_forget_password), getString(R.string.alert_message_forget_password),
getString(R.string.ok), R.layout.ijoomer_ok_dialog, new CustomAlertNeutral() {
@Override
public void NeutralMethod() {
dialog.dismiss();
}
});
} else {
IjoomerUtilities.getCustomOkDialog(getString(R.string.alert_title_forget_password),
getString(getResources().getIdentifier("code" + responseCode, "string", getPackageName())), getString(R.string.ok),
R.layout.ijoomer_ok_dialog, new CustomAlertNeutral() {
@Override
public void NeutralMethod() {
}
});
}
}
});
}
}
}
});
btnCancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View paramView) {
dialog.dismiss();
}
});
dialog.show();
}
/**
* This method used to forgot user name.
*/
public void showForgetUserNameDialog() {
final Dialog dialog = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar);
dialog.setContentView(R.layout.ijoomer_forget_username_dialog);
final IjoomerEditText edtEmail = (IjoomerEditText) dialog.findViewById(R.id.edtEmail);
IjoomerButton btnCancel = (IjoomerButton) dialog.findViewById(R.id.btnCancel);
IjoomerButton btnSend = (IjoomerButton) dialog.findViewById(R.id.btnSend);
btnSend.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View paramView) {
hideSoftKeyboard();
if (edtEmail.getText().toString().trim().length() <= 0) {
edtEmail.setError(getString(R.string.validation_value_required));
} else {
final SeekBar progressBar = IjoomerUtilities.getLoadingDialog(getString(R.string.dialog_loading_verifying_emailid));
IjoomerOauth.getInstance(IjoomerLoginMaster.this).forgetUserName(edtEmail.getText().toString().trim(), new WebCallListener() {
@Override
public void onProgressUpdate(int progressCount) {
progressBar.setProgress(progressCount);
}
@Override
public void onCallComplete(int responseCode, String errorMessage, ArrayList<HashMap<String, String>> data1, Object data2) {
if (responseCode == 200) {
IjoomerUtilities.getCustomOkDialog(getString(R.string.dialog_title_forget_username), getString(R.string.alert_check_email), getString(R.string.ok),
R.layout.ijoomer_ok_dialog, new CustomAlertNeutral() {
@Override
public void NeutralMethod() {
dialog.dismiss();
}
});
} else {
IjoomerUtilities.getCustomOkDialog(getString(R.string.dialog_title_forget_username),
getString(getResources().getIdentifier("code" + responseCode, "string", getPackageName())), getString(R.string.ok),
R.layout.ijoomer_ok_dialog, new CustomAlertNeutral() {
@Override
public void NeutralMethod() {
}
});
}
}
});
}
}
});
btnCancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View paramView) {
dialog.dismiss();
}
});
dialog.show();
}
/**
* This method used to response messaged handler.
* @param responseCode represented response code
* @param finishActivityOnConnectionProblem represented isFinishActivity
*/
private void responseMessageHandler(final int responseCode, final boolean finishActivityOnConnectionProblem) {
IjoomerUtilities.getCustomOkDialog(getString(R.string.dialog_loading_facebook_login), getString(getResources().getIdentifier("code" + responseCode, "string", getPackageName())),
getString(R.string.ok), R.layout.ijoomer_ok_dialog, new CustomAlertNeutral() {
@Override
public void NeutralMethod() {
}
});
}
@Override
public void onBackPressed() {
try {
Session.getActiveSession().closeAndClearTokenInformation();
} catch (Throwable e) {
e.printStackTrace();
}
super.onBackPressed();
}
}