package com.vladstoick.stiridinromania; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.content.IntentSender; import android.content.SharedPreferences; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import com.actionbarsherlock.app.SherlockFragmentActivity; import com.android.volley.VolleyError; import com.facebook.Request; import com.facebook.Response; import com.facebook.Session; import com.facebook.SessionState; import com.facebook.model.GraphUser; import com.facebook.widget.LoginButton; import com.google.android.gms.auth.GoogleAuthUtil; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GooglePlayServicesClient; import com.google.android.gms.common.Scopes; import com.google.android.gms.plus.PlusClient; import com.newrelic.agent.android.NewRelic; import com.vladstoick.DataModel.JSONParsing; import com.vladstoick.DataModel.NewsDataSource; import com.vladstoick.Utils.LoginVolleyRequest; import org.json.JSONObject; /** * Created by vlad on 7/17/13. */ public class LoginActivity extends SherlockFragmentActivity implements View.OnClickListener, Session.StatusCallback , GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener { private int userId = 0; public String token; ProgressDialog pd; private static final int REQUEST_CODE_RESOLVE_ERR = 9000; private PlusClient mPlusClient; private ConnectionResult mConnectionResult; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); NewRelic.withApplicationToken("AAda1a6278e5ef8e4349079aa07d6b5039aaa395a0").start(this); SharedPreferences settings = getSharedPreferences("appPref", Context.MODE_PRIVATE); if (settings.getInt("user_id", 0) != 0){ NewsDataSource.setInstance(new NewsDataSource(getApplication(),settings)); gotoAllGroupsActivity(); return; } setContentView(R.layout.activity_login); NewsDataSource.setInstance(null); getSupportActionBar().hide(); pd = new ProgressDialog(this); pd.setCancelable(false); pd.setMessage(getString(R.string.loading)); LoginButton fbLoginButton = (LoginButton) findViewById(R.id.login_facebook); fbLoginButton.setSessionStatusCallback(this); findViewById(R.id.login_google).setOnClickListener(this); mPlusClient = new PlusClient.Builder(this, this, this) .setVisibleActivities(null) .build(); if(mConnectionResult !=null) mPlusClient.clearDefaultAccount(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.login_google: googleLogin(); break; } } public void googleLogin() { if (mConnectionResult == null) { pd.show(); mPlusClient.connect(); } else { try { mConnectionResult.startResolutionForResult(this, REQUEST_CODE_RESOLVE_ERR); } catch (IntentSender.SendIntentException e) { // Try connecting again. mConnectionResult = null; mPlusClient.connect(); } } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(data == null ) return; if (requestCode == REQUEST_CODE_RESOLVE_ERR && resultCode == RESULT_OK) { mConnectionResult = null; mPlusClient.connect(); } else { Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); } } @Override public void onConnected(Bundle bundle) { final String gUserId= mPlusClient.getCurrentPerson().getId(); final SharedPreferences.Editor editor = getSharedPreferences("appPref", Context.MODE_PRIVATE).edit(); editor.putString("user_id_google", gUserId); editor.commit(); AsyncTask<Void, Void, String> task = new AsyncTask<Void, Void, String>() { @Override protected String doInBackground(Void... params) { try { token = GoogleAuthUtil.getToken(getApplicationContext(), mPlusClient.getAccountName(), "oauth2:" + Scopes.PLUS_LOGIN); return token; } catch (Exception e){ e.printStackTrace(); return null; } } @Override protected void onPostExecute(String token) { super.onPostExecute(token); LoginVolleyRequest loginVolleyRequest = new LoginVolleyRequest("gp", token,gUserId, new com.android.volley.Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject jsonObject) { pd.dismiss(); JSONParsing.parseServerLogin(jsonObject, editor); SharedPreferences settings = getSharedPreferences("appPref", Context.MODE_PRIVATE); NewsDataSource .setInstance(new NewsDataSource(getApplication(), settings)); gotoAllGroupsActivity(); } }, new com.android.volley.Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { volleyError.printStackTrace(); } } ); StiriApp.queue.add(loginVolleyRequest); } }; task.execute(); } @Override public void onDisconnected() { } @Override public void onConnectionFailed(ConnectionResult result) { if (pd.isShowing()) { if (result.hasResolution()) { try { result.startResolutionForResult(this, REQUEST_CODE_RESOLVE_ERR); } catch (IntentSender.SendIntentException e) { mPlusClient.connect(); } } } mConnectionResult = result; } //FACEBOOK LOGIN Request.GraphUserCallback graphUserCallback = new Request.GraphUserCallback() { @Override public void onCompleted(GraphUser user, Response response) { if (user == null) throw new RuntimeException(); final SharedPreferences.Editor editor = getSharedPreferences("appPref", Context.MODE_PRIVATE).edit(); editor.putString("user_id_fb", user.getId()); editor.commit(); LoginVolleyRequest loginVolleyRequest = new LoginVolleyRequest("fb", token, user.getId(), new com.android.volley.Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject jsonObject) { pd.dismiss(); JSONParsing.parseServerLogin(jsonObject, editor); SharedPreferences settings = getSharedPreferences("appPref", Context.MODE_PRIVATE); NewsDataSource.setInstance(new NewsDataSource(getApplication(), settings)); gotoAllGroupsActivity(); } }, new com.android.volley.Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { volleyError.printStackTrace(); } } ); StiriApp.queue.add(loginVolleyRequest); } }; @Override public void call(Session session, SessionState state, Exception exception) { if (session.isOpened()) { pd.show(); final SharedPreferences.Editor editor = getSharedPreferences("appPref", Context.MODE_PRIVATE).edit(); token = session.getAccessToken(); editor.putString("user_token_fb", token); editor.commit(); Request.executeMeRequestAsync(session, graphUserCallback); } } //GENERAL private void gotoAllGroupsActivity() { Intent intent = new Intent(this, NewsGroupListActivity.class); startActivity(intent); finish(); } }