diff options
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/ui/stats/StatsInsightsMostPopularFragment.java')
-rw-r--r-- | WordPress/src/main/java/org/wordpress/android/ui/stats/StatsInsightsMostPopularFragment.java | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsInsightsMostPopularFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsInsightsMostPopularFragment.java new file mode 100644 index 000000000..247ca80b2 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsInsightsMostPopularFragment.java @@ -0,0 +1,149 @@ +package org.wordpress.android.ui.stats; + +import android.os.Bundle; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.TextView; + +import org.wordpress.android.R; +import org.wordpress.android.ui.stats.models.InsightsPopularModel; +import org.wordpress.android.ui.stats.service.StatsService; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; + + +public class StatsInsightsMostPopularFragment extends StatsAbstractInsightsFragment { + public static final String TAG = StatsInsightsMostPopularFragment.class.getSimpleName(); + + private InsightsPopularModel mInsightsPopularModel; + + @Override + protected boolean hasDataAvailable() { + return mInsightsPopularModel != null; + } + @Override + protected void saveStatsData(Bundle outState) { + if (hasDataAvailable()) { + outState.putSerializable(ARG_REST_RESPONSE, mInsightsPopularModel); + } + } + @Override + protected void restoreStatsData(Bundle savedInstanceState) { + if (savedInstanceState.containsKey(ARG_REST_RESPONSE)) { + mInsightsPopularModel = (InsightsPopularModel) savedInstanceState.getSerializable(ARG_REST_RESPONSE); + } + } + + @SuppressWarnings("unused") + public void onEventMainThread(StatsEvents.InsightsPopularUpdated event) { + if (!shouldUpdateFragmentOnUpdateEvent(event)) { + return; + } + + mInsightsPopularModel = event.mInsightsPopularModel; + updateUI(); + } + + @SuppressWarnings("unused") + public void onEventMainThread(StatsEvents.SectionUpdateError event) { + if (!shouldUpdateFragmentOnErrorEvent(event)) { + return; + } + + mInsightsPopularModel = null; + showErrorUI(event.mError); + } + + protected void updateUI() { + super.updateUI(); + + if (!isAdded() || !hasDataAvailable()) { + return; + } + + LinearLayout ll = (LinearLayout) getActivity().getLayoutInflater() + .inflate(R.layout.stats_insights_most_popular_item, (ViewGroup) mResultContainer.getRootView(), false); + + int dayOfTheWeek = mInsightsPopularModel.getHighestDayOfWeek(); + + Calendar c = Calendar.getInstance(); + c.setFirstDayOfWeek(Calendar.MONDAY); + c.setTimeInMillis(System.currentTimeMillis()); + switch (dayOfTheWeek) { + case 0: + c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); + break; + case 1: + c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY); + break; + case 2: + c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); + break; + case 3: + c.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY); + break; + case 4: + c.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY); + break; + case 5: + c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY); + break; + case 6: + c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); + break; + } + + DateFormat formatter = new SimpleDateFormat("EEEE"); + final TextView mostPopularDayTextView = (TextView) ll.findViewById(R.id.stats_most_popular_day); + mostPopularDayTextView.setText(formatter.format(c.getTime())); + final TextView mostPopularDayPercentTextView = (TextView) ll.findViewById(R.id.stats_most_popular_day_percent); + mostPopularDayPercentTextView.setText( + String.format( + getString(R.string.stats_insights_most_popular_percent_views), + roundToInteger(mInsightsPopularModel.getHighestDayPercent()) + ) + ); + + TextView mostPopularHourTextView = (TextView) ll.findViewById(R.id.stats_most_popular_hour); + DateFormat timeFormat = android.text.format.DateFormat.getTimeFormat(getActivity()); + c.set(Calendar.HOUR_OF_DAY, mInsightsPopularModel.getHighestHour()); + c.set(Calendar.MINUTE, 0); + mostPopularHourTextView.setText(timeFormat.format(c.getTime())); + final TextView mostPopularHourPercentTextView = (TextView) ll.findViewById(R.id.stats_most_popular_hour_percent); + mostPopularHourPercentTextView.setText( + String.format( + getString(R.string.stats_insights_most_popular_percent_views), + roundToInteger(mInsightsPopularModel.getHighestHourPercent()) + ) + ); + + mResultContainer.addView(ll); + } + + /* + * Round a double to the closest integer + * + * If the decimal part is less than 0.5, the integer part stays the same, + * and truncation gives the right result. + * If the decimal part is more that 0.5, the integer part increments, + * and again truncation gives what we want. + * + */ + private int roundToInteger(double inputValue) { + return (int) Math.floor(inputValue + 0.5); + } + + @Override + protected StatsService.StatsEndpointsEnum[] sectionsToUpdate() { + return new StatsService.StatsEndpointsEnum[]{ + StatsService.StatsEndpointsEnum.INSIGHTS_POPULAR + }; + } + + @Override + public String getTitle() { + return getString(R.string.stats_insights_popular); + } +} |