package org.wordpress.android.ui.stats; import android.app.Activity; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import org.wordpress.android.R; import org.wordpress.android.ui.stats.models.VisitModel; import org.wordpress.android.ui.stats.models.VisitsModel; import org.wordpress.android.ui.stats.service.StatsService; import org.wordpress.android.util.FormatUtils; import java.util.List; public class StatsInsightsTodayFragment extends StatsAbstractInsightsFragment { public static final String TAG = StatsInsightsTodayFragment.class.getSimpleName(); // Container Activity must implement this interface public interface OnInsightsTodayClickListener { void onInsightsTodayClicked(StatsVisitorsAndViewsFragment.OverviewLabel item); } private OnInsightsTodayClickListener mListener; @Override public void onAttach(Activity activity) { super.onAttach(activity); try { mListener = (OnInsightsTodayClickListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnInsightsTodayClickListener"); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = super.onCreateView(inflater, container, savedInstanceState); TextView moduleTitle = (TextView) view.findViewById(R.id.stats_module_title); moduleTitle.setTag(StatsVisitorsAndViewsFragment.OverviewLabel.VIEWS); moduleTitle.setOnClickListener(ButtonsOnClickListener); moduleTitle.setTextColor(getResources().getColor(R.color.stats_link_text_color)); return view; } private VisitsModel mVisitsModel; @Override protected boolean hasDataAvailable() { return mVisitsModel != null; } @Override protected void saveStatsData(Bundle outState) { if (hasDataAvailable()) { outState.putSerializable(ARG_REST_RESPONSE, mVisitsModel); } } @Override protected void restoreStatsData(Bundle savedInstanceState) { if (savedInstanceState.containsKey(ARG_REST_RESPONSE)) { mVisitsModel = (VisitsModel) savedInstanceState.getSerializable(ARG_REST_RESPONSE); } } @SuppressWarnings("unused") public void onEventMainThread(StatsEvents.VisitorsAndViewsUpdated event) { if (!shouldUpdateFragmentOnUpdateEvent(event)) { return; } mVisitsModel = event.mVisitsAndViews; updateUI(); } @SuppressWarnings("unused") public void onEventMainThread(StatsEvents.SectionUpdateError event) { if (!shouldUpdateFragmentOnErrorEvent(event)) { return; } mVisitsModel = null; showErrorUI(event.mError); } protected void updateUI() { super.updateUI(); if (!isAdded() || !hasDataAvailable()) { return; } if (mVisitsModel.getVisits() == null || mVisitsModel.getVisits().size() == 0) { showErrorUI(); return; } List<VisitModel> visits = mVisitsModel.getVisits(); VisitModel data = visits.get(visits.size() - 1); LinearLayout ll = (LinearLayout) getActivity().getLayoutInflater() .inflate(R.layout.stats_insights_today_item, (ViewGroup) mResultContainer.getRootView(), false); LinearLayout tabs = (LinearLayout) ll.findViewById(R.id.stats_post_tabs); for (int i = 0; i < tabs.getChildCount(); i++) { LinearLayout currentTab = (LinearLayout) tabs.getChildAt(i); switch (i) { case 0: setupTab(currentTab, FormatUtils.formatDecimal(data.getViews()), StatsVisitorsAndViewsFragment.OverviewLabel.VIEWS); break; case 1: setupTab(currentTab, FormatUtils.formatDecimal(data.getVisitors()), StatsVisitorsAndViewsFragment.OverviewLabel.VISITORS ); break; case 2: setupTab(currentTab, FormatUtils.formatDecimal(data.getLikes()), StatsVisitorsAndViewsFragment.OverviewLabel.LIKES ); break; case 3: setupTab(currentTab, FormatUtils.formatDecimal(data.getComments()), StatsVisitorsAndViewsFragment.OverviewLabel.COMMENTS ); break; } } mResultContainer.addView(ll); } private void setupTab(LinearLayout currentTab, String total, final StatsVisitorsAndViewsFragment.OverviewLabel itemType) { final TextView label; final TextView value; final ImageView icon; currentTab.setTag(itemType); currentTab.setOnClickListener(ButtonsOnClickListener); label = (TextView) currentTab.findViewById(R.id.stats_visitors_and_views_tab_label); label.setText(itemType.getLabel()); value = (TextView) currentTab.findViewById(R.id.stats_visitors_and_views_tab_value); value.setText(total); if (total.equals("0")) { value.setTextColor(getResources().getColor(R.color.grey)); } else { value.setTextColor(getResources().getColor(R.color.blue_wordpress)); } icon = (ImageView) currentTab.findViewById(R.id.stats_visitors_and_views_tab_icon); icon.setImageDrawable(getTabIcon(itemType)); if (itemType == StatsVisitorsAndViewsFragment.OverviewLabel.COMMENTS) { currentTab.setBackgroundResource(R.drawable.stats_visitors_and_views_button_latest_white); } else { currentTab.setBackgroundResource(R.drawable.stats_visitors_and_views_button_white); } } private final View.OnClickListener ButtonsOnClickListener = new View.OnClickListener() { @Override public void onClick(View v) { if (!isAdded()) { return; } if (mListener == null) { return; } StatsVisitorsAndViewsFragment.OverviewLabel tag = (StatsVisitorsAndViewsFragment.OverviewLabel) v.getTag(); mListener.onInsightsTodayClicked(tag); } }; private Drawable getTabIcon(final StatsVisitorsAndViewsFragment.OverviewLabel labelItem) { switch (labelItem) { case VISITORS: return getResources().getDrawable(R.drawable.ic_user_grey_dark_12dp); case COMMENTS: return getResources().getDrawable(R.drawable.ic_comment_grey_dark_12dp); case LIKES: return getResources().getDrawable(R.drawable.ic_star_grey_dark_12dp); default: // Views and when no prev match return getResources().getDrawable(R.drawable.ic_visible_on_grey_dark_12dp); } } @Override protected StatsService.StatsEndpointsEnum[] sectionsToUpdate() { return new StatsService.StatsEndpointsEnum[]{ StatsService.StatsEndpointsEnum.VISITS }; } @Override public String getTitle() { return getString(R.string.stats_insights_today); } }