package mx.ambmultimedia.brillamexico.activities;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.text.Html;
import android.util.Base64;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
import com.facebook.Request;
import com.facebook.Response;
import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.UiLifecycleHelper;
import com.facebook.model.GraphUser;
import com.facebook.widget.LoginButton;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.JsonHttpResponseHandler;
import com.loopj.android.http.RequestParams;
import org.apache.http.Header;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import mx.ambmultimedia.brillamexico.R;
import mx.ambmultimedia.brillamexico.utils.Config;
public class LoginStep5 extends FragmentActivity {
Context ctx;
Config config;
private String Nombre;
private int CampoDeAccion;
private Boolean isReturn;
Boolean isLogin;
private UiLifecycleHelper uiHelper;
private Session.StatusCallback callback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState sessionState, Exception e) {
onSessionChange (session, sessionState, e);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login_step5);
ctx = this;
config = new Config(ctx);
isLogin = Boolean.valueOf(config.get("isLogin", "false"));
/***
* Obteniendo datos del activity anterior
*/
Bundle bundle = getIntent().getExtras();
CampoDeAccion = bundle.getInt("CampoDeAccion");
Nombre = bundle.getString("Nombre");
isReturn = Boolean.valueOf(bundle.getString("ReturnUser"));
String pHiText = getString(R.string.l_text_11);
pHiText = pHiText.replaceAll("__username__", Nombre);
TextView hiText = (TextView) findViewById(R.id.hiText);
if (isReturn) {
hiText.setText("¡Hola de nuevo!, por favor vuelve a iniciar sesión");
} else {
hiText.setText(Html.fromHtml(pHiText));
}
/***
* Creando Login de facebook
*/
uiHelper = new UiLifecycleHelper(this, callback);
uiHelper.onCreate(savedInstanceState);
LoginButton loginBtn = (LoginButton) findViewById(R.id.authButton);
loginBtn.setPublishPermissions(Arrays.asList("email", "public_profile", "publish_actions"));
try {
PackageInfo info = getPackageManager().getPackageInfo(
"mx.ambmultimedia.brillamexico",
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (PackageManager.NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
}
@Override
protected void onResume() {
super.onResume();
Session session = Session.getActiveSession();
if (session != null && (session.isClosed() || session.isOpened())) {
onSessionChange(session, session.getState(), null);
}
uiHelper.onResume();
}
@Override
protected void onPause() {
super.onPause();
uiHelper.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
uiHelper.onDestroy();
}
@Override
protected void onSaveInstanceState(Bundle bundle) {
super.onSaveInstanceState(bundle);
uiHelper.onSaveInstanceState(bundle);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
uiHelper.onActivityResult(requestCode, resultCode, data);
}
// Facebook Methods
public void onSessionChange (Session session, SessionState sessionState, Exception e) {
if (session != null && session.isOpened() && !isLogin) {
Request.newMeRequest(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null) {
final String fbID = user.getId();
if (!isReturn) {
String email = user.getProperty("email").toString();
if (Nombre.isEmpty()) {
Nombre = user.getFirstName();
}
RequestParams nuevoUsuario = new RequestParams();
nuevoUsuario.put("fbid", fbID);
nuevoUsuario.put("twid", "");
nuevoUsuario.put("name", Nombre);
nuevoUsuario.put("email", email);
nuevoUsuario.put("fieldaction_id", CampoDeAccion);
nuevoUsuario.put("gender", user.getProperty("gender").toString());
nuevoUsuario.put("age", "");
final String hostname = getString(R.string.hostname);
final AsyncHttpClient client = new AsyncHttpClient();
client.post(hostname + "/user/register", nuevoUsuario, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONArray response) {
config.set("isLogin", "true");
config.set("fbID", fbID);
config.set("isReload", "true");
try {
JSONObject user = response.getJSONObject(0);
config.set("user", user.toString());
} catch (JSONException e) {}
Intent intent = new Intent(LoginStep5.this, Logro.class);
intent.putExtra("Reference", "Register");
intent.putExtra("LogroID", "1");
startActivity(intent);
}
@Override
public void onFailure(int statusCode, Header[] headers, String response, Throwable e) {
String msg = "[" + statusCode + "|u/register] " + e.getMessage();
Toast.makeText(ctx, msg, Toast.LENGTH_LONG).show();
}
});
} else {
config.set("isLogin", "true");
config.set("fbID", fbID);
config.set("isReload", "true");
Intent intent = new Intent(LoginStep5.this, UserProfile.class);
startActivity(intent);
}
}
}
}).executeAsync();
} else {
config.clear();
}
}
}