package com.uservoice.uservoicesdk.dialog; import android.annotation.SuppressLint; import android.app.AlertDialog; import android.app.Dialog; import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.uservoice.uservoicesdk.R; import com.uservoice.uservoicesdk.Session; import com.uservoice.uservoicesdk.activity.ForumActivity; import com.uservoice.uservoicesdk.activity.InstantAnswersActivity; import com.uservoice.uservoicesdk.babayaga.Babayaga; import com.uservoice.uservoicesdk.deflection.Deflection; import com.uservoice.uservoicesdk.flow.SigninManager; import com.uservoice.uservoicesdk.image.ImageCache; import com.uservoice.uservoicesdk.model.Comment; import com.uservoice.uservoicesdk.model.Suggestion; import com.uservoice.uservoicesdk.rest.Callback; import com.uservoice.uservoicesdk.ui.DefaultCallback; import com.uservoice.uservoicesdk.ui.PaginatedAdapter; import com.uservoice.uservoicesdk.ui.PaginationScrollListener; import com.uservoice.uservoicesdk.ui.Utils; import java.text.DateFormat; import java.util.ArrayList; import java.util.List; import java.util.Locale; @SuppressLint("ValidFragment") public class SuggestionDialogFragment extends DialogFragmentBugfixed { private Suggestion suggestion; private PaginatedAdapter<Comment> adapter; private View headerView; private View view; public SuggestionDialogFragment(Suggestion suggestion) { this.suggestion = suggestion; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); setStyle(STYLE_NO_TITLE, getTheme()); if (!Utils.isDarkTheme(getActivity())) { builder.setInverseBackgroundForced(true); } view = getActivity().getLayoutInflater().inflate(R.layout.uv_idea_dialog, null); headerView = getActivity().getLayoutInflater().inflate(R.layout.uv_idea_dialog_header, null); headerView.findViewById(R.id.uv_subscribe).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final DefaultCallback<Suggestion> callback = new DefaultCallback<Suggestion>(getActivity()) { @Override public void onModel(Suggestion model) { if (getActivity() instanceof InstantAnswersActivity) Deflection.trackDeflection("subscribed", model); suggestionSubscriptionUpdated(model); } }; if (suggestion.isSubscribed()) { suggestion.unsubscribe(callback); } else { if (Session.getInstance().getEmail() != null) { SigninManager.signinForSubscribe(getActivity(), Session.getInstance().getEmail(), new Runnable() { @Override public void run() { suggestion.subscribe(callback); } }); } else { SubscribeDialogFragment dialog = new SubscribeDialogFragment(suggestion, SuggestionDialogFragment.this); dialog.show(getFragmentManager(), "SubscribeDialogFragment"); } } } }); headerView.findViewById(R.id.uv_post_comment).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { CommentDialogFragment dialog = new CommentDialogFragment(suggestion, SuggestionDialogFragment.this); dialog.show(getActivity().getSupportFragmentManager(), "CommentDialogFragment"); } }); ListView listView = (ListView) view.findViewById(R.id.uv_list); listView.addHeaderView(headerView); displaySuggestion(view, suggestion); adapter = getListAdapter(); listView.setAdapter(adapter); listView.setDivider(null); listView.setOnScrollListener(new PaginationScrollListener(adapter)); builder.setView(view); builder.setNegativeButton(R.string.uv_close, null); Babayaga.track(Babayaga.Event.VIEW_IDEA, suggestion.getId()); return builder.create(); } public void suggestionSubscriptionUpdated(Suggestion model) { CheckBox checkbox = (CheckBox) headerView.findViewById(R.id.uv_subscribe_checkbox); if (suggestion.isSubscribed()) { Toast.makeText(getActivity(), R.string.uv_msg_subscribe_success, Toast.LENGTH_SHORT).show(); checkbox.setChecked(true); } else { Toast.makeText(getActivity(), R.string.uv_msg_unsubscribe, Toast.LENGTH_SHORT).show(); checkbox.setChecked(false); } displaySuggestion(view, suggestion); if (getActivity() instanceof ForumActivity) ((ForumActivity) getActivity()).suggestionUpdated(model); } private PaginatedAdapter<Comment> getListAdapter() { return new PaginatedAdapter<Comment>(getActivity(), R.layout.uv_comment_item, new ArrayList<Comment>()) { @Override protected int getTotalNumberOfObjects() { return suggestion.getNumberOfComments(); } @Override protected void customizeLayout(View view, Comment model) { TextView textView = (TextView) view.findViewById(R.id.uv_text); textView.setText(model.getText()); textView = (TextView) view.findViewById(R.id.uv_name); textView.setText(model.getUserName()); textView = (TextView) view.findViewById(R.id.uv_date); textView.setText(DateFormat.getDateInstance().format(model.getCreatedAt())); ImageView avatar = (ImageView) view.findViewById(R.id.uv_avatar); ImageCache.getInstance().loadImage(model.getAvatarUrl(), avatar); } @Override public boolean isEnabled(int position) { return false; } @Override protected void loadPage(int page, Callback<List<Comment>> callback) { Comment.loadComments(suggestion, page, callback); } }; } public void commentPosted(Comment comment) { adapter.add(0, comment); suggestion.commentPosted(comment); displaySuggestion(view, suggestion); } private void displaySuggestion(View view, Suggestion suggestion) { TextView status = (TextView) view.findViewById(R.id.uv_status); TextView responseStatus = (TextView) view.findViewById(R.id.uv_response_status); View responseDivider = view.findViewById(R.id.uv_response_divider); TextView title = (TextView) view.findViewById(R.id.uv_title); if (suggestion.isSubscribed()) { ((CheckBox) view.findViewById(R.id.uv_subscribe_checkbox)).setChecked(true); } if (suggestion.getStatus() == null) { status.setVisibility(View.GONE); int defaultColor = Color.DKGRAY; responseStatus.setTextColor(defaultColor); responseDivider.setBackgroundColor(defaultColor); } else { int color = Color.parseColor(suggestion.getStatusColor()); status.setBackgroundColor(color); status.setText(suggestion.getStatus()); responseStatus.setTextColor(color); responseStatus.setText(String.format(getString(R.string.uv_admin_response_format), suggestion.getStatus().toUpperCase(Locale.getDefault()))); responseDivider.setBackgroundColor(color); } title.setText(suggestion.getTitle()); ((TextView) view.findViewById(R.id.uv_text)).setText(suggestion.getText()); ((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()))); if (suggestion.getAdminResponseText() == null) { view.findViewById(R.id.uv_admin_response).setVisibility(View.GONE); } else { view.findViewById(R.id.uv_admin_response).setVisibility(View.VISIBLE); ((TextView) view.findViewById(R.id.uv_admin_name)).setText(suggestion.getAdminResponseUserName()); ((TextView) view.findViewById(R.id.uv_response_date)).setText(DateFormat.getDateInstance().format(suggestion.getAdminResponseCreatedAt())); ((TextView) view.findViewById(R.id.uv_response_text)).setText(suggestion.getAdminResponseText()); ImageView avatar = (ImageView) view.findViewById(R.id.uv_admin_avatar); ImageCache.getInstance().loadImage(suggestion.getAdminResponseAvatarUrl(), avatar); } ((TextView) view.findViewById(R.id.uv_comment_count)).setText(Utils.getQuantityString(view, R.plurals.uv_comments, suggestion.getNumberOfComments()).toUpperCase(Locale.getDefault())); ((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()))); } }