package net.android.facebook;
import org.ruboto.irb.R;
import org.json.JSONObject;
import org.json.JSONTokener;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.Toast;
import com.facebook.android.DialogError;
import com.facebook.android.Facebook;
import com.facebook.android.FacebookError;
import com.facebook.android.SessionStore;
import com.facebook.android.Facebook.DialogListener;
public class TestConnect extends Activity {
private Facebook mFacebook;
private CheckBox mFacebookBtn;
private ProgressDialog mProgress;
public Button btn1;
private static final String[] PERMISSIONS = new String[] {"publish_stream", "read_stream", "offline_access"};
private static final String APP_ID = "340864435993007";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.connect);
Intent i = getIntent();
final String x= i.getStringExtra("code");
final String Sname= i.getStringExtra("Sname");
mFacebookBtn = (CheckBox) findViewById(R.id.cb_facebook);
mProgress = new ProgressDialog(this);
mFacebook = new Facebook(APP_ID);
SessionStore.restore(mFacebook, this);
if (mFacebook.isSessionValid()) {
mFacebookBtn.setChecked(true);
String name = SessionStore.getName(this);
name = (name.equals("")) ? "Unknown" : name;
mFacebookBtn.setText(" Facebook (" + name + ")");
mFacebookBtn.setTextColor(Color.WHITE);
}
mFacebookBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
onFacebookClick();
}
});
btn1 = (Button) findViewById(R.id.button1);
if (!mFacebook.isSessionValid())
btn1.setVisibility(View.INVISIBLE);
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent connect = new Intent(TestConnect.this, TestPost.class);
connect.putExtra("code", x);
connect.putExtra("Sname", Sname);
startActivity(connect);
finish();
}
});
}
private void onFacebookClick() {
if (mFacebook.isSessionValid()) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Delete current Facebook connection?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
fbLogout();
btn1.setVisibility(View.INVISIBLE);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
mFacebookBtn.setChecked(true);
}
});
final AlertDialog alert = builder.create();
alert.show();
} else {
mFacebookBtn.setChecked(false);
mFacebook.authorize(this, PERMISSIONS, -1, new FbLoginDialogListener());
}
}
private final class FbLoginDialogListener implements DialogListener {
public void onComplete(Bundle values) {
SessionStore.save(mFacebook, TestConnect.this);
mFacebookBtn.setText(" Facebook (No Name)");
mFacebookBtn.setChecked(true);
mFacebookBtn.setTextColor(Color.WHITE);
getFbName();
}
public void onFacebookError(FacebookError error) {
Toast.makeText(TestConnect.this, "Facebook connection failed", Toast.LENGTH_SHORT).show();
mFacebookBtn.setChecked(false);
}
public void onError(DialogError error) {
Toast.makeText(TestConnect.this, "Facebook connection failed", Toast.LENGTH_SHORT).show();
mFacebookBtn.setChecked(false);
}
public void onCancel() {
mFacebookBtn.setChecked(false);
}
}
private void getFbName() {
mProgress.setMessage("Finalizing ...");
mProgress.show();
btn1.setVisibility(View.VISIBLE);
new Thread() {
@Override
public void run() {
String name = "";
int what = 1;
try {
String me = mFacebook.request("me");
JSONObject jsonObj = (JSONObject) new JSONTokener(me).nextValue();
name = jsonObj.getString("name");
what = 0;
} catch (Exception ex) {
ex.printStackTrace();
}
mFbHandler.sendMessage(mFbHandler.obtainMessage(what, name));
}
}.start();
}
private void fbLogout() {
mProgress.setMessage("Disconnecting from Facebook");
mProgress.show();
new Thread() {
@Override
public void run() {
SessionStore.clear(TestConnect.this);
int what = 1;
try {
mFacebook.logout(TestConnect.this);
what = 0;
} catch (Exception ex) {
ex.printStackTrace();
}
mHandler.sendMessage(mHandler.obtainMessage(what));
}
}.start();
}
private Handler mFbHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
mProgress.dismiss();
if (msg.what == 0) {
String username = (String) msg.obj;
username = (username.equals("")) ? "No Name" : username;
SessionStore.saveName(username, TestConnect.this);
mFacebookBtn.setText(" Facebook (" + username + ")");
Toast.makeText(TestConnect.this, "Connected to Facebook as " + username, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(TestConnect.this, "Connected to Facebook", Toast.LENGTH_SHORT).show();
}
}
};
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
mProgress.dismiss();
if (msg.what == 1) {
Toast.makeText(TestConnect.this, "Facebook logout failed", Toast.LENGTH_SHORT).show();
} else {
mFacebookBtn.setChecked(false);
mFacebookBtn.setText(" Facebook (Not connected)");
mFacebookBtn.setTextColor(Color.GRAY);
Toast.makeText(TestConnect.this, "Disconnected from Facebook", Toast.LENGTH_SHORT).show();
}
}
};
}