in src/main/java/org/apache/cordova/facebook/ConnectPlugin.java [41:190]
public PluginResult execute(String action, JSONArray args, final String callbackId) {
PluginResult pr = new PluginResult(PluginResult.Status.NO_RESULT);
pr.setKeepCallback(true);
if (action.equals("init")) {
try {
String appId = args.getString(0);
facebook = new Facebook(appId);
Log.d(TAG, "init: Initializing plugin.");
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this.ctx.getContext());
String access_token = prefs.getString("access_token", null);
Long expires = prefs.getLong("access_expires", -1);
if (access_token != null && expires != -1) {
this.facebook.setAccessToken(access_token);
this.facebook.setAccessExpires(expires);
try {
JSONObject o = new JSONObject(this.facebook.request("/me"));
this.userId = o.getString("id");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(facebook.isSessionValid() && this.userId != null) {
return new PluginResult(PluginResult.Status.OK, this.getResponse());
}
else {
return new PluginResult(PluginResult.Status.NO_RESULT);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return new PluginResult(PluginResult.Status.ERROR, "Invalid JSON args used. expected a string as the first arg.");
}
}
else if (action.equals("login")) {
if (facebook != null) {
final ConnectPlugin me = this;
String[] permissions = new String[args.length()];
try {
for (int i=0; i<args.length(); i++) {
permissions[i] = args.getString(i);
}
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
return new PluginResult(PluginResult.Status.ERROR, "Invalid JSON args used. Expected a string array of permissions.");
}
this.ctx.setActivityResultCallback(this);
this.permissions = permissions;
this.callbackId = callbackId;
Runnable runnable = new Runnable() {
public void run() {
me.facebook.authorize((Activity)me.ctx, me.permissions, new AuthorizeListener(me));
};
};
this.ctx.runOnUiThread(runnable);
} else {
pr = new PluginResult(PluginResult.Status.ERROR, "Must call init before login.");
}
}
else if (action.equals("logout")) {
if (facebook != null) {
try {
facebook.logout(this.ctx.getContext());
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this.ctx.getContext());
prefs.edit().putLong("access_expires", -1).commit();
prefs.edit().putString("access_token", null).commit();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
pr = new PluginResult(PluginResult.Status.MALFORMED_URL_EXCEPTION, "Error logging out.");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
pr = new PluginResult(PluginResult.Status.IO_EXCEPTION, "Error logging out.");
}
pr = new PluginResult(PluginResult.Status.OK, getResponse());
} else {
pr = new PluginResult(PluginResult.Status.ERROR, "Must call init before logout.");
}
}
else if (action.equals("getLoginStatus")) {
if (facebook != null) {
pr = new PluginResult(PluginResult.Status.OK, getResponse());
} else {
pr = new PluginResult(PluginResult.Status.ERROR, "Must call init before getLoginStatus.");
}
}
else if (action.equals("showDialog")) {
if (facebook != null) {
Bundle collect = new Bundle();
JSONObject params = null;
try {
params = args.getJSONObject(0);
} catch (JSONException e) {
params = new JSONObject();
}
final ConnectPlugin me = this;
Iterator<?> iter = params.keys();
while (iter.hasNext()) {
String key = (String) iter.next();
if (key.equals("method")) {
try {
this.method = params.getString(key);
} catch (JSONException e) {
Log.w(TAG, "Nonstring method parameter provided to dialog");
}
} else {
try {
collect.putString(key, params.getString(key));
} catch (JSONException e) {
// Need to handle JSON parameters
Log.w(TAG, "Nonstring parameter provided to dialog discarded");
}
}
}
this.paramBundle = new Bundle(collect);
Runnable runnable = new Runnable() {
public void run() {
me.facebook.dialog (me.ctx.getContext(), me.method , me.paramBundle , new UIDialogListener(me));
};
};
this.ctx.runOnUiThread(runnable);
} else {
pr = new PluginResult(PluginResult.Status.ERROR, "Must call init before showDialog.");
}
}
return pr;
}