/userVoiceSDK/src/main/java/com/uservoice/uservoicesdk/dialog/SuggestionDialogFragment.java
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}