package info.justaway.adapter;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import butterknife.ButterKnife;
import butterknife.Bind;
import de.greenrobot.event.EventBus;
import info.justaway.R;
import info.justaway.event.AlertDialogEvent;
import info.justaway.model.AccessTokenManager;
import info.justaway.model.UserListWithRegistered;
import info.justaway.task.DestroyUserListSubscriptionTask;
import info.justaway.task.DestroyUserListTask;
import info.justaway.widget.FontelloTextView;
import twitter4j.UserList;
public class SubscribeUserListAdapter extends ArrayAdapter<UserListWithRegistered> {
private LayoutInflater mInflater;
private int mLayout;
static class ViewHolder {
@Bind(R.id.checkbox) CheckBox mCheckBox;
@Bind(R.id.trash) FontelloTextView mTrash;
ViewHolder(View view) {
ButterKnife.bind(this, view);
}
}
public SubscribeUserListAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mLayout = textViewResourceId;
}
public UserListWithRegistered findByUserListId(Long userListId) {
for (int i = 0; i < getCount(); i++) {
UserListWithRegistered userListWithRegistered = getItem(i);
if (userListWithRegistered.getUserList().getId() == userListId) {
return userListWithRegistered;
}
}
return null;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
// ビューを受け取る
View view = convertView;
if (view == null) {
// 受け取ったビューがnullなら新しくビューを生成
view = mInflater.inflate(this.mLayout, null);
if (view == null) {
return null;
}
viewHolder = new ViewHolder(view);
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag();
}
final UserListWithRegistered userListWithRegistered = getItem(position);
final UserList userList = userListWithRegistered.getUserList();
viewHolder.mTrash.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (AccessTokenManager.getUserId() == userList.getUser().getId()) {
// 自分のリストの場合はリスト削除
DialogFragment dialog = new DestroyUserListDialogFragment();
Bundle args = new Bundle(1);
args.putSerializable("userList", userList);
dialog.setArguments(args);
EventBus.getDefault().post(new AlertDialogEvent(dialog));
} else {
// 他人のリストの場合はリストの購読解除
DialogFragment dialog = new DestroyUserListSubscriptionDialogFragment();
Bundle args = new Bundle(1);
args.putSerializable("userList", userList);
dialog.setArguments(args);
EventBus.getDefault().post(new AlertDialogEvent(dialog));
}
}
});
if (AccessTokenManager.getUserId() == userList.getUser().getId()) {
viewHolder.mCheckBox.setText(userList.getName());
} else {
viewHolder.mCheckBox.setText(userList.getFullName());
}
viewHolder.mCheckBox.setOnCheckedChangeListener(null);
viewHolder.mCheckBox.setChecked(userListWithRegistered.isRegistered());
viewHolder.mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
userListWithRegistered.setRegistered(b);
}
});
return view;
}
public static final class DestroyUserListDialogFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final UserList userList = (UserList) getArguments().getSerializable("userList");
if (userList == null) {
return null;
}
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.confirm_destroy_user_list);
builder.setMessage(userList.getName());
builder.setPositiveButton(getString(R.string.button_yes),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
new DestroyUserListTask(userList).execute();
dismiss();
}
}
);
builder.setNegativeButton(getString(R.string.button_no),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dismiss();
}
}
);
return builder.create();
}
}
public static final class DestroyUserListSubscriptionDialogFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final UserList userList = (UserList) getArguments().getSerializable("userList");
if (userList == null) {
return null;
}
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.confirm_destroy_user_list_subscribe);
builder.setMessage(userList.getName());
builder.setPositiveButton(getString(R.string.button_yes),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
new DestroyUserListSubscriptionTask(userList).execute();
dismiss();
}
}
);
builder.setNegativeButton(getString(R.string.button_no),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dismiss();
}
}
);
return builder.create();
}
}
}