aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/main/java/org/wordpress/android/ui/people/RoleChangeDialogFragment.java
blob: 438231fe37a46a06ce38cab52d610d445dfb0fdc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
package org.wordpress.android.ui.people;

import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.RadioButton;
import android.widget.TextView;

import org.wordpress.android.R;
import org.wordpress.android.models.Role;

import de.greenrobot.event.EventBus;

public class RoleChangeDialogFragment extends DialogFragment {
    private static final String PERSON_ID_TAG = "person_id";
    private static final String PERSON_LOCAL_TABLE_BLOG_ID_TAG = "local_table_blog_id";
    private static final String ROLE_TAG = "role";

    private RoleListAdapter mRoleListAdapter;

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        Role role = mRoleListAdapter.getSelectedRole();
        outState.putSerializable(ROLE_TAG, role);
    }

    public static RoleChangeDialogFragment newInstance(long personID, int localTableBlogId, Role role) {
        RoleChangeDialogFragment roleChangeDialogFragment = new RoleChangeDialogFragment();
        Bundle args = new Bundle();

        args.putLong(PERSON_ID_TAG, personID);
        args.putInt(PERSON_LOCAL_TABLE_BLOG_ID_TAG, localTableBlogId);
        if (role != null) {
            args.putSerializable(ROLE_TAG, role);
        }

        roleChangeDialogFragment.setArguments(args);
        return roleChangeDialogFragment;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.Calypso_AlertDialog);
        builder.setTitle(R.string.role);
        builder.setNegativeButton(R.string.cancel, null);
        builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Role role = mRoleListAdapter.getSelectedRole();
                Bundle args = getArguments();
                if (args != null) {
                    long personID = args.getLong(PERSON_ID_TAG);
                    int localTableBlogId = args.getInt(PERSON_LOCAL_TABLE_BLOG_ID_TAG);
                    EventBus.getDefault().post(new RoleChangeEvent(personID, localTableBlogId, role));
                }
            }
        });

        if (mRoleListAdapter == null) {
            final Role[] userRoles = Role.userRoles();
            mRoleListAdapter = new RoleListAdapter(getActivity(), R.layout.role_list_row, userRoles);
        }
        if (savedInstanceState != null) {
            Role savedRole = (Role) savedInstanceState.getSerializable(ROLE_TAG);
            mRoleListAdapter.setSelectedRole(savedRole);
        } else {
            Bundle args = getArguments();
            if (args != null) {
                Role role = (Role) args.getSerializable(ROLE_TAG);
                mRoleListAdapter.setSelectedRole(role);
            }
        }
        builder.setAdapter(mRoleListAdapter, null);

        return builder.create();
    }

    private class RoleListAdapter extends ArrayAdapter<Role> {
        private Role mSelectedRole;

        public RoleListAdapter(Context context, int resource, Role[] objects) {
            super(context, resource, objects);
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = View.inflate(getContext(), R.layout.role_list_row, null);
            }

            final RadioButton radioButton = (RadioButton) convertView.findViewById(R.id.radio);
            TextView mainText = (TextView) convertView.findViewById(R.id.role_label);
            Role role = getItem(position);
            mainText.setText(role.toDisplayString());

            if (radioButton != null) {
                radioButton.setChecked(role == mSelectedRole);
                radioButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        changeSelection(position);
                    }
                });
            }

            convertView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    changeSelection(position);
                }
            });

            return convertView;
        }

        private void changeSelection(int position) {
            mSelectedRole = getItem(position);
            notifyDataSetChanged();
        }

        public Role getSelectedRole() {
            return mSelectedRole;
        }

        public void setSelectedRole(Role role) {
            mSelectedRole = role;
        }
    }

    public static class RoleChangeEvent {
        public final long personID;
        public final int localTableBlogId;
        public final Role newRole;

        public RoleChangeEvent(long personID, int localTableBlogId, Role newRole) {
            this.personID = personID;
            this.localTableBlogId = localTableBlogId;
            this.newRole = newRole;
        }
    }
}