/* * Catroid: An on-device visual programming system for Android devices * Copyright (C) 2010-2016 The Catrobat Team * (<http://developer.catrobat.org/credits>) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * An additional term exception under section 7 of the GNU Affero * General Public License, version 3, is available at * http://developer.catrobat.org/license_additional_term * * This program 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.catrobat.catroid.ui.dialogs; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnShowListener; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.view.LayoutInflater; import android.view.View; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; import com.facebook.AccessToken; import org.catrobat.catroid.ProjectManager; import org.catrobat.catroid.R; import org.catrobat.catroid.common.Constants; import org.catrobat.catroid.transfers.CheckUserNameAvailableTask; import org.catrobat.catroid.transfers.FacebookExchangeTokenTask; import org.catrobat.catroid.transfers.FacebookLogInTask; import org.catrobat.catroid.transfers.GoogleExchangeCodeTask; import org.catrobat.catroid.transfers.GoogleLogInTask; public class OAuthUsernameDialog extends DialogFragment implements CheckUserNameAvailableTask.OnCheckUserNameAvailableCompleteListener, FacebookExchangeTokenTask.OnFacebookExchangeTokenCompleteListener, FacebookLogInTask.OnFacebookLogInCompleteListener, GoogleExchangeCodeTask.OnFacebookExchangeCodeCompleteListener, GoogleLogInTask.OnGoogleServerLogInCompleteListener { public static final String DIALOG_FRAGMENT_TAG = "dialog_oauth_username"; private EditText usernameEditText; private String openAuthProvider; @Override public Dialog onCreateDialog(Bundle savedInstanceState) { View rootView = LayoutInflater.from(getActivity()).inflate(R.layout.dialog_sign_in_oauth_username, null); usernameEditText = (EditText) rootView.findViewById(R.id.dialog_signin_oauth_username); usernameEditText.setText(""); Bundle bundle = getArguments(); if (bundle != null) { openAuthProvider = bundle.getString(Constants.CURRENT_OAUTH_PROVIDER); } final AlertDialog chooseUsernameDialog = new AlertDialog.Builder(getActivity()).setView(rootView) .setTitle(R.string.sign_in_dialog_title).setPositiveButton(R.string.ok, null).create(); chooseUsernameDialog.setCanceledOnTouchOutside(true); chooseUsernameDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); chooseUsernameDialog.setOnShowListener(new OnShowListener() { @Override public void onShow(DialogInterface dialog) { InputMethodManager inputManager = (InputMethodManager) getActivity().getSystemService( Context.INPUT_METHOD_SERVICE); inputManager.showSoftInput(usernameEditText, InputMethodManager.SHOW_IMPLICIT); Button confirmUsernameButton = chooseUsernameDialog.getButton(AlertDialog.BUTTON_POSITIVE); confirmUsernameButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { handleConfirmUsernameButtonClick(); } }); } }); return chooseUsernameDialog; } private void handleConfirmUsernameButtonClick() { String username = usernameEditText.getText().toString().trim(); if (username.isEmpty()) { new AlertDialog.Builder(getActivity()).setTitle(R.string.error) .setMessage(R.string.signin_choose_username_empty).setPositiveButton(R.string.ok, null).show(); } else { CheckUserNameAvailableTask checkUserNameAvailableTask = new CheckUserNameAvailableTask(getActivity(), username); checkUserNameAvailableTask.setOnCheckUserNameAvailableCompleteListener(this); checkUserNameAvailableTask.execute(); } } @Override public void onCheckUserNameAvailableComplete(Boolean userNameAvailable, String username) { if (userNameAvailable) { new CustomAlertDialogBuilder(getActivity()).setTitle(R.string.error).setMessage(R.string.oauth_username_taken) .setPositiveButton(R.string.ok, null).show(); } else { SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); if (openAuthProvider.equals(Constants.FACEBOOK)) { sharedPreferences.edit().putString(Constants.FACEBOOK_USERNAME, username).commit(); FacebookExchangeTokenTask facebookExchangeTokenTask = new FacebookExchangeTokenTask(getActivity(), AccessToken.getCurrentAccessToken().getToken(), sharedPreferences.getString(Constants.FACEBOOK_EMAIL, Constants.NO_FACEBOOK_EMAIL), sharedPreferences.getString(Constants.FACEBOOK_USERNAME, Constants.NO_FACEBOOK_USERNAME), sharedPreferences.getString(Constants.FACEBOOK_ID, Constants.NO_FACEBOOK_ID), sharedPreferences.getString(Constants.FACEBOOK_LOCALE, Constants.NO_FACEBOOK_LOCALE) ); facebookExchangeTokenTask.setOnFacebookExchangeTokenCompleteListener(this); facebookExchangeTokenTask.execute(); } else if (openAuthProvider.equals(Constants.GOOGLE_PLUS)) { sharedPreferences.edit().putString(Constants.GOOGLE_USERNAME, username).commit(); GoogleExchangeCodeTask googleExchangeCodeTask = new GoogleExchangeCodeTask(getActivity(), sharedPreferences.getString(Constants.GOOGLE_EXCHANGE_CODE, Constants.NO_GOOGLE_EXCHANGE_CODE), sharedPreferences.getString(Constants.GOOGLE_EMAIL, Constants.NO_GOOGLE_EMAIL), sharedPreferences.getString(Constants.GOOGLE_USERNAME, Constants.NO_GOOGLE_USERNAME), sharedPreferences.getString(Constants.GOOGLE_ID, Constants.NO_GOOGLE_ID), sharedPreferences.getString(Constants.GOOGLE_LOCALE, Constants.NO_GOOGLE_LOCALE), sharedPreferences.getString(Constants.GOOGLE_ID_TOKEN, Constants.NO_GOOGLE_ID_TOKEN)); googleExchangeCodeTask.setOnGoogleExchangeCodeCompleteListener(this); googleExchangeCodeTask.execute(); } } } @Override public void onFacebookExchangeTokenComplete(Activity activity) { SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); FacebookLogInTask facebookLogInTask = new FacebookLogInTask(getActivity(), sharedPreferences.getString(Constants.FACEBOOK_EMAIL, Constants.NO_FACEBOOK_EMAIL), sharedPreferences.getString(Constants.FACEBOOK_USERNAME, Constants.NO_FACEBOOK_USERNAME), sharedPreferences.getString(Constants.FACEBOOK_ID, Constants.NO_FACEBOOK_ID), sharedPreferences.getString(Constants.FACEBOOK_LOCALE, Constants.NO_FACEBOOK_LOCALE) ); facebookLogInTask.setOnFacebookLogInCompleteListener(this); facebookLogInTask.execute(); } @Override public void onFacebookLogInComplete() { dismiss(); ProjectManager.getInstance().signInFinished(getFragmentManager(), null); } @Override public void onGoogleExchangeCodeComplete() { SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); GoogleLogInTask googleLogInTask = new GoogleLogInTask(getActivity(), sharedPreferences.getString(Constants.GOOGLE_EMAIL, Constants.NO_GOOGLE_EMAIL), sharedPreferences.getString(Constants.GOOGLE_USERNAME, Constants.NO_GOOGLE_USERNAME), sharedPreferences.getString(Constants.GOOGLE_ID, Constants.NO_GOOGLE_ID), sharedPreferences.getString(Constants.GOOGLE_LOCALE, Constants.NO_GOOGLE_LOCALE) ); googleLogInTask.setOnGoogleServerLogInCompleteListener(this); googleLogInTask.execute(); } @Override public void onGoogleServerLogInComplete() { dismiss(); ProjectManager.getInstance().signInFinished(getFragmentManager(), null); } }