package com.facebook.android;
import java.util.Vector;
import android.app.Activity;
import android.app.Dialog;
import android.graphics.Color;
import android.os.Bundle;
import android.text.method.LinkMovementMethod;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ListView;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;
import android.widget.TextView;
import android.widget.Toast;
import com.facebook.android.Facebook.DialogListener;
public class PermissionsDialog extends Dialog {
private final static int TAB_HEIGHT = 50;
private Button mGetPermissions;
private TextView mPermissionDetails;
private Activity activity;
private ListView userPermissionsList, friendPermissionsList, extendedPermissionsList;
private BaseAdapter userPermissionsAdapter, friendPermissionsAdapter,
extendedPermissionAdapter;
protected Vector<String> reqPermVector;
String[] user_permissions = { "user_about_me", "user_activities", "user_birthday",
"user_checkins", "user_education_history", "user_events", "user_groups",
"user_hometown", "user_interests", "user_likes", "user_location", "user_notes",
"user_online_presence", "user_photos", "user_photo_video_tags", "user_relationships",
"user_relationship_details", "user_religion_politics", "user_status", "user_videos",
"user_website", "user_work_history" };
String[] friend_permissions = { "friends_about_me", "friends_activities", "friends_birthday",
"friends_checkins", "friends_education_history", "friends_events", "friends_groups",
"friends_hometown", "friends_interests", "friends_likes", "friends_location",
"friends_notes", "friends_online_presence", "friends_photos",
"friends_photo_video_tags", "friends_relationships", "friends_relationship_details",
"friends_religion_politics", "friends_status", "friends_videos", "friends_website",
"friends_work_history" };
String[] extended_permissions = { "ads_management", "create_event", "create_note", "email",
"export_stream", "manage_friendlists", "manage_groups", "manage_pages",
"offline_access", "publish_actions", "photo_upload", "publish_checkins",
"publish_stream", "read_friendlists", "read_insights", "read_mailbox", "read_requests",
"read_stream", "rsvp_event", "share_item", "status_update", "sms", "video_upload",
"xmpp_login" };
public PermissionsDialog(Activity activity) {
super(activity);
this.activity = activity;
setTitle(activity.getString(R.string.permissions_request));
reqPermVector = new Vector<String>();
}
/*
* Layout the permission dialog
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.permissions_list);
LayoutParams params = getWindow().getAttributes();
params.width = LayoutParams.FILL_PARENT;
params.height = LayoutParams.FILL_PARENT;
getWindow().setAttributes((android.view.WindowManager.LayoutParams) params);
mPermissionDetails = (TextView) findViewById(R.id.permission_detail);
mPermissionDetails.setMovementMethod(LinkMovementMethod.getInstance());
userPermissionsList = (ListView) findViewById(R.id.user_permissions_list);
friendPermissionsList = (ListView) findViewById(R.id.friend_permissions_list);
extendedPermissionsList = (ListView) findViewById(R.id.extended_permissions_list);
userPermissionsAdapter = new PermissionsListAdapter(user_permissions);
userPermissionsList.setAdapter(userPermissionsAdapter);
friendPermissionsAdapter = new PermissionsListAdapter(friend_permissions);
friendPermissionsList.setAdapter(friendPermissionsAdapter);
extendedPermissionAdapter = new PermissionsListAdapter(extended_permissions);
extendedPermissionsList.setAdapter(extendedPermissionAdapter);
TabHost tabHost = (TabHost) findViewById(R.id.tabHost);
tabHost.setup();
TabSpec spec1 = tabHost.newTabSpec("Tab 1");
spec1.setIndicator(activity.getString(R.string.user));
spec1.setContent(R.id.user_permissions_list);
TabSpec spec2 = tabHost.newTabSpec("Tab 2");
spec2.setIndicator(activity.getString(R.string.friend));
spec2.setContent(R.id.friend_permissions_list);
TabSpec spec3 = tabHost.newTabSpec("Tab 3");
spec3.setIndicator(activity.getString(R.string.extended));
spec3.setContent(R.id.extended_permissions_list);
tabHost.addTab(spec1);
tabHost.addTab(spec2);
tabHost.addTab(spec3);
tabHost.setCurrentTab(0);
tabHost.getTabWidget().getChildAt(0).getLayoutParams().height = TAB_HEIGHT;
tabHost.getTabWidget().getChildAt(1).getLayoutParams().height = TAB_HEIGHT;
tabHost.getTabWidget().getChildAt(2).getLayoutParams().height = TAB_HEIGHT;
mGetPermissions = (Button) findViewById(R.id.get_permissions_button);
mGetPermissions.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/*
* Source Tag: perms_tag Call authorize to get the new
* permissions
*/
if (reqPermVector.isEmpty() && Utility.mFacebook.isSessionValid()) {
Toast.makeText(activity.getBaseContext(), "No Permissions selected.",
Toast.LENGTH_SHORT).show();
PermissionsDialog.this.dismiss();
} else {
String[] permissions = reqPermVector.toArray(new String[0]);
Utility.mFacebook.authorize(activity, permissions, new LoginDialogListener());
}
}
});
}
/*
* Callback when user has authorized the app with the new permissions
*/
private final class LoginDialogListener implements DialogListener {
@Override
public void onComplete(Bundle values) {
// Inform the parent loginlistener so it can update the user's
// profile pic and name on the home screen.
SessionEvents.onLoginSuccess();
Toast.makeText(activity.getBaseContext(), "New Permissions granted.",
Toast.LENGTH_SHORT).show();
PermissionsDialog.this.dismiss();
}
@Override
public void onFacebookError(FacebookError error) {
Toast.makeText(activity.getBaseContext(),
"Facebook Error! No new permissions granted.", Toast.LENGTH_SHORT).show();
PermissionsDialog.this.dismiss();
}
@Override
public void onError(DialogError error) {
Toast.makeText(activity.getBaseContext(), "Error! No new permissions granted.",
Toast.LENGTH_SHORT).show();
PermissionsDialog.this.dismiss();
}
@Override
public void onCancel() {
Toast.makeText(activity.getBaseContext(),
"Action cancelled, No new permissions granted.", Toast.LENGTH_SHORT).show();
PermissionsDialog.this.dismiss();
}
}
/**
* Definition of the list adapter
*/
public class PermissionsListAdapter extends BaseAdapter {
private LayoutInflater mInflater;
String[] permissions;
boolean[] isChecked;
public PermissionsListAdapter(String[] permissions) {
this.permissions = permissions;
this.isChecked = new boolean[permissions.length];
mInflater = LayoutInflater.from(activity.getBaseContext());
}
@Override
public int getCount() {
return permissions.length;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View hView = convertView;
CheckBox checkbox;
if (hView == null) {
hView = mInflater.inflate(R.layout.permission_item, null);
checkbox = (CheckBox) hView.findViewById(R.id.permission_checkbox);
hView.setTag(checkbox);
} else {
checkbox = (CheckBox) hView.getTag();
}
checkbox.setText(this.permissions[position]);
checkbox.setId(position);
if (Utility.currentPermissions.containsKey(this.permissions[position])
&& Utility.currentPermissions.get(this.permissions[position]).equals("1")) {
checkbox.setTextColor(Color.GREEN);
checkbox.setChecked(true);
checkbox.setEnabled(false);
checkbox.setOnCheckedChangeListener(null);
} else {
checkbox.setTextColor(Color.WHITE);
checkbox.setChecked(this.isChecked[position]);
checkbox.setEnabled(true);
checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton button, boolean checked) {
isChecked[button.getId()] = checked;
if (checked) {
reqPermVector.add(button.getText().toString());
} else if (reqPermVector.contains(button.getText())) {
reqPermVector.remove(button.getText());
}
}
});
}
return hView;
}
}
}