aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsPublicizeFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/ui/stats/StatsPublicizeFragment.java')
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/stats/StatsPublicizeFragment.java238
1 files changed, 238 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsPublicizeFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsPublicizeFragment.java
new file mode 100644
index 000000000..84522cf08
--- /dev/null
+++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsPublicizeFragment.java
@@ -0,0 +1,238 @@
+package org.wordpress.android.ui.stats;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+
+import org.wordpress.android.R;
+import org.wordpress.android.ui.stats.models.PublicizeModel;
+import org.wordpress.android.ui.stats.models.SingleItemModel;
+import org.wordpress.android.ui.stats.service.StatsService;
+import org.wordpress.android.util.FormatUtils;
+import org.wordpress.android.util.GravatarUtils;
+import org.wordpress.android.util.StringUtils;
+import org.wordpress.android.widgets.WPNetworkImageView;
+
+import java.util.List;
+
+
+public class StatsPublicizeFragment extends StatsAbstractListFragment {
+ public static final String TAG = StatsPublicizeFragment.class.getSimpleName();
+
+ private PublicizeModel mPublicizeData;
+
+ @Override
+ protected boolean hasDataAvailable() {
+ return mPublicizeData != null;
+ }
+ @Override
+ protected void saveStatsData(Bundle outState) {
+ if (mPublicizeData != null) {
+ outState.putSerializable(ARG_REST_RESPONSE, mPublicizeData);
+ }
+ }
+ @Override
+ protected void restoreStatsData(Bundle savedInstanceState) {
+ if (savedInstanceState.containsKey(ARG_REST_RESPONSE)) {
+ mPublicizeData = (PublicizeModel) savedInstanceState.getSerializable(ARG_REST_RESPONSE);
+ }
+ }
+
+ @SuppressWarnings("unused")
+ public void onEventMainThread(StatsEvents.PublicizeUpdated event) {
+ if (!shouldUpdateFragmentOnUpdateEvent(event)) {
+ return;
+ }
+
+ mPublicizeData = event.mPublicizeModel;
+ updateUI();
+ }
+
+ @SuppressWarnings("unused")
+ public void onEventMainThread(StatsEvents.SectionUpdateError event) {
+ if (!shouldUpdateFragmentOnErrorEvent(event)) {
+ return;
+ }
+
+ mPublicizeData = null;
+ showErrorUI(event.mError);
+ }
+
+ @Override
+ protected void updateUI() {
+ if (!isAdded()) {
+ return;
+ }
+
+ if (hasPublicize()) {
+ ArrayAdapter adapter = new PublicizeAdapter(getActivity(), getPublicize());
+ StatsUIHelper.reloadLinearLayout(getActivity(), adapter, mList, getMaxNumberOfItemsToShowInList());
+ showHideNoResultsUI(false);
+ } else {
+ showHideNoResultsUI(true);
+ }
+ }
+
+ private boolean hasPublicize() {
+ return mPublicizeData != null
+ && mPublicizeData.getServices() != null
+ && mPublicizeData.getServices().size() > 0;
+ }
+
+ private List<SingleItemModel> getPublicize() {
+ if (!hasPublicize()) {
+ return null;
+ }
+ return mPublicizeData.getServices();
+ }
+
+ @Override
+ protected boolean isViewAllOptionAvailable() {
+ return false;
+ }
+
+ @Override
+ protected boolean isExpandableList() {
+ return false;
+ }
+
+ private class PublicizeAdapter extends ArrayAdapter<SingleItemModel> {
+
+ private final List<SingleItemModel> list;
+ private final LayoutInflater inflater;
+
+ public PublicizeAdapter(Activity context, List<SingleItemModel> list) {
+ super(context, R.layout.stats_list_cell, list);
+ this.list = list;
+ inflater = LayoutInflater.from(context);
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ View rowView = convertView;
+ // reuse views
+ final StatsViewHolder holder;
+ if (rowView == null) {
+ rowView = inflater.inflate(R.layout.stats_list_cell, parent, false);
+ // configure view holder
+ holder = new StatsViewHolder(rowView);
+ holder.networkImageView.setErrorImageResId(R.drawable.stats_icon_default_site_avatar);
+ holder.networkImageView.setDefaultImageResId(R.drawable.stats_icon_default_site_avatar);
+ rowView.setTag(holder);
+ } else {
+ holder = (StatsViewHolder) rowView.getTag();
+ }
+
+ final SingleItemModel currentRowData = list.get(position);
+
+ String serviceName = currentRowData.getTitle();
+
+ // entries
+ holder.setEntryText(getServiceName(serviceName));
+
+ // totals
+ holder.totalsTextView.setText(FormatUtils.formatDecimal(currentRowData.getTotals()));
+
+ // image
+ holder.networkImageView.setImageUrl(
+ GravatarUtils.fixGravatarUrl(getServiceImage(serviceName), mResourceVars.headerAvatarSizePx),
+ WPNetworkImageView.ImageType.BLAVATAR);
+ holder.networkImageView.setVisibility(View.VISIBLE);
+
+ return rowView;
+ }
+ }
+
+ private String getServiceImage(String service) {
+ String serviceIconURL;
+
+ switch (service) {
+ case "facebook":
+ serviceIconURL = "https://secure.gravatar.com/blavatar/2343ec78a04c6ea9d80806345d31fd78?s=";
+ break;
+ case "twitter":
+ serviceIconURL = "https://secure.gravatar.com/blavatar/7905d1c4e12c54933a44d19fcd5f9356?s=";
+ break;
+ case "tumblr":
+ serviceIconURL = "https://secure.gravatar.com/blavatar/84314f01e87cb656ba5f382d22d85134?s=";
+ break;
+ case "google_plus":
+ serviceIconURL = "https://secure.gravatar.com/blavatar/4a4788c1dfc396b1f86355b274cc26b3?s=";
+ break;
+ case "linkedin":
+ serviceIconURL = "https://secure.gravatar.com/blavatar/f54db463750940e0e7f7630fe327845e?s=";
+ break;
+ case "path":
+ serviceIconURL = "https://secure.gravatar.com/blavatar/3a03c8ce5bf1271fb3760bb6e79b02c1?s=";
+ break;
+ default:
+ return null;
+ }
+
+ return serviceIconURL + mResourceVars.headerAvatarSizePx;
+ }
+
+ private String getServiceName(String service) {
+ if (service.equals("facebook")) {
+ return "Facebook";
+ }
+
+ if (service.equals("twitter")) {
+ return "Twitter";
+ }
+
+ if (service.equals("tumblr")) {
+ return "Tumblr";
+ }
+
+ if (service.equals("google_plus")) {
+ return "Google+";
+ }
+
+ if (service.equals("linkedin")) {
+ return "LinkedIn";
+ }
+
+ if (service.equals("path")) {
+ return "Path";
+ }
+
+ return StringUtils.capitalize(service);
+ }
+
+
+ @Override
+ protected int getEntryLabelResId() {
+ return R.string.stats_entry_publicize;
+ }
+
+ @Override
+ protected int getTotalsLabelResId() {
+ return R.string.stats_totals_publicize;
+ }
+
+ @Override
+ protected int getEmptyLabelTitleResId() {
+ return R.string.stats_empty_publicize;
+ }
+
+ @Override
+ protected int getEmptyLabelDescResId() {
+ return R.string.stats_empty_publicize_desc;
+ }
+
+ @Override
+ protected StatsService.StatsEndpointsEnum[] sectionsToUpdate() {
+ return new StatsService.StatsEndpointsEnum[]{
+ StatsService.StatsEndpointsEnum.PUBLICIZE
+ };
+ }
+
+ @Override
+ public String getTitle() {
+ return getString(R.string.stats_view_publicize);
+ }
+}