package org.mots.haxsync.activities;
import org.json.JSONException;
import org.json.JSONObject;
import org.mots.haxsync.R;
import org.mots.haxsync.utilities.FacebookUtil;
import com.facebook.android.DialogError;
import com.facebook.android.Facebook;
import com.facebook.android.FacebookError;
import com.facebook.android.Facebook.DialogListener;
import android.accounts.Account;
import android.accounts.AccountAuthenticatorActivity;
import android.accounts.AccountManager;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.Button;
public class LoginActivity extends AccountAuthenticatorActivity {
Button mLoginButton;
private static final String TAG = "LoginActivity";
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
FacebookUtil.facebook.authorizeCallback(requestCode, resultCode, data);
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
String[] permissions = {"offline_access", "read_stream", "user_events", "friends_events", "friends_status", "user_status", "friends_photos", "user_photos", "friends_about_me", "friends_website", "email", "friends_birthday", "friends_location"};
FacebookUtil.facebook.authorize(LoginActivity.this, permissions,Facebook.FORCE_DIALOG_AUTH, new DialogListener() {
@Override
public void onComplete(Bundle values) {
FacebookUtil.accessToken = FacebookUtil.facebook.getAccessToken();
Log.i("access token", FacebookUtil.facebook.getAccessToken());
JSONObject user = FacebookUtil.getSelfInfoAsync();
AccountManager am = AccountManager.get(LoginActivity.this);
Log.i("Expires", String.valueOf(FacebookUtil.facebook.getAccessExpires()));;
if (am.getAccountsByType(LoginActivity.this.getString((R.string.ACCOUNT_TYPE))).length == 0){
try {
Bundle result = null;
Account account = new Account(user.getString("name"), LoginActivity.this.getString((R.string.ACCOUNT_TYPE)));
// AccountManager am = AccountManager.get(LoginActivity.this);
if (am.addAccountExplicitly(account, FacebookUtil.facebook.getAccessToken(), null)) {
result = new Bundle();
result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);
setAccountAuthenticatorResult(result);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(LoginActivity.this);
SharedPreferences.Editor editor = prefs.edit();
editor.putInt("permission_level", FacebookUtil.PERMISSION_LEVEL);
editor.putLong("access_expires", FacebookUtil.facebook.getAccessExpires());
editor.commit();
LoginActivity.this.finish();
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
Account account = am.getAccountsByType(LoginActivity.this.getString(R.string.ACCOUNT_TYPE))[0];
am.setPassword(account, FacebookUtil.facebook.getAccessToken());
LoginActivity.this.finish();
}
}
@Override
public void onFacebookError(FacebookError error) {
Log.e(TAG, (error.getErrorType() == null) ? "no error message" : error.getErrorType());
// Log.e(TAG, error.getMessage());
Log.i(TAG, "fberror");
LoginActivity.this.finish();
}
@Override
public void onError(DialogError e) {
Log.i(TAG, "error");
LoginActivity.this.finish();
}
@Override
public void onCancel() {
Log.i(TAG, "cancel");
LoginActivity.this.finish();
}
});
}
}