PageRenderTime 55ms CodeModel.GetById 28ms app.highlight 24ms RepoModel.GetById 1ms app.codeStats 0ms

/userVoiceSDK/src/main/java/com/uservoice/uservoicesdk/dialog/SuggestionDialogFragment.java

https://gitlab.com/adamlwalker/android-discourse
Java | 201 lines | 179 code | 22 blank | 0 comment | 17 complexity | 5aebf045213828ef1c76fd84a0ec18f6 MD5 | raw file
  1package com.uservoice.uservoicesdk.dialog;
  2
  3import android.annotation.SuppressLint;
  4import android.app.AlertDialog;
  5import android.app.Dialog;
  6import android.graphics.Color;
  7import android.os.Bundle;
  8import android.view.View;
  9import android.widget.CheckBox;
 10import android.widget.ImageView;
 11import android.widget.ListView;
 12import android.widget.TextView;
 13import android.widget.Toast;
 14
 15import com.uservoice.uservoicesdk.R;
 16import com.uservoice.uservoicesdk.Session;
 17import com.uservoice.uservoicesdk.activity.ForumActivity;
 18import com.uservoice.uservoicesdk.activity.InstantAnswersActivity;
 19import com.uservoice.uservoicesdk.babayaga.Babayaga;
 20import com.uservoice.uservoicesdk.deflection.Deflection;
 21import com.uservoice.uservoicesdk.flow.SigninManager;
 22import com.uservoice.uservoicesdk.image.ImageCache;
 23import com.uservoice.uservoicesdk.model.Comment;
 24import com.uservoice.uservoicesdk.model.Suggestion;
 25import com.uservoice.uservoicesdk.rest.Callback;
 26import com.uservoice.uservoicesdk.ui.DefaultCallback;
 27import com.uservoice.uservoicesdk.ui.PaginatedAdapter;
 28import com.uservoice.uservoicesdk.ui.PaginationScrollListener;
 29import com.uservoice.uservoicesdk.ui.Utils;
 30
 31import java.text.DateFormat;
 32import java.util.ArrayList;
 33import java.util.List;
 34import java.util.Locale;
 35
 36@SuppressLint("ValidFragment")
 37public class SuggestionDialogFragment extends DialogFragmentBugfixed {
 38    private Suggestion suggestion;
 39    private PaginatedAdapter<Comment> adapter;
 40    private View headerView;
 41    private View view;
 42
 43    public SuggestionDialogFragment(Suggestion suggestion) {
 44        this.suggestion = suggestion;
 45    }
 46
 47    @Override
 48    public Dialog onCreateDialog(Bundle savedInstanceState) {
 49        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
 50        setStyle(STYLE_NO_TITLE, getTheme());
 51        if (!Utils.isDarkTheme(getActivity())) {
 52            builder.setInverseBackgroundForced(true);
 53        }
 54        view = getActivity().getLayoutInflater().inflate(R.layout.uv_idea_dialog, null);
 55        headerView = getActivity().getLayoutInflater().inflate(R.layout.uv_idea_dialog_header, null);
 56        headerView.findViewById(R.id.uv_subscribe).setOnClickListener(new View.OnClickListener() {
 57            @Override
 58            public void onClick(View v) {
 59                final DefaultCallback<Suggestion> callback = new DefaultCallback<Suggestion>(getActivity()) {
 60                    @Override
 61                    public void onModel(Suggestion model) {
 62                        if (getActivity() instanceof InstantAnswersActivity)
 63                            Deflection.trackDeflection("subscribed", model);
 64                        suggestionSubscriptionUpdated(model);
 65                    }
 66                };
 67                if (suggestion.isSubscribed()) {
 68                    suggestion.unsubscribe(callback);
 69                } else {
 70                    if (Session.getInstance().getEmail() != null) {
 71                        SigninManager.signinForSubscribe(getActivity(), Session.getInstance().getEmail(), new Runnable() {
 72                            @Override
 73                            public void run() {
 74                                suggestion.subscribe(callback);
 75                            }
 76                        });
 77                    } else {
 78                        SubscribeDialogFragment dialog = new SubscribeDialogFragment(suggestion, SuggestionDialogFragment.this);
 79                        dialog.show(getFragmentManager(), "SubscribeDialogFragment");
 80                    }
 81                }
 82            }
 83        });
 84        headerView.findViewById(R.id.uv_post_comment).setOnClickListener(new View.OnClickListener() {
 85            @Override
 86            public void onClick(View v) {
 87                CommentDialogFragment dialog = new CommentDialogFragment(suggestion, SuggestionDialogFragment.this);
 88                dialog.show(getActivity().getSupportFragmentManager(), "CommentDialogFragment");
 89            }
 90        });
 91        ListView listView = (ListView) view.findViewById(R.id.uv_list);
 92        listView.addHeaderView(headerView);
 93        displaySuggestion(view, suggestion);
 94        adapter = getListAdapter();
 95        listView.setAdapter(adapter);
 96        listView.setDivider(null);
 97        listView.setOnScrollListener(new PaginationScrollListener(adapter));
 98        builder.setView(view);
 99        builder.setNegativeButton(R.string.uv_close, null);
100        Babayaga.track(Babayaga.Event.VIEW_IDEA, suggestion.getId());
101        return builder.create();
102    }
103
104    public void suggestionSubscriptionUpdated(Suggestion model) {
105        CheckBox checkbox = (CheckBox) headerView.findViewById(R.id.uv_subscribe_checkbox);
106        if (suggestion.isSubscribed()) {
107            Toast.makeText(getActivity(), R.string.uv_msg_subscribe_success, Toast.LENGTH_SHORT).show();
108            checkbox.setChecked(true);
109        } else {
110            Toast.makeText(getActivity(), R.string.uv_msg_unsubscribe, Toast.LENGTH_SHORT).show();
111            checkbox.setChecked(false);
112        }
113        displaySuggestion(view, suggestion);
114        if (getActivity() instanceof ForumActivity)
115            ((ForumActivity) getActivity()).suggestionUpdated(model);
116    }
117
118    private PaginatedAdapter<Comment> getListAdapter() {
119        return new PaginatedAdapter<Comment>(getActivity(), R.layout.uv_comment_item, new ArrayList<Comment>()) {
120            @Override
121            protected int getTotalNumberOfObjects() {
122                return suggestion.getNumberOfComments();
123            }
124
125            @Override
126            protected void customizeLayout(View view, Comment model) {
127                TextView textView = (TextView) view.findViewById(R.id.uv_text);
128                textView.setText(model.getText());
129
130                textView = (TextView) view.findViewById(R.id.uv_name);
131                textView.setText(model.getUserName());
132
133                textView = (TextView) view.findViewById(R.id.uv_date);
134                textView.setText(DateFormat.getDateInstance().format(model.getCreatedAt()));
135
136                ImageView avatar = (ImageView) view.findViewById(R.id.uv_avatar);
137                ImageCache.getInstance().loadImage(model.getAvatarUrl(), avatar);
138            }
139
140            @Override
141            public boolean isEnabled(int position) {
142                return false;
143            }
144
145            @Override
146            protected void loadPage(int page, Callback<List<Comment>> callback) {
147                Comment.loadComments(suggestion, page, callback);
148            }
149        };
150    }
151
152    public void commentPosted(Comment comment) {
153        adapter.add(0, comment);
154        suggestion.commentPosted(comment);
155        displaySuggestion(view, suggestion);
156    }
157
158    private void displaySuggestion(View view, Suggestion suggestion) {
159        TextView status = (TextView) view.findViewById(R.id.uv_status);
160        TextView responseStatus = (TextView) view.findViewById(R.id.uv_response_status);
161        View responseDivider = view.findViewById(R.id.uv_response_divider);
162        TextView title = (TextView) view.findViewById(R.id.uv_title);
163
164        if (suggestion.isSubscribed()) {
165            ((CheckBox) view.findViewById(R.id.uv_subscribe_checkbox)).setChecked(true);
166        }
167
168        if (suggestion.getStatus() == null) {
169            status.setVisibility(View.GONE);
170            int defaultColor = Color.DKGRAY;
171            responseStatus.setTextColor(defaultColor);
172            responseDivider.setBackgroundColor(defaultColor);
173        } else {
174            int color = Color.parseColor(suggestion.getStatusColor());
175            status.setBackgroundColor(color);
176            status.setText(suggestion.getStatus());
177            responseStatus.setTextColor(color);
178            responseStatus.setText(String.format(getString(R.string.uv_admin_response_format), suggestion.getStatus().toUpperCase(Locale.getDefault())));
179            responseDivider.setBackgroundColor(color);
180        }
181
182        title.setText(suggestion.getTitle());
183        ((TextView) view.findViewById(R.id.uv_text)).setText(suggestion.getText());
184        ((TextView) view.findViewById(R.id.uv_creator)).setText(String.format(view.getContext().getString(R.string.uv_posted_by_format), suggestion.getCreatorName(), DateFormat.getDateInstance().format(suggestion.getCreatedAt())));
185
186        if (suggestion.getAdminResponseText() == null) {
187            view.findViewById(R.id.uv_admin_response).setVisibility(View.GONE);
188        } else {
189            view.findViewById(R.id.uv_admin_response).setVisibility(View.VISIBLE);
190            ((TextView) view.findViewById(R.id.uv_admin_name)).setText(suggestion.getAdminResponseUserName());
191            ((TextView) view.findViewById(R.id.uv_response_date)).setText(DateFormat.getDateInstance().format(suggestion.getAdminResponseCreatedAt()));
192            ((TextView) view.findViewById(R.id.uv_response_text)).setText(suggestion.getAdminResponseText());
193            ImageView avatar = (ImageView) view.findViewById(R.id.uv_admin_avatar);
194            ImageCache.getInstance().loadImage(suggestion.getAdminResponseAvatarUrl(), avatar);
195        }
196
197        ((TextView) view.findViewById(R.id.uv_comment_count)).setText(Utils.getQuantityString(view, R.plurals.uv_comments, suggestion.getNumberOfComments()).toUpperCase(Locale.getDefault()));
198        ((TextView) view.findViewById(R.id.uv_subscriber_count)).setText(String.format(view.getContext().getResources().getQuantityString(R.plurals.uv_number_of_subscribers_format, suggestion.getNumberOfSubscribers()), Utils.getQuantityString(view, R.plurals.uv_subscribers, suggestion.getNumberOfSubscribers())));
199    }
200
201}