package com.lovamimi; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import com.facebook.SessionState; import com.mixpanel.android.mpmetrics.MixpanelAPI; public class BaseActivity extends Activity { private MixpanelAPI mixpanel; private ProgressDialog dialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mixpanel = MixpanelAPI.getInstance(this, "e516b8643dc2d4d9b1779d243b7db7e5"); } protected void track(String eventName) { mixpanel.track("Android:" + eventName, null); } protected void e(String s) { Log.e(this.getClass().toString(), s); } protected void i(String s) { Log.i(this.getClass().toString(), s); } @Override protected void onDestroy() { super.onDestroy(); mixpanel.flush(); } public String getSessionId() { LovamimiApplication app = (LovamimiApplication) getApplication(); return app.getSessionId(); } public void setSessionId(String sessionId) { LovamimiApplication app = (LovamimiApplication) getApplication(); app.setSessionId(sessionId); } private void lovamimiLogin(final Context context, final Class nextActivityClass, String fbSessionId) { new AsyncTask<String, Void, String>() { @Override protected void onPostExecute(String sessionId) { super.onPostExecute(sessionId); dialog.cancel(); setSessionId(sessionId); Intent intent = new Intent(context, nextActivityClass); putExtraSecret(intent); startActivity(intent); } @Override protected String doInBackground(String... strings) { String fbSessionId = strings[0]; LovamimiApplication app = (LovamimiApplication)getApplication(); String deviceToken = app.getDeviceToken(); return com.lovamimi.Session.login(fbSessionId, deviceToken); } }.execute(fbSessionId); } private void tryLogin(final Context context, final Class nextActivityClass) { dialog = ProgressDialog.show(this, "ロバ耳", "ログイン中"); // Facebook login com.facebook.Session.openActiveSession(this, true, new com.facebook.Session.StatusCallback() { @Override public void call(com.facebook.Session session, SessionState state, Exception exception) { if (session.isOpened()) { lovamimiLogin(context, nextActivityClass, session.getAccessToken()); } } }); } private void showLoginDialog(final Class nextActivityClass) { track("Showed Login Dialog"); AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); alertDialogBuilder.setTitle("ログイン"); alertDialogBuilder.setMessage("匿名投稿といいね!をするには Facebook ログインが必要です"); alertDialogBuilder.setPositiveButton("Facebook ログイン", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { track("Clicked button Login Dialog"); tryLogin(BaseActivity.this, nextActivityClass); } }); alertDialogBuilder.setNegativeButton("キャンセル", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { track("Canceled Login Dialog"); } }); alertDialogBuilder.setCancelable(true); AlertDialog alertDialog = alertDialogBuilder.create(); alertDialog.show(); } protected void loginAndNextActivity(Class nextActivityClass) { if (getSessionId() == null) { showLoginDialog(nextActivityClass); } else { Intent intent = new Intent(this, nextActivityClass); putExtraSecret(intent); startActivity(intent); } } private void putExtraSecret(Intent intent) { if (getIntent().getExtras() != null) { Secret secret = (Secret) getIntent().getExtras().get("secret"); intent.putExtra("sid", secret.sid); } } }