package com.roctik.ufeg.view; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.widget.EditText; import android.widget.ImageButton; import android.widget.Toast; import com.facebook.AccessToken; import com.facebook.CallbackManager; import com.facebook.FacebookCallback; import com.facebook.FacebookException; import com.facebook.FacebookSdk; import com.facebook.GraphRequest; import com.facebook.login.LoginResult; import com.facebook.login.widget.LoginButton; import com.google.android.gms.auth.api.signin.GoogleSignIn; import com.google.android.gms.auth.api.signin.GoogleSignInAccount; import com.google.android.gms.auth.api.signin.GoogleSignInClient; import com.google.android.gms.auth.api.signin.GoogleSignInOptions; import com.google.android.gms.common.api.ApiException; import com.google.android.gms.tasks.Task; import com.roctik.ufeg.R; import com.roctik.ufeg.model.Login; import com.roctik.ufeg.model.PostLogin; import com.roctik.ufeg.model.PostSignUp; import com.roctik.ufeg.model.SignUp; import com.roctik.ufeg.presenter.LoginPresenter; import com.roctik.ufeg.presenter.SignUpPresenter; import org.json.JSONException; import java.util.Objects; import info.hoang8f.widget.FButton; public class LoginActivity extends AppCompatActivity implements ViewLogin, ViewSignUp { public static final String APP_PREFERENCES = "mysettings"; public static final String APP_PREFERENCES_TOKEN = "token"; private static final String TAG = LoginActivity.class.getSimpleName(); SharedPreferences mSettings; FButton signIn; FButton signUp; EditText edtEmail; EditText edtPass; ImageButton facebook, google; SignUpPresenter presenterSignUp; LoginPresenter presenter; private GoogleSignInClient googleSignInClient; private CallbackManager callbackManager; LoginButton loginButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mSettings = getSharedPreferences(APP_PREFERENCES, Context.MODE_PRIVATE); FacebookSdk.sdkInitialize(getApplicationContext()); callbackManager = CallbackManager.Factory.create(); setContentView(R.layout.activity_login); signIn = findViewById(R.id.btnSignIn); signUp = findViewById(R.id.btnSignUp); edtEmail = findViewById(R.id.edtEmail); edtPass = findViewById(R.id.edtPassword); loginButton = findViewById(R.id.login_button); //instagram = findViewById(R.id.instagram); facebook = findViewById(R.id.facebook); google = findViewById(R.id.google); presenter = new LoginPresenter(); presenter.setViewLogin(this); presenterSignUp = new SignUpPresenter(); presenterSignUp.setView(this); signUp.setOnClickListener((v) -> { Intent signInActivity = new Intent(this, RegistrationActivity.class); startActivity(signInActivity); }); signIn.setOnClickListener((v) -> { PostLogin postLogin = new PostLogin(); postLogin.setEmail(Objects.requireNonNull(edtEmail.getText()).toString()); postLogin.setPassword(Objects.requireNonNull(edtPass.getText()).toString()); presenter.getLogin(postLogin); }); loginButton.registerCallback(callbackManager, new FacebookCallback() { @Override public void onSuccess(LoginResult loginResult) { AccessToken accessToken = loginResult.getAccessToken(); useLoginInformation(accessToken); } @Override public void onCancel() { } @Override public void onError(FacebookException error) { } }); facebook.setOnClickListener((v) -> loginButton.performClick()); GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build(); googleSignInClient = GoogleSignIn.getClient(this, gso); google.setOnClickListener((v) -> { Intent signInIntent = googleSignInClient.getSignInIntent(); startActivityForResult(signInIntent, 101); }); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); callbackManager.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) if (requestCode == 101) { try { Task task = GoogleSignIn.getSignedInAccountFromIntent(data); GoogleSignInAccount account = task.getResult(ApiException.class); PostLogin postLogin = new PostLogin(); postLogin.setEmail(Objects.requireNonNull(account).getEmail()); postLogin.setPassword(account.getDisplayName() + account.getEmail()); presenter.getLogin(postLogin); PostSignUp postSignUp = new PostSignUp(); postSignUp.setName(account.getDisplayName()); postSignUp.setEmail(account.getEmail()); postSignUp.setPassword(account.getDisplayName() + account.getEmail()); presenterSignUp.getSignUp(postSignUp); } catch (ApiException e) { Log.w(TAG, "signInResult:failed code=" + e.getStatusCode()); } } } private void useLoginInformation(AccessToken accessToken) { //OnCompleted is invoked once the GraphRequest is successful GraphRequest request = GraphRequest.newMeRequest(accessToken, (object, response) -> { try { System.out.println(object.names()); String name = object.getString("name"); String email = object.getString("id"); PostSignUp postSignUp = new PostSignUp(); postSignUp.setName(name); postSignUp.setEmail(email + "@facebook.com"); postSignUp.setPassword(name + email); presenterSignUp.getSignUp(postSignUp); PostLogin postLogin = new PostLogin(); postLogin.setEmail(email + "@facebook.com"); postLogin.setPassword(name + email); presenter.getLogin(postLogin); } catch (JSONException e) { e.printStackTrace(); } }); // We set parameters to the GraphRequest using a Bundle. Bundle parameters = new Bundle(); parameters.putString("fields", "id,name,email,picture.width(200)"); request.setParameters(parameters); // Initiate the GraphRequest request.executeAsync(); } @Override public void getLogin(Login login) { if (login.getStatus().equals("ok")) { Intent main = new Intent(this, MainActivity.class); startActivity(main); SharedPreferences.Editor editor = mSettings.edit(); editor.putString(APP_PREFERENCES_TOKEN, login.getToken()); editor.apply(); finish(); } else { Toast.makeText(this, "Ошибка, проверьте логин и пароль", Toast.LENGTH_LONG).show(); } } @Override public void getSignUp(SignUp signUp) { System.out.println(signUp.getStatus()); if (signUp.getStatus().equals("ok")) { SharedPreferences.Editor editor = mSettings.edit(); editor.putString(APP_PREFERENCES_TOKEN, signUp.getToken()); editor.apply(); Intent main = new Intent(this, MainActivity.class); startActivity(main); finish(); } else { Toast.makeText(this, "Ошибка, попробуйте снова", Toast.LENGTH_LONG).show(); } } }