aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanilo Ercoli <ercoli@gmail.com>2016-01-07 16:40:00 +0100
committerDanilo Ercoli <ercoli@gmail.com>2016-01-07 16:40:00 +0100
commit9611275f0c27e0ee0a0294a7c6e642911ba77f4c (patch)
tree3a5f4203aabb9a251bfc69373f7efd03c567f038
parentc1c5c6f033acfc2c7bb6ceed37f87c98e0733a94 (diff)
downloadgradle-perf-android-medium-9611275f0c27e0ee0a0294a7c6e642911ba77f4c.tar.gz
Moved Insights and cleaned the code a bit.
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbstractFragment.java89
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbstractInsightsFragment.java192
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbstractListFragment.java216
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAuthorsFragment.java8
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/stats/StatsClicksFragment.java8
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/stats/StatsCommentsFragment.java10
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/stats/StatsEvents.java65
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/stats/StatsFollowersFragment.java8
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/stats/StatsGeoviewsFragment.java8
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/stats/StatsInsightsAllTimeFragment.java66
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/stats/StatsInsightsLatestPostSummaryFragment.java157
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/stats/StatsInsightsMostPopularFragment.java65
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/stats/StatsInsightsTodayFragment.java64
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/stats/StatsPublicizeFragment.java6
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/stats/StatsReferrersFragment.java8
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/stats/StatsSearchTermsFragment.java13
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/stats/StatsTagsAndCategoriesFragment.java6
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/stats/StatsTopPostsAndPagesFragment.java8
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/stats/StatsVideoplaysFragment.java8
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/stats/StatsVisitorsAndViewsFragment.java69
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/stats/models/InsightsPopularModel.java2
-rw-r--r--WordPress/src/main/java/org/wordpress/android/ui/stats/service/StatsService.java26
22 files changed, 498 insertions, 604 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbstractFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbstractFragment.java
index 9e30da0d8..bb0a4fb7e 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbstractFragment.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbstractFragment.java
@@ -1,10 +1,15 @@
package org.wordpress.android.ui.stats;
+import android.app.Activity;
import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
+import com.android.volley.NoConnectionError;
+import com.android.volley.VolleyError;
+
+import org.wordpress.android.R;
import org.wordpress.android.WordPress;
import org.wordpress.android.models.AccountHelper;
import org.wordpress.android.models.Blog;
@@ -12,6 +17,8 @@ import org.wordpress.android.ui.stats.service.StatsService;
import org.wordpress.android.util.AppLog;
import org.wordpress.android.util.NetworkUtils;
+import de.greenrobot.event.EventBus;
+
public abstract class StatsAbstractFragment extends Fragment {
public static final String TAG = StatsAbstractFragment.class.getSimpleName();
@@ -29,6 +36,29 @@ public abstract class StatsAbstractFragment extends Fragment {
private StatsTimeframe mStatsTimeframe = StatsTimeframe.DAY;
protected abstract StatsService.StatsEndpointsEnum[] getSectionsToUpdate();
+ protected abstract void showPlaceholderUI();
+ protected abstract void updateUI();
+ protected abstract void showErrorUI(String label);
+
+ /**
+ * Wheter or not previous data is available.
+ * @return True if previous data is already available in the fragment
+ */
+ protected abstract boolean hasDataAvailable();
+
+ /**
+ * Called in onSaveIstance. Fragments should persist data here.
+ * @param outState Bundle in which to place fragment saved state.
+ */
+ protected abstract void saveStatsData(Bundle outState);
+
+ /**
+ * Called in OnCreate. Fragment should restore here previous saved data.
+ * @param savedInstanceState If the fragment is being re-created from a previous saved state, this is the state.
+ */
+ protected abstract void restoreStatsData(Bundle savedInstanceState); // called in onCreate
+
+ protected StatsResourceVars mResourceVars;
public void refreshStats() {
refreshStats(-1, null);
@@ -112,6 +142,7 @@ public abstract class StatsAbstractFragment extends Fragment {
if (savedInstanceState.containsKey(ARGS_SELECTED_DATE)) {
mDate = savedInstanceState.getString(ARGS_SELECTED_DATE);
}
+ restoreStatsData(savedInstanceState); // Each fragment will override this to restore fragment dependant data
}
// AppLog.d(AppLog.T.STATS, "mStatsTimeframe: " + mStatsTimeframe.getLabel());
@@ -119,15 +150,51 @@ public abstract class StatsAbstractFragment extends Fragment {
}
@Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ mResourceVars = new StatsResourceVars(activity);
+ }
+
+ @Override
public void onSaveInstanceState(Bundle outState) {
/* AppLog.d(AppLog.T.STATS, this.getClass().getCanonicalName() + " > saving instance state");
AppLog.d(AppLog.T.STATS, "mStatsTimeframe: " + mStatsTimeframe.getLabel());
AppLog.d(AppLog.T.STATS, "mDate: " + mDate); */
+
outState.putString(ARGS_SELECTED_DATE, mDate);
outState.putSerializable(ARGS_TIMEFRAME, mStatsTimeframe);
+ saveStatsData(outState); // Each fragment will override this
super.onSaveInstanceState(outState);
}
+ @Override
+ public void onResume() {
+ super.onResume();
+
+ // Init the UI
+ if (hasDataAvailable()) {
+ updateUI();
+ } else {
+ if (NetworkUtils.isNetworkAvailable(getActivity())) {
+ showPlaceholderUI();
+ refreshStats();
+ } else {
+ showErrorUI(new NoConnectionError());
+ }
+ }
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ EventBus.getDefault().register(this);
+ }
+
+ @Override
+ public void onStop() {
+ EventBus.getDefault().unregister(this);
+ super.onStop();
+ }
public boolean shouldUpdateFragmentOnUpdateEvent(StatsEvents.SectionUpdatedAbstract event) {
if (!isAdded()) {
@@ -149,6 +216,28 @@ public abstract class StatsAbstractFragment extends Fragment {
return true;
}
+ protected void showErrorUI(VolleyError error) {
+ if (!isAdded()) {
+ return;
+ }
+
+ String label = "<b>" + getString(R.string.error_refresh_stats) + "</b>";
+
+ if (error instanceof NoConnectionError) {
+ label += "<br/>" + getString(R.string.no_network_message);
+ }
+
+ if (StatsUtils.isRESTDisabledError(error)) {
+ label += "<br/>" + getString(R.string.stats_enable_rest_api_in_jetpack);
+ }
+
+ showErrorUI(label);
+ }
+
+ protected void showErrorUI() {
+ String label = "<b>" + getString(R.string.error_refresh_stats) + "</b>";
+ showErrorUI(label);
+ }
public boolean shouldUpdateFragmentOnErrorEvent(StatsEvents.SectionUpdateError errorEvent) {
StatsEvents.SectionUpdatedAbstract abstractEvent = errorEvent;
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbstractInsightsFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbstractInsightsFragment.java
index 0c6a04bba..191578fa9 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbstractInsightsFragment.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbstractInsightsFragment.java
@@ -1,41 +1,25 @@
package org.wordpress.android.ui.stats;
-import android.app.Activity;
import android.os.Bundle;
import android.text.Html;
+import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
-import com.android.volley.NoConnectionError;
-import com.android.volley.VolleyError;
-
import org.wordpress.android.R;
-import org.wordpress.android.ui.stats.exceptions.StatsError;
-import org.wordpress.android.ui.stats.service.StatsService;
-import org.wordpress.android.util.NetworkUtils;
-
-import java.io.Serializable;
-
-import de.greenrobot.event.EventBus;
public abstract class StatsAbstractInsightsFragment extends StatsAbstractFragment {
public static final String TAG = StatsAbstractInsightsFragment.class.getSimpleName();
- Serializable[] mDatamodels;
-
- StatsResourceVars mResourceVars;
-
- private TextView mErrorLabel;
- private LinearLayout mEmptyModulePlaceholder;
+ protected TextView mErrorLabel;
+ protected LinearLayout mEmptyModulePlaceholder;
protected LinearLayout mResultContainer;
- abstract void customizeUIWithResults(); // This is where all the UI is customized at module level
-
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.stats_insights_generic_fragment, container, false);
@@ -49,132 +33,20 @@ public abstract class StatsAbstractInsightsFragment extends StatsAbstractFragmen
}
@Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
- mResourceVars = new StatsResourceVars(activity);
- }
-
- @Override
- public void onStart() {
- super.onStart();
- EventBus.getDefault().register(this);
- }
-
- @Override
- public void onStop() {
- EventBus.getDefault().unregister(this);
- super.onStop();
- }
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- if (savedInstanceState != null) {
- if (savedInstanceState.containsKey(ARG_REST_RESPONSE)) {
- Serializable oldData = savedInstanceState.getSerializable(ARG_REST_RESPONSE);
- if (oldData != null && oldData instanceof Serializable[]) {
- mDatamodels = (Serializable[]) oldData;
- }
- }
- }
- }
-
- @Override
- public void onSaveInstanceState(Bundle outState) {
- // Do not serialize VolleyError, but rewrite in a simple stats Exception.
- // VolleyErrors should be serializable, but for some reason they are not.
- // FIX for https://github.com/wordpress-mobile/WordPress-Android/issues/2228
- if (mDatamodels != null) {
- for (int i=0; i < mDatamodels.length; i++) {
- if (mDatamodels[i] != null && mDatamodels[i] instanceof VolleyError) {
- VolleyError currentVolleyError = (VolleyError) mDatamodels[i];
- mDatamodels[i] = StatsUtils.rewriteVolleyError(currentVolleyError, getString(R.string.error_refresh_stats));
- }
- }
- }
-
- outState.putSerializable(ARG_REST_RESPONSE, mDatamodels);
- super.onSaveInstanceState(outState);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- // Init the UI
- if (mDatamodels != null) {
- updateUI();
- } else {
- if (NetworkUtils.isNetworkAvailable(getActivity())) {
- showPlaceholderUI();
- refreshStats();
- } else {
- showErrorUI(new NoConnectionError());
- }
- }
- }
-
-
- protected void updateUI() {
- if (!isAdded()) {
- return;
- }
-
- if (mDatamodels == null) {
- return;
- }
-
- if (isErrorResponse(0)) {
- showErrorUI(mDatamodels[0]);
- return;
- }
-
- if (isDataEmpty(0)) {
- // This is just an additional check. We only have 1 endpoint per fragment here.
- // mDatamodels is either null or not empty at position 0
- String label = "<b>" + getString(R.string.error_refresh_stats) + "</b>";
- showErrorUI(label);
- return;
- }
-
- // not an error - update the module UI here
- mErrorLabel.setVisibility(View.GONE);
- mResultContainer.setVisibility(View.VISIBLE);
- mEmptyModulePlaceholder.setVisibility(View.GONE);
-
- customizeUIWithResults(); // call the subclass and draw the real UI here
- }
-
- void showPlaceholderUI() {
+ protected void showPlaceholderUI() {
mErrorLabel.setVisibility(View.GONE);
mResultContainer.setVisibility(View.GONE);
mEmptyModulePlaceholder.setVisibility(View.VISIBLE);
}
- protected final void showErrorUI(Serializable error) {
- if (!isAdded()) {
- return;
- }
-
- String label = "<b>" + getString(R.string.error_refresh_stats) + "</b>";
-
- if (error instanceof NoConnectionError) {
- label += "<br/>" + getString(R.string.no_network_message);
- }
-
- if (StatsUtils.isRESTDisabledError(error)) {
- label += "<br/>" + getString(R.string.stats_enable_rest_api_in_jetpack);
- }
-
- showErrorUI(label);
- }
-
- protected final void showErrorUI(String label) {
+ @Override
+ protected void showErrorUI(String label) {
if (!isAdded()) {
return;
}
// Use the generic error message when the string passed to this method is null.
- if (label == null) {
+ if (TextUtils.isEmpty(label)) {
label = "<b>" + getString(R.string.error_refresh_stats) + "</b>";
}
@@ -187,54 +59,4 @@ public abstract class StatsAbstractInsightsFragment extends StatsAbstractFragmen
mResultContainer.setVisibility(View.GONE);
mEmptyModulePlaceholder.setVisibility(View.GONE);
}
-
-
- boolean isDataEmpty(int index) {
- return mDatamodels == null
- || mDatamodels[index] == null
- || isErrorResponse(index);
- }
-
- boolean isErrorResponse(int index) {
- return mDatamodels != null && mDatamodels[index] != null
- && (mDatamodels[index] instanceof VolleyError || mDatamodels[index] instanceof StatsError);
- }
-
- @SuppressWarnings("unused")
- public void onEventMainThread(StatsEvents.SectionUpdated event) {
- if (!isAdded()) {
- return;
- }
-
- if (!event.mRequestBlogId.equals(StatsUtils.getBlogId(getLocalTableBlogID()))) {
- return;
- }
-
- if (event.mTimeframe != getTimeframe()) {
- return;
- }
-
- StatsService.StatsEndpointsEnum sectionToUpdate = event.mEndPointName;
- StatsService.StatsEndpointsEnum[] sectionsToUpdate = getSectionsToUpdate();
- int indexOfDatamodelMatch = -1;
- for (int i = 0; i < getSectionsToUpdate().length; i++) {
- if (sectionToUpdate == sectionsToUpdate[i]) {
- indexOfDatamodelMatch = i;
- break;
- }
- }
-
- if (-1 == indexOfDatamodelMatch) {
- return;
- }
-
-
- if (mDatamodels == null) {
- mDatamodels = new Serializable[getSectionsToUpdate().length];
- }
-
- mDatamodels[indexOfDatamodelMatch] = event.mResponseObjectModel;
- updateUI();
- }
-
} \ No newline at end of file
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbstractListFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbstractListFragment.java
index 17900b6d6..d78e1f4c4 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbstractListFragment.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbstractListFragment.java
@@ -1,9 +1,9 @@
package org.wordpress.android.ui.stats;
-import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.Html;
+import android.text.TextUtils;
import android.util.SparseBooleanArray;
import android.view.Gravity;
import android.view.LayoutInflater;
@@ -15,20 +15,10 @@ import android.widget.LinearLayout;
import android.widget.RadioGroup;
import android.widget.TextView;
-import com.android.volley.NoConnectionError;
-import com.android.volley.VolleyError;
-
import org.wordpress.android.R;
-import org.wordpress.android.ui.stats.exceptions.StatsError;
-import org.wordpress.android.ui.stats.service.StatsService;
import org.wordpress.android.util.DisplayUtils;
-import org.wordpress.android.util.NetworkUtils;
import org.wordpress.android.widgets.TypefaceCache;
-import java.io.Serializable;
-
-import de.greenrobot.event.EventBus;
-
public abstract class StatsAbstractListFragment extends StatsAbstractFragment {
// Used when the fragment has 2 pages/kind of stats in it. Not meaning the bottom pagination.
@@ -61,28 +51,15 @@ public abstract class StatsAbstractListFragment extends StatsAbstractFragment {
private LinearLayout mEmptyModulePlaceholder;
- /**
- * @deprecated */
- Serializable[] mDatamodels;
-
SparseBooleanArray mGroupIdToExpandedMap;
protected abstract int getEntryLabelResId();
protected abstract int getTotalsLabelResId();
protected abstract int getEmptyLabelTitleResId();
protected abstract int getEmptyLabelDescResId();
- protected abstract void updateUI();
protected abstract boolean isExpandableList();
protected abstract boolean isViewAllOptionAvailable();
- StatsResourceVars mResourceVars;
-
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
- mResourceVars = new StatsResourceVars(activity);
- }
-
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view;
@@ -126,13 +103,10 @@ public abstract class StatsAbstractListFragment extends StatsAbstractFragment {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mGroupIdToExpandedMap = new SparseBooleanArray();
-
if (savedInstanceState != null) {
- restorePreviousData(savedInstanceState); // Each fragment will override this
if (savedInstanceState.containsKey(ARGS_EXPANDED_ROWS)) {
mGroupIdToExpandedMap = savedInstanceState.getParcelable(ARGS_EXPANDED_ROWS);
}
-
mTopPagerSelectedButtonIndex = savedInstanceState.getInt(ARGS_TOP_PAGER_SELECTED_BUTTON_INDEX);
}
}
@@ -143,52 +117,11 @@ public abstract class StatsAbstractListFragment extends StatsAbstractFragment {
outState.putParcelable(ARGS_EXPANDED_ROWS, new SparseBooleanArrayParcelable(mGroupIdToExpandedMap));
}
outState.putInt(ARGS_TOP_PAGER_SELECTED_BUTTON_INDEX, mTopPagerSelectedButtonIndex);
- savePreviousData(outState); // Each fragment will override this
-
super.onSaveInstanceState(outState);
}
@Override
- public void onStart() {
- super.onStart();
- EventBus.getDefault().register(this);
- }
-
- @Override
- public void onStop() {
- EventBus.getDefault().unregister(this);
- super.onStop();
- }
-
- @Override
- public void onResume() {
- super.onResume();
-
- // Init the UI
- if (hasPreviousDataAvailable()) {
- updateUI();
- } else {
- if (NetworkUtils.isNetworkAvailable(getActivity())) {
- showPlaceholderUI();
- refreshStats();
- } else {
- showErrorUI(new NoConnectionError());
- }
- }
- }
-
- // TODO: MAKE ME ABSTRACT!!!
- protected boolean hasPreviousDataAvailable() {
- return false;
- }
- protected void savePreviousData(Bundle outState) {
-
- }
- protected void restorePreviousData(Bundle savedInstanceState) {
-
- }
-
- private void showPlaceholderUI() {
+ protected void showPlaceholderUI() {
mTopPagerContainer.setVisibility(View.GONE);
mEmptyLabel.setVisibility(View.GONE);
mListContainer.setVisibility(View.GONE);
@@ -236,49 +169,8 @@ public abstract class StatsAbstractListFragment extends StatsAbstractFragment {
}
}
- void showErrorUI() {
- if (!isAdded()) {
- return;
- }
- showErrorUI(mDatamodels[mTopPagerSelectedButtonIndex]);
- }
-
- protected void showErrorUI(VolleyError error) {
- if (!isAdded()) {
- return;
- }
-
- mGroupIdToExpandedMap.clear();
- mModuleTitleTextView.setVisibility(View.VISIBLE);
- mEmptyModulePlaceholder.setVisibility(View.GONE);
-
- String label = "<b>" + getString(R.string.error_refresh_stats) + "</b>";
-
- if (error instanceof NoConnectionError) {
- label += "<br/>" + getString(R.string.no_network_message);
- }
-
- // No need to show detailed error messages to the user
- /*else if (error instanceof VolleyError) {
- String volleyErrorMsg = ((VolleyError)error).getMessage();
- if (org.apache.commons.lang.StringUtils.isNotBlank(volleyErrorMsg)){
- label += volleyErrorMsg;
- }
- }*/
-
- if (label.contains("<")) {
- mEmptyLabel.setText(Html.fromHtml(label));
- } else {
- mEmptyLabel.setText(label);
- }
- mEmptyLabel.setVisibility(View.VISIBLE);
- mListContainer.setVisibility(View.GONE);
- mList.setVisibility(View.GONE);
- }
-
- /**
- * @deprecated */
- private void showErrorUI(Serializable error) {
+ @Override
+ protected void showErrorUI(String label) {
if (!isAdded()) {
return;
}
@@ -287,20 +179,11 @@ public abstract class StatsAbstractListFragment extends StatsAbstractFragment {
mModuleTitleTextView.setVisibility(View.VISIBLE);
mEmptyModulePlaceholder.setVisibility(View.GONE);
- String label = "<b>" + getString(R.string.error_refresh_stats) + "</b>";
-
- if (error instanceof NoConnectionError) {
- label += "<br/>" + getString(R.string.no_network_message);
+ // Use the generic error message when the string passed to this method is null.
+ if (TextUtils.isEmpty(label)) {
+ label = "<b>" + getString(R.string.error_refresh_stats) + "</b>";
}
- // No need to show detailed error messages to the user
- /*else if (error instanceof VolleyError) {
- String volleyErrorMsg = ((VolleyError)error).getMessage();
- if (org.apache.commons.lang.StringUtils.isNotBlank(volleyErrorMsg)){
- label += volleyErrorMsg;
- }
- }*/
-
if (label.contains("<")) {
mEmptyLabel.setText(Html.fromHtml(label));
} else {
@@ -311,47 +194,6 @@ public abstract class StatsAbstractListFragment extends StatsAbstractFragment {
mList.setVisibility(View.GONE);
}
-
-
-
-
-
-
- /**
- * Check if the current datamodel is populated and is NOT an error response.
- *
- * @deprecated
- */
- boolean isDataEmpty() {
- return isDataEmpty(mTopPagerSelectedButtonIndex);
- }
-
- /**
- * @deprecated */
- boolean isDataEmpty(int index) {
- return mDatamodels == null
- || mDatamodels[index] == null
- || isErrorResponse(index);
- }
-
- /**
- * Check if the current datamodel is an error response.
- *
- * @deprecated
- *
- * @return true if it is a Volley Error
- */
- boolean isErrorResponse() {
- return isErrorResponse(mTopPagerSelectedButtonIndex);
- }
-
- /**
- * @deprecated */
- boolean isErrorResponse(int index) {
- return mDatamodels != null && mDatamodels[index] != null
- && (mDatamodels[index] instanceof VolleyError || mDatamodels[index] instanceof StatsError);
- }
-
private void configureViewAllButton() {
if (isSingleView()) {
// No view all button if you're already in single view
@@ -366,7 +208,7 @@ public abstract class StatsAbstractListFragment extends StatsAbstractFragment {
return; // already in single view
}
- if (!hasPreviousDataAvailable()) {
+ if (!hasDataAvailable()) {
return;
}
@@ -452,46 +294,4 @@ public abstract class StatsAbstractListFragment extends StatsAbstractFragment {
updateUI();
}
};
-
- @SuppressWarnings("unused")
- public void onEventMainThread(StatsEvents.SectionUpdated event) {
- if (!isAdded()) {
- return;
- }
-
- if (!getDate().equals(event.mDate)) {
- return;
- }
-
- if (!event.mRequestBlogId.equals(StatsUtils.getBlogId(getLocalTableBlogID()))) {
- return;
- }
-
- if (event.mTimeframe != getTimeframe()) {
- return;
- }
-
- StatsService.StatsEndpointsEnum sectionToUpdate = event.mEndPointName;
- StatsService.StatsEndpointsEnum[] sectionsToUpdate = getSectionsToUpdate();
- int indexOfDatamodelMatch = -1;
- for (int i = 0; i < getSectionsToUpdate().length; i++) {
- if (sectionToUpdate == sectionsToUpdate[i]) {
- indexOfDatamodelMatch = i;
- break;
- }
- }
-
- if (-1 == indexOfDatamodelMatch) {
- return;
- }
-
- mGroupIdToExpandedMap.clear();
-
- if (mDatamodels == null) {
- mDatamodels = new Serializable[getSectionsToUpdate().length];
- }
-
- mDatamodels[indexOfDatamodelMatch] = event.mResponseObjectModel;
- updateUI();
- }
}
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAuthorsFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAuthorsFragment.java
index 21919dccd..cdc880b4c 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAuthorsFragment.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAuthorsFragment.java
@@ -26,17 +26,17 @@ public class StatsAuthorsFragment extends StatsAbstractListFragment {
private AuthorsModel mAuthors;
@Override
- protected boolean hasPreviousDataAvailable() {
+ protected boolean hasDataAvailable() {
return mAuthors != null;
}
@Override
- protected void savePreviousData(Bundle outState) {
- if (hasPreviousDataAvailable()) {
+ protected void saveStatsData(Bundle outState) {
+ if (hasDataAvailable()) {
outState.putSerializable(ARG_REST_RESPONSE, mAuthors);
}
}
@Override
- protected void restorePreviousData(Bundle savedInstanceState) {
+ protected void restoreStatsData(Bundle savedInstanceState) {
if (savedInstanceState.containsKey(ARG_REST_RESPONSE)) {
mAuthors = (AuthorsModel) savedInstanceState.getSerializable(ARG_REST_RESPONSE);
}
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsClicksFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsClicksFragment.java
index 5be34fb94..788758462 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsClicksFragment.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsClicksFragment.java
@@ -25,17 +25,17 @@ public class StatsClicksFragment extends StatsAbstractListFragment {
private ClicksModel mClicks;
@Override
- protected boolean hasPreviousDataAvailable() {
+ protected boolean hasDataAvailable() {
return mClicks != null;
}
@Override
- protected void savePreviousData(Bundle outState) {
- if (hasPreviousDataAvailable()) {
+ protected void saveStatsData(Bundle outState) {
+ if (hasDataAvailable()) {
outState.putSerializable(ARG_REST_RESPONSE, mClicks);
}
}
@Override
- protected void restorePreviousData(Bundle savedInstanceState) {
+ protected void restoreStatsData(Bundle savedInstanceState) {
if (savedInstanceState.containsKey(ARG_REST_RESPONSE)) {
mClicks = (ClicksModel) savedInstanceState.getSerializable(ARG_REST_RESPONSE);
}
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsCommentsFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsCommentsFragment.java
index 22456ca53..c0ede28c1 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsCommentsFragment.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsCommentsFragment.java
@@ -32,11 +32,11 @@ public class StatsCommentsFragment extends StatsAbstractListFragment {
private CommentFollowersModel mCommentFollowersModel;
@Override
- protected boolean hasPreviousDataAvailable() {
+ protected boolean hasDataAvailable() {
return mCommentsModel != null && mCommentFollowersModel != null;
}
@Override
- protected void savePreviousData(Bundle outState) {
+ protected void saveStatsData(Bundle outState) {
if (mCommentsModel != null) {
outState.putSerializable(ARG_REST_RESPONSE, mCommentsModel);
}
@@ -45,7 +45,7 @@ public class StatsCommentsFragment extends StatsAbstractListFragment {
}
}
@Override
- protected void restorePreviousData(Bundle savedInstanceState) {
+ protected void restoreStatsData(Bundle savedInstanceState) {
if (savedInstanceState.containsKey(ARG_REST_RESPONSE)) {
mCommentsModel = (CommentsModel) savedInstanceState.getSerializable(ARG_REST_RESPONSE);
}
@@ -174,10 +174,6 @@ public class StatsCommentsFragment extends StatsAbstractListFragment {
@Override
protected boolean isViewAllOptionAvailable() {
- if (isDataEmpty(0)) {
- return false;
- }
-
if (mTopPagerSelectedButtonIndex == 0 && hasAuthors() && getAuthors().size() > MAX_NUM_OF_ITEMS_DISPLAYED_IN_LIST) {
return true;
} else if (mTopPagerSelectedButtonIndex == 1 && hasPosts() && getPosts().size() > MAX_NUM_OF_ITEMS_DISPLAYED_IN_LIST) {
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsEvents.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsEvents.java
index 231b140dd..1e8ac8604 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsEvents.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsEvents.java
@@ -8,6 +8,10 @@ import org.wordpress.android.ui.stats.models.CommentFollowersModel;
import org.wordpress.android.ui.stats.models.CommentsModel;
import org.wordpress.android.ui.stats.models.FollowersModel;
import org.wordpress.android.ui.stats.models.GeoviewsModel;
+import org.wordpress.android.ui.stats.models.InsightsAllTimeModel;
+import org.wordpress.android.ui.stats.models.InsightsLatestPostDetailsModel;
+import org.wordpress.android.ui.stats.models.InsightsLatestPostModel;
+import org.wordpress.android.ui.stats.models.InsightsPopularModel;
import org.wordpress.android.ui.stats.models.PublicizeModel;
import org.wordpress.android.ui.stats.models.ReferrersModel;
import org.wordpress.android.ui.stats.models.SearchTermsModel;
@@ -17,8 +21,6 @@ import org.wordpress.android.ui.stats.models.VideoPlaysModel;
import org.wordpress.android.ui.stats.models.VisitsModel;
import org.wordpress.android.ui.stats.service.StatsService.StatsEndpointsEnum;
-import java.io.Serializable;
-
public class StatsEvents {
public static class UpdateStatusChanged {
public final boolean mUpdating;
@@ -27,19 +29,6 @@ public class StatsEvents {
}
}
- //TODO: REMOVE
- public static class SectionUpdated extends SectionUpdatedAbstract {
- public final StatsEndpointsEnum mEndPointName;
- // TODO: replace Serializable by a POJO or use several event types (like SectionXUpdated, SectionYUpdated)
- public final Serializable mResponseObjectModel;
- public SectionUpdated(StatsEndpointsEnum endPointName, String blogId, StatsTimeframe timeframe, String date,
- final int maxResultsRequested, final int pageRequested, Serializable responseObjectModel) {
- super(blogId, timeframe, date, maxResultsRequested, pageRequested);
- mEndPointName = endPointName;
- mResponseObjectModel = responseObjectModel;
- }
- }
-
public abstract static class SectionUpdatedAbstract {
public final String mRequestBlogId; // This is the remote blog ID
public final StatsTimeframe mTimeframe;
@@ -224,6 +213,52 @@ public class StatsEvents {
}
}
+ public static class InsightsAllTimeUpdated extends SectionUpdatedAbstract {
+
+ public final InsightsAllTimeModel mInsightsAllTimeModel;
+
+ public InsightsAllTimeUpdated(String blogId, StatsTimeframe timeframe, String date,
+ final int maxResultsRequested, final int pageRequested, InsightsAllTimeModel responseObjectModel) {
+ super(blogId, timeframe, date, maxResultsRequested, pageRequested);
+ mInsightsAllTimeModel = responseObjectModel;
+ }
+ }
+
+ public static class InsightsPopularUpdated extends SectionUpdatedAbstract {
+
+ public final InsightsPopularModel mInsightsPopularModel;
+
+ public InsightsPopularUpdated(String blogId, StatsTimeframe timeframe, String date,
+ final int maxResultsRequested, final int pageRequested, InsightsPopularModel responseObjectModel) {
+ super(blogId, timeframe, date, maxResultsRequested, pageRequested);
+ mInsightsPopularModel = responseObjectModel;
+ }
+ }
+
+ public static class InsightsLatestPostSummaryUpdated extends SectionUpdatedAbstract {
+
+ public final InsightsLatestPostModel mInsightsLatestPostModel;
+
+ public InsightsLatestPostSummaryUpdated(String blogId, StatsTimeframe timeframe, String date,
+ final int maxResultsRequested, final int pageRequested,
+ InsightsLatestPostModel responseObjectModel) {
+ super(blogId, timeframe, date, maxResultsRequested, pageRequested);
+ mInsightsLatestPostModel = responseObjectModel;
+ }
+ }
+
+ public static class InsightsLatestPostDetailsUpdated extends SectionUpdatedAbstract {
+
+ public final InsightsLatestPostDetailsModel mInsightsLatestPostDetailsModel;
+
+ public InsightsLatestPostDetailsUpdated(String blogId, StatsTimeframe timeframe, String date,
+ final int maxResultsRequested, final int pageRequested,
+ InsightsLatestPostDetailsModel responseObjectModel) {
+ super(blogId, timeframe, date, maxResultsRequested, pageRequested);
+ mInsightsLatestPostDetailsModel = responseObjectModel;
+ }
+ }
+
public static class JetpackSettingsCompleted {
public final boolean isError;
public JetpackSettingsCompleted(boolean isError) {
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsFollowersFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsFollowersFragment.java
index 997f2cb35..11445abe2 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsFollowersFragment.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsFollowersFragment.java
@@ -85,11 +85,11 @@ public class StatsFollowersFragment extends StatsAbstractListFragment {
private FollowersModel mFollowersEmail;
@Override
- protected boolean hasPreviousDataAvailable() {
+ protected boolean hasDataAvailable() {
return mFollowersWPCOM != null && mFollowersEmail != null;
}
@Override
- protected void savePreviousData(Bundle outState) {
+ protected void saveStatsData(Bundle outState) {
if (mFollowersWPCOM != null) {
outState.putSerializable(ARG_REST_RESPONSE, mFollowersWPCOM);
}
@@ -98,7 +98,7 @@ public class StatsFollowersFragment extends StatsAbstractListFragment {
}
}
@Override
- protected void restorePreviousData(Bundle savedInstanceState) {
+ protected void restoreStatsData(Bundle savedInstanceState) {
if (savedInstanceState.containsKey(ARG_REST_RESPONSE)) {
mFollowersWPCOM = (FollowersModel) savedInstanceState.getSerializable(ARG_REST_RESPONSE);
}
@@ -265,7 +265,7 @@ public class StatsFollowersFragment extends StatsAbstractListFragment {
@Override
protected boolean isViewAllOptionAvailable() {
- if (!hasPreviousDataAvailable()) {
+ if (!hasDataAvailable()) {
return false;
}
FollowersModel followersModel = getCurrentDataModel();
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsGeoviewsFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsGeoviewsFragment.java
index 8dbbfa149..e773780c5 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsGeoviewsFragment.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsGeoviewsFragment.java
@@ -33,17 +33,17 @@ public class StatsGeoviewsFragment extends StatsAbstractListFragment {
private GeoviewsModel mCountries;
@Override
- protected boolean hasPreviousDataAvailable() {
+ protected boolean hasDataAvailable() {
return mCountries != null;
}
@Override
- protected void savePreviousData(Bundle outState) {
- if (hasPreviousDataAvailable()) {
+ protected void saveStatsData(Bundle outState) {
+ if (hasDataAvailable()) {
outState.putSerializable(ARG_REST_RESPONSE, mCountries);
}
}
@Override
- protected void restorePreviousData(Bundle savedInstanceState) {
+ protected void restoreStatsData(Bundle savedInstanceState) {
if (savedInstanceState.containsKey(ARG_REST_RESPONSE)) {
mCountries = (GeoviewsModel) savedInstanceState.getSerializable(ARG_REST_RESPONSE);
}
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsInsightsAllTimeFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsInsightsAllTimeFragment.java
index ec4bc1176..e0fdf7a43 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsInsightsAllTimeFragment.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsInsightsAllTimeFragment.java
@@ -1,5 +1,7 @@
package org.wordpress.android.ui.stats;
+import android.os.Bundle;
+import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -13,15 +15,61 @@ import org.wordpress.android.util.FormatUtils;
public class StatsInsightsAllTimeFragment extends StatsAbstractInsightsFragment {
public static final String TAG = StatsInsightsAllTimeFragment.class.getSimpleName();
+ InsightsAllTimeModel mInsightsAllTimeModel;
+
+ @Override
+ protected boolean hasDataAvailable() {
+ return mInsightsAllTimeModel != null;
+ }
+ @Override
+ protected void saveStatsData(Bundle outState) {
+ if (hasDataAvailable()) {
+ outState.putSerializable(ARG_REST_RESPONSE, mInsightsAllTimeModel);
+ }
+ }
+ @Override
+ protected void restoreStatsData(Bundle savedInstanceState) {
+ if (savedInstanceState.containsKey(ARG_REST_RESPONSE)) {
+ mInsightsAllTimeModel = (InsightsAllTimeModel) savedInstanceState.getSerializable(ARG_REST_RESPONSE);
+ }
+ }
+
+ @SuppressWarnings("unused")
+ public void onEventMainThread(StatsEvents.InsightsAllTimeUpdated event) {
+ if (!shouldUpdateFragmentOnUpdateEvent(event)) {
+ return;
+ }
+
+ mInsightsAllTimeModel = event.mInsightsAllTimeModel;
+ updateUI();
+ }
+
+ @SuppressWarnings("unused")
+ public void onEventMainThread(StatsEvents.SectionUpdateError event) {
+ if (!shouldUpdateFragmentOnErrorEvent(event)) {
+ return;
+ }
+
+ mInsightsAllTimeModel = null;
+ showErrorUI(event.mError);
+ }
+
+
+ protected void updateUI() {
+ if (!isAdded()) {
+ return;
+ }
- void customizeUIWithResults() {
// Another check that the data is available
- if (isDataEmpty(0) || !(mDatamodels[0] instanceof InsightsAllTimeModel)) {
- showErrorUI(null);
+ if (!hasDataAvailable()) {
+ showErrorUI();
return;
}
- InsightsAllTimeModel data = (InsightsAllTimeModel) mDatamodels[0];
+ // not an error - update the module UI here
+ mErrorLabel.setVisibility(View.GONE);
+ mResultContainer.setVisibility(View.VISIBLE);
+ mEmptyModulePlaceholder.setVisibility(View.GONE);
mResultContainer.removeAllViews();
@@ -35,13 +83,13 @@ public class StatsInsightsAllTimeFragment extends StatsAbstractInsightsFragment
TextView besteverDateTextView = (TextView) ll.findViewById(R.id.stats_all_time_bestever_date);
- postsTextView.setText(FormatUtils.formatDecimal(data.getPosts()));
- viewsTextView.setText(FormatUtils.formatDecimal(data.getViews()));
- visitorsTextView.setText(FormatUtils.formatDecimal(data.getVisitors()));
+ postsTextView.setText(FormatUtils.formatDecimal(mInsightsAllTimeModel.getPosts()));
+ viewsTextView.setText(FormatUtils.formatDecimal(mInsightsAllTimeModel.getViews()));
+ visitorsTextView.setText(FormatUtils.formatDecimal(mInsightsAllTimeModel.getVisitors()));
- besteverTextView.setText(FormatUtils.formatDecimal(data.getViewsBestDayTotal()));
+ besteverTextView.setText(FormatUtils.formatDecimal(mInsightsAllTimeModel.getViewsBestDayTotal()));
besteverDateTextView.setText(
- StatsUtils.parseDate(data.getViewsBestDay(), StatsConstants.STATS_INPUT_DATE_FORMAT, "MMMM dd, yyyy")
+ StatsUtils.parseDate(mInsightsAllTimeModel.getViewsBestDay(), StatsConstants.STATS_INPUT_DATE_FORMAT, "MMMM dd, yyyy")
);
mResultContainer.addView(ll);
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsInsightsLatestPostSummaryFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsInsightsLatestPostSummaryFragment.java
index a8b797c5e..dea8a9281 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsInsightsLatestPostSummaryFragment.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsInsightsLatestPostSummaryFragment.java
@@ -1,6 +1,7 @@
package org.wordpress.android.ui.stats;
import android.graphics.drawable.Drawable;
+import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
@@ -10,12 +11,9 @@ import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
-import com.android.volley.VolleyError;
-
import org.apache.commons.lang.StringEscapeUtils;
import org.wordpress.android.R;
import org.wordpress.android.ui.ActivityLauncher;
-import org.wordpress.android.ui.stats.exceptions.StatsError;
import org.wordpress.android.ui.stats.models.InsightsLatestPostDetailsModel;
import org.wordpress.android.ui.stats.models.InsightsLatestPostModel;
import org.wordpress.android.ui.stats.models.PostModel;
@@ -25,81 +23,111 @@ import org.wordpress.android.util.FormatUtils;
public class StatsInsightsLatestPostSummaryFragment extends StatsAbstractInsightsFragment {
public static final String TAG = StatsInsightsLatestPostSummaryFragment.class.getSimpleName();
+ private static final String ARG_REST_RESPONSE_DETAILS = "ARG_REST_RESPONSE_DETAILS";
+
+ private InsightsLatestPostModel mInsightsLatestPostModel;
+ private InsightsLatestPostDetailsModel mInsightsLatestPostDetailsModel;
+
@Override
- public void onEventMainThread(StatsEvents.SectionUpdated event) {
- if (!isAdded()) {
+ protected boolean hasDataAvailable() {
+ return mInsightsLatestPostModel != null && mInsightsLatestPostDetailsModel != null;
+ }
+ @Override
+ protected void saveStatsData(Bundle outState) {
+ if (hasDataAvailable()) {
+ outState.putSerializable(ARG_REST_RESPONSE, mInsightsLatestPostModel);
+ outState.putSerializable(ARG_REST_RESPONSE_DETAILS, mInsightsLatestPostDetailsModel);
+ }
+ }
+ @Override
+ protected void restoreStatsData(Bundle savedInstanceState) {
+ if (savedInstanceState.containsKey(ARG_REST_RESPONSE)) {
+ mInsightsLatestPostModel = (InsightsLatestPostModel) savedInstanceState.getSerializable(ARG_REST_RESPONSE);
+ }
+ if (savedInstanceState.containsKey(ARG_REST_RESPONSE_DETAILS)) {
+ mInsightsLatestPostDetailsModel = (InsightsLatestPostDetailsModel) savedInstanceState.getSerializable(ARG_REST_RESPONSE_DETAILS);
+ }
+ }
+
+ @SuppressWarnings("unused")
+ public void onEventMainThread(StatsEvents.InsightsLatestPostSummaryUpdated event) {
+ if (!shouldUpdateFragmentOnUpdateEvent(event)) {
return;
}
- // This is just an optimization
- if (event.mEndPointName != StatsService.StatsEndpointsEnum.INSIGHTS_LATEST_POST_VIEWS &&
- event.mEndPointName != StatsService.StatsEndpointsEnum.INSIGHTS_LATEST_POST_SUMMARY) {
+ mInsightsLatestPostModel = event.mInsightsLatestPostModel;
+
+ // check if there is a post "published" on the blog
+ View mainView = getView();
+ if (mainView != null) {
+ mainView.setVisibility(mInsightsLatestPostModel.isLatestPostAvailable() ? View.VISIBLE : View.GONE);
+ }
+ if (!mInsightsLatestPostModel.isLatestPostAvailable()) {
+ // No need to go further into UI updating. There are no posts on this blog and the
+ // entire fragment is hidden.
return;
}
- if (event.mEndPointName != StatsService.StatsEndpointsEnum.INSIGHTS_LATEST_POST_VIEWS) {
- super.onEventMainThread(event);
+ // Check if we already have the number of "views" for the latest post
+ if (mInsightsLatestPostModel.getPostViewsCount() == Integer.MIN_VALUE) {
+ // we don't have the views count. Need to call the service again here
+ refreshStats(mInsightsLatestPostModel.getPostID(),
+ new StatsService.StatsEndpointsEnum[]{StatsService.StatsEndpointsEnum.INSIGHTS_LATEST_POST_VIEWS});
+ showPlaceholderUI();
} else {
+ updateUI();
+ }
+ }
- // Check the response of the 2nd rest call before going deeper into updating the UI.
- if (event.mResponseObjectModel instanceof VolleyError ||
- event.mResponseObjectModel instanceof StatsError) {
- showErrorUI(event.mResponseObjectModel);
- return;
- }
+ @SuppressWarnings("unused")
+ public void onEventMainThread(StatsEvents.InsightsLatestPostDetailsUpdated event) {
+ if (!shouldUpdateFragmentOnUpdateEvent(event)) {
+ return;
+ }
- // Here an another additional check that ensures the main data returned from the 1st call is available.
- if (isDataEmpty(0) || !(mDatamodels[0] instanceof InsightsLatestPostModel)) {
- showErrorUI(null);
- return;
- }
+ mInsightsLatestPostDetailsModel = event.mInsightsLatestPostDetailsModel;
+ mInsightsLatestPostModel.setPostViewsCount(mInsightsLatestPostDetailsModel.getPostViewsCount());
+ updateUI();
+ }
- if (event.mResponseObjectModel == null ||
- !(event.mResponseObjectModel instanceof InsightsLatestPostDetailsModel)) {
- showErrorUI(null);
- return;
- }
- final InsightsLatestPostModel latestPostModel = (InsightsLatestPostModel) mDatamodels[0];
- latestPostModel.setPostViewsCount(((InsightsLatestPostDetailsModel) event.mResponseObjectModel).getPostViewsCount());
- updateUI();
+ @SuppressWarnings("unused")
+ public void onEventMainThread(StatsEvents.SectionUpdateError event) {
+
+ if (!shouldUpdateFragmentOnErrorEvent(event)
+ && event.mEndPointName != StatsService.StatsEndpointsEnum.INSIGHTS_LATEST_POST_VIEWS ) {
+ return;
}
+
+ mInsightsLatestPostDetailsModel = null;
+ mInsightsLatestPostModel = null;
+ showErrorUI(event.mError);
}
- void customizeUIWithResults() {
+ protected void updateUI() {
if (!isAdded()) {
return;
}
+
+ // not an error - update the module UI here
+ mErrorLabel.setVisibility(View.GONE);
+ mResultContainer.setVisibility(View.VISIBLE);
+ mEmptyModulePlaceholder.setVisibility(View.GONE);
+
mResultContainer.removeAllViews();
// Another additional check. It ensures that the data is available.
- if (isDataEmpty(0) || !(mDatamodels[0] instanceof InsightsLatestPostModel)) {
- showErrorUI(null);
- return;
+ if (!hasDataAvailable()) {
+ showErrorUI();
}
- final InsightsLatestPostModel latestPostModel = (InsightsLatestPostModel) mDatamodels[0];
-
// check if there are posts "published" on the blog
- View mainView = getView();
- if (mainView != null) {
- mainView.setVisibility(latestPostModel.isLatestPostAvailable() ? View.VISIBLE : View.GONE);
- }
- if (!latestPostModel.isLatestPostAvailable()) {
+ if (!mInsightsLatestPostModel.isLatestPostAvailable()) {
// No need to go further into UI updating. There are no posts on this blog and the
// entire fragment is hidden.
return;
}
- // Check if we already have the number of "views" for the latest post
- if (latestPostModel.getPostViewsCount() == Integer.MIN_VALUE) {
- // we don't have the views count. Need to call the service again here
- refreshStats(latestPostModel.getPostID(),
- new StatsService.StatsEndpointsEnum[]{StatsService.StatsEndpointsEnum.INSIGHTS_LATEST_POST_VIEWS});
- showPlaceholderUI();
- return;
- }
-
- TextView moduleTitle = (TextView) mainView.findViewById(R.id.stats_module_title);
+ TextView moduleTitle = (TextView) getView().findViewById(R.id.stats_module_title);
moduleTitle.setOnClickListener(ViewsTabOnClickListener);
moduleTitle.setTextColor(getResources().getColor(R.color.stats_link_text_color));
@@ -110,10 +138,10 @@ public class StatsInsightsLatestPostSummaryFragment extends StatsAbstractInsight
String trendLabel = getString(R.string.stats_insights_latest_post_trend);
String sinceLabel = StatsUtils.getSinceLabel(
getActivity(),
- latestPostModel.getPostDate()
+ mInsightsLatestPostModel.getPostDate()
).toLowerCase();
- String postTitle = StringEscapeUtils.unescapeHtml(latestPostModel.getPostTitle());
+ String postTitle = StringEscapeUtils.unescapeHtml(mInsightsLatestPostModel.getPostTitle());
final String trendLabelFormatted = String.format(
trendLabel, sinceLabel, postTitle);
@@ -130,10 +158,10 @@ public class StatsInsightsLatestPostSummaryFragment extends StatsAbstractInsight
@Override
public void onClick(View v) {
StatsUtils.openPostInReaderOrInAppWebview(getActivity(),
- latestPostModel.getBlogID(),
- String.valueOf(latestPostModel.getPostID()),
+ mInsightsLatestPostModel.getBlogID(),
+ String.valueOf(mInsightsLatestPostModel.getPostID()),
StatsConstants.ITEM_TYPE_POST,
- latestPostModel.getPostURL());
+ mInsightsLatestPostModel.getPostURL());
}
});
@@ -143,13 +171,13 @@ public class StatsInsightsLatestPostSummaryFragment extends StatsAbstractInsight
LinearLayout currentTab = (LinearLayout) tabs.getChildAt(i);
switch (i) {
case 0:
- setupTab(currentTab, FormatUtils.formatDecimal(latestPostModel.getPostViewsCount()), StatsVisitorsAndViewsFragment.OverviewLabel.VIEWS);
+ setupTab(currentTab, FormatUtils.formatDecimal(mInsightsLatestPostModel.getPostViewsCount()), StatsVisitorsAndViewsFragment.OverviewLabel.VIEWS);
break;
case 1:
- setupTab(currentTab, FormatUtils.formatDecimal(latestPostModel.getPostLikeCount()), StatsVisitorsAndViewsFragment.OverviewLabel.LIKES);
+ setupTab(currentTab, FormatUtils.formatDecimal(mInsightsLatestPostModel.getPostLikeCount()), StatsVisitorsAndViewsFragment.OverviewLabel.LIKES);
break;
case 2:
- setupTab(currentTab, FormatUtils.formatDecimal(latestPostModel.getPostCommentCount()), StatsVisitorsAndViewsFragment.OverviewLabel.COMMENTS);
+ setupTab(currentTab, FormatUtils.formatDecimal(mInsightsLatestPostModel.getPostCommentCount()), StatsVisitorsAndViewsFragment.OverviewLabel.COMMENTS);
break;
}
}
@@ -204,17 +232,16 @@ public class StatsInsightsLatestPostSummaryFragment extends StatsAbstractInsight
}
// Another check that the data is available
- if (isDataEmpty(0) || !(mDatamodels[0] instanceof InsightsLatestPostModel)) {
- showErrorUI(null);
+ if (mInsightsLatestPostModel == null) {
+ showErrorUI();
return;
}
- InsightsLatestPostModel latestPostModel = (InsightsLatestPostModel) mDatamodels[0];
PostModel postModel = new PostModel(
- latestPostModel.getBlogID(),
- String.valueOf(latestPostModel.getPostID()),
- latestPostModel.getPostTitle(),
- latestPostModel.getPostURL(),
+ mInsightsLatestPostModel.getBlogID(),
+ String.valueOf(mInsightsLatestPostModel.getPostID()),
+ mInsightsLatestPostModel.getPostTitle(),
+ mInsightsLatestPostModel.getPostURL(),
StatsConstants.ITEM_TYPE_POST);
ActivityLauncher.viewStatsSinglePostDetails(getActivity(), postModel);
}
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
index 4079f5c6b..14f27fa9b 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsInsightsMostPopularFragment.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsInsightsMostPopularFragment.java
@@ -1,5 +1,7 @@
package org.wordpress.android.ui.stats;
+import android.os.Bundle;
+import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -16,22 +18,67 @@ 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() {
+ if (!isAdded()) {
+ return;
+ }
+
+ // not an error - update the module UI here
+ mErrorLabel.setVisibility(View.GONE);
+ mResultContainer.setVisibility(View.VISIBLE);
+ mEmptyModulePlaceholder.setVisibility(View.GONE);
- void customizeUIWithResults() {
mResultContainer.removeAllViews();
// Another check that the data is available
- if (isDataEmpty(0) || !(mDatamodels[0] instanceof InsightsPopularModel)) {
- showErrorUI(null);
+ if (!hasDataAvailable()) {
+ showErrorUI();
return;
}
- InsightsPopularModel data = (InsightsPopularModel) mDatamodels[0];
-
LinearLayout ll = (LinearLayout) getActivity().getLayoutInflater()
.inflate(R.layout.stats_insights_most_popular_item, (ViewGroup) mResultContainer.getRootView(), false);
- int dayOfTheWeek = data.getHighestDayOfWeek();
+ int dayOfTheWeek = mInsightsPopularModel.getHighestDayOfWeek();
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(Calendar.MONDAY);
@@ -67,20 +114,20 @@ public class StatsInsightsMostPopularFragment extends StatsAbstractInsightsFragm
mostPopularDayPercentTextView.setText(
String.format(
getString(R.string.stats_insights_most_popular_percent_views),
- roundToInteger(data.getHighestDayPercent())
+ 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, data.getHighestHour());
+ 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(data.getHighestHourPercent())
+ roundToInteger(mInsightsPopularModel.getHighestHourPercent())
)
);
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsInsightsTodayFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsInsightsTodayFragment.java
index 03de5b776..de28a14d2 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsInsightsTodayFragment.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsInsightsTodayFragment.java
@@ -49,22 +49,68 @@ public class StatsInsightsTodayFragment extends StatsAbstractInsightsFragment {
return view;
}
- void customizeUIWithResults() {
- mResultContainer.removeAllViews();
- // Another check that the data is available
- if (isDataEmpty(0) || !(mDatamodels[0] instanceof VisitsModel)) {
- showErrorUI(null);
+ 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;
}
- VisitsModel visitsModel = (VisitsModel) mDatamodels[0];
- if (visitsModel.getVisits() == null || visitsModel.getVisits().size() == 0) {
- showErrorUI(null);
+ mVisitsModel = null;
+ showErrorUI(event.mError);
+ }
+
+ protected void updateUI() {
+ if (!isAdded()) {
+ return;
+ }
+
+ if (!hasDataAvailable()) {
+ showErrorUI();
+ return;
+ }
+
+ // not an error - update the module UI here
+ mErrorLabel.setVisibility(View.GONE);
+ mResultContainer.setVisibility(View.VISIBLE);
+ mEmptyModulePlaceholder.setVisibility(View.GONE);
+ mResultContainer.removeAllViews();
+
+ if (mVisitsModel.getVisits() == null || mVisitsModel.getVisits().size() == 0) {
+ showErrorUI();
return;
}
- List<VisitModel> visits = visitsModel.getVisits();
+ List<VisitModel> visits = mVisitsModel.getVisits();
VisitModel data = visits.get(visits.size() - 1);
LinearLayout ll = (LinearLayout) getActivity().getLayoutInflater()
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
index c57237aa0..d6c4f81f0 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsPublicizeFragment.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsPublicizeFragment.java
@@ -25,17 +25,17 @@ public class StatsPublicizeFragment extends StatsAbstractListFragment {
private PublicizeModel mPublicizeData;
@Override
- protected boolean hasPreviousDataAvailable() {
+ protected boolean hasDataAvailable() {
return mPublicizeData != null;
}
@Override
- protected void savePreviousData(Bundle outState) {
+ protected void saveStatsData(Bundle outState) {
if (mPublicizeData != null) {
outState.putSerializable(ARG_REST_RESPONSE, mPublicizeData);
}
}
@Override
- protected void restorePreviousData(Bundle savedInstanceState) {
+ protected void restoreStatsData(Bundle savedInstanceState) {
if (savedInstanceState.containsKey(ARG_REST_RESPONSE)) {
mPublicizeData = (PublicizeModel) savedInstanceState.getSerializable(ARG_REST_RESPONSE);
}
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsReferrersFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsReferrersFragment.java
index 0300f60c4..0284eeec9 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsReferrersFragment.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsReferrersFragment.java
@@ -27,17 +27,17 @@ public class StatsReferrersFragment extends StatsAbstractListFragment {
private ReferrersModel mReferrers;
@Override
- protected boolean hasPreviousDataAvailable() {
+ protected boolean hasDataAvailable() {
return mReferrers != null;
}
@Override
- protected void savePreviousData(Bundle outState) {
- if (hasPreviousDataAvailable()) {
+ protected void saveStatsData(Bundle outState) {
+ if (hasDataAvailable()) {
outState.putSerializable(ARG_REST_RESPONSE, mReferrers);
}
}
@Override
- protected void restorePreviousData(Bundle savedInstanceState) {
+ protected void restoreStatsData(Bundle savedInstanceState) {
if (savedInstanceState.containsKey(ARG_REST_RESPONSE)) {
mReferrers = (ReferrersModel) savedInstanceState.getSerializable(ARG_REST_RESPONSE);
}
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsSearchTermsFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsSearchTermsFragment.java
index 0a744c4d8..0ec27719b 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsSearchTermsFragment.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsSearchTermsFragment.java
@@ -25,17 +25,17 @@ public class StatsSearchTermsFragment extends StatsAbstractListFragment {
private SearchTermsModel mSearchTerms;
@Override
- protected boolean hasPreviousDataAvailable() {
+ protected boolean hasDataAvailable() {
return mSearchTerms != null;
}
@Override
- protected void savePreviousData(Bundle outState) {
- if (hasPreviousDataAvailable()) {
+ protected void saveStatsData(Bundle outState) {
+ if (hasDataAvailable()) {
outState.putSerializable(ARG_REST_RESPONSE, mSearchTerms);
}
}
@Override
- protected void restorePreviousData(Bundle savedInstanceState) {
+ protected void restoreStatsData(Bundle savedInstanceState) {
if (savedInstanceState.containsKey(ARG_REST_RESPONSE)) {
mSearchTerms = (SearchTermsModel) savedInstanceState.getSerializable(ARG_REST_RESPONSE);
}
@@ -67,11 +67,6 @@ public class StatsSearchTermsFragment extends StatsAbstractListFragment {
return;
}
- if (isErrorResponse()) {
- showErrorUI();
- return;
- }
-
if (hasSearchTerms()) {
/**
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsTagsAndCategoriesFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsTagsAndCategoriesFragment.java
index d32bff5a1..3128adee6 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsTagsAndCategoriesFragment.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsTagsAndCategoriesFragment.java
@@ -24,17 +24,17 @@ public class StatsTagsAndCategoriesFragment extends StatsAbstractListFragment {
private TagsContainerModel mTagsContainer;
@Override
- protected boolean hasPreviousDataAvailable() {
+ protected boolean hasDataAvailable() {
return mTagsContainer != null;
}
@Override
- protected void savePreviousData(Bundle outState) {
+ protected void saveStatsData(Bundle outState) {
if (mTagsContainer != null) {
outState.putSerializable(ARG_REST_RESPONSE, mTagsContainer);
}
}
@Override
- protected void restorePreviousData(Bundle savedInstanceState) {
+ protected void restoreStatsData(Bundle savedInstanceState) {
if (savedInstanceState.containsKey(ARG_REST_RESPONSE)) {
mTagsContainer = (TagsContainerModel) savedInstanceState.getSerializable(ARG_REST_RESPONSE);
}
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsTopPostsAndPagesFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsTopPostsAndPagesFragment.java
index 3b0383d31..be15932b8 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsTopPostsAndPagesFragment.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsTopPostsAndPagesFragment.java
@@ -19,17 +19,17 @@ public class StatsTopPostsAndPagesFragment extends StatsAbstractListFragment {
private TopPostsAndPagesModel topPostsAndPagesModel = null;
@Override
- protected boolean hasPreviousDataAvailable() {
+ protected boolean hasDataAvailable() {
return topPostsAndPagesModel != null;
}
@Override
- protected void savePreviousData(Bundle outState) {
- if (hasPreviousDataAvailable()) {
+ protected void saveStatsData(Bundle outState) {
+ if (hasDataAvailable()) {
outState.putSerializable(ARG_REST_RESPONSE, topPostsAndPagesModel);
}
}
@Override
- protected void restorePreviousData(Bundle savedInstanceState) {
+ protected void restoreStatsData(Bundle savedInstanceState) {
if (savedInstanceState.containsKey(ARG_REST_RESPONSE)) {
topPostsAndPagesModel = (TopPostsAndPagesModel) savedInstanceState.getSerializable(ARG_REST_RESPONSE);
}
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsVideoplaysFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsVideoplaysFragment.java
index e0b7d6f0c..906299f74 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsVideoplaysFragment.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsVideoplaysFragment.java
@@ -23,17 +23,17 @@ public class StatsVideoplaysFragment extends StatsAbstractListFragment {
private VideoPlaysModel mVideos;
@Override
- protected boolean hasPreviousDataAvailable() {
+ protected boolean hasDataAvailable() {
return mVideos != null;
}
@Override
- protected void savePreviousData(Bundle outState) {
- if (hasPreviousDataAvailable()) {
+ protected void saveStatsData(Bundle outState) {
+ if (hasDataAvailable()) {
outState.putSerializable(ARG_REST_RESPONSE, mVideos);
}
}
@Override
- protected void restorePreviousData(Bundle savedInstanceState) {
+ protected void restoreStatsData(Bundle savedInstanceState) {
if (savedInstanceState.containsKey(ARG_REST_RESPONSE)) {
mVideos = (VideoPlaysModel) savedInstanceState.getSerializable(ARG_REST_RESPONSE);
}
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsVisitorsAndViewsFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsVisitorsAndViewsFragment.java
index 61ea8a9f4..d8bfc0e25 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsVisitorsAndViewsFragment.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsVisitorsAndViewsFragment.java
@@ -36,8 +36,6 @@ import java.util.Calendar;
import java.util.Date;
import java.util.List;
-import de.greenrobot.event.EventBus;
-
public class StatsVisitorsAndViewsFragment extends StatsAbstractFragment
implements StatsBarGraph.OnGestureListener {
@@ -59,7 +57,7 @@ public class StatsVisitorsAndViewsFragment extends StatsAbstractFragment
private CheckedTextView mLegendLabel;
private LinearLayout mVisitorsCheckboxContainer;
private CheckBox mVisitorsCheckbox;
- private boolean mIsCheckboxChecked;
+ private boolean mIsCheckboxChecked = true;
private OnDateChangeListener mListener;
private OnOverviewItemChangeListener mOverviewItemChangeListener;
@@ -266,9 +264,21 @@ public class StatsVisitorsAndViewsFragment extends StatsAbstractFragment
}
};
+
+ @Override
+ protected boolean hasDataAvailable() {
+ return mVisitsData != null;
+ }
+ @Override
+ protected void saveStatsData(Bundle outState) {
+ outState.putSerializable(ARG_REST_RESPONSE, mVisitsData);
+ outState.putInt(ARG_SELECTED_GRAPH_BAR, mSelectedBarGraphBarIndex);
+ outState.putInt(ARG_PREV_NUMBER_OF_BARS, mPrevNumberOfBarsGraph);
+ outState.putInt(ARG_SELECTED_OVERVIEW_ITEM, mSelectedOverviewItemIndex);
+ outState.putBoolean(ARG_CHECKBOX_SELECTED, mVisitorsCheckbox.isChecked());
+ }
@Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
+ protected void restoreStatsData(Bundle savedInstanceState) {
if (savedInstanceState != null) {
if (savedInstanceState.containsKey(ARG_REST_RESPONSE)) {
mVisitsData = (VisitsModel) savedInstanceState.getSerializable(ARG_REST_RESPONSE);
@@ -284,56 +294,17 @@ public class StatsVisitorsAndViewsFragment extends StatsAbstractFragment
}
mIsCheckboxChecked = savedInstanceState.getBoolean(ARG_CHECKBOX_SELECTED, true);
- } else {
- mIsCheckboxChecked = true;
}
}
@Override
- public void onSaveInstanceState(Bundle outState) {
- //AppLog.d(T.STATS, "StatsVisitorsAndViewsFragment > saving instance state");
-
- /* FIX for https://github.com/wordpress-mobile/WordPress-Android/issues/2228
- if (mVisitsData != null && mVisitsData instanceof VolleyError) {
- VolleyError currentVolleyError = (VolleyError) mVisitsData;
- mVisitsData = StatsUtils.rewriteVolleyError(currentVolleyError, getString(R.string.error_refresh_stats));
- }*/
-
- outState.putSerializable(ARG_REST_RESPONSE, mVisitsData);
- outState.putInt(ARG_SELECTED_GRAPH_BAR, mSelectedBarGraphBarIndex);
- outState.putInt(ARG_PREV_NUMBER_OF_BARS, mPrevNumberOfBarsGraph);
- outState.putInt(ARG_SELECTED_OVERVIEW_ITEM, mSelectedOverviewItemIndex);
- outState.putBoolean(ARG_CHECKBOX_SELECTED, mVisitorsCheckbox.isChecked());
-
- super.onSaveInstanceState(outState);
- }
-
- @Override
- public void onStart() {
- super.onStart();
- EventBus.getDefault().register(this);
- }
-
- @Override
- public void onStop() {
- EventBus.getDefault().unregister(this);
- super.onStop();
+ protected void showErrorUI(String label) {
+ setupNoResultsUI(false);
}
@Override
- public void onResume() {
- super.onResume();
-
- if (mVisitsData != null) {
- updateUI();
- } else {
- if (NetworkUtils.isNetworkAvailable(getActivity())) {
- setupNoResultsUI(true);
- refreshStats();
- } else {
- setupNoResultsUI(false);
- }
- }
+ protected void showPlaceholderUI() {
+ setupNoResultsUI(true);
}
private VisitModel[] getDataToShowOnGraph(VisitsModel visitsData) {
@@ -350,7 +321,7 @@ public class StatsVisitorsAndViewsFragment extends StatsAbstractFragment
return visitModelsToShow;
}
- private void updateUI() {
+ protected void updateUI() {
if (!isAdded()) {
return;
}
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/models/InsightsPopularModel.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/models/InsightsPopularModel.java
index 1258fa5f6..5a8c14051 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/stats/models/InsightsPopularModel.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/models/InsightsPopularModel.java
@@ -10,7 +10,7 @@ public class InsightsPopularModel extends BaseStatsModel {
private final Double mHighestHourPercent;
private String mBlogID;
- public InsightsPopularModel(String blogID, JSONObject response) throws JSONException {
+ public InsightsPopularModel(String blogID, JSONObject response) {
this.setBlogID(blogID);
this.mHighestDayOfWeek = response.optInt("highest_day_of_week");
this.mHighestHour = response.optInt("highest_hour");
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/service/StatsService.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/service/StatsService.java
index 8fdc3d847..2390e769d 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/stats/service/StatsService.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/service/StatsService.java
@@ -27,6 +27,10 @@ import org.wordpress.android.ui.stats.models.CommentFollowersModel;
import org.wordpress.android.ui.stats.models.CommentsModel;
import org.wordpress.android.ui.stats.models.FollowersModel;
import org.wordpress.android.ui.stats.models.GeoviewsModel;
+import org.wordpress.android.ui.stats.models.InsightsAllTimeModel;
+import org.wordpress.android.ui.stats.models.InsightsLatestPostDetailsModel;
+import org.wordpress.android.ui.stats.models.InsightsLatestPostModel;
+import org.wordpress.android.ui.stats.models.InsightsPopularModel;
import org.wordpress.android.ui.stats.models.PublicizeModel;
import org.wordpress.android.ui.stats.models.ReferrersModel;
import org.wordpress.android.ui.stats.models.SearchTermsModel;
@@ -176,10 +180,26 @@ public class StatsService extends Service {
case FOLLOWERS_EMAIL:
return new StatsEvents.FollowersEmailUdated(blogId, timeframe, date,
maxResultsRequested, pageRequested, (FollowersModel)data);
+ case INSIGHTS_POPULAR:
+ return new StatsEvents.InsightsPopularUpdated(blogId, timeframe, date,
+ maxResultsRequested, pageRequested, (InsightsPopularModel)data);
+ case INSIGHTS_ALL_TIME:
+ return new StatsEvents.InsightsAllTimeUpdated(blogId, timeframe, date,
+ maxResultsRequested, pageRequested, (InsightsAllTimeModel)data);
+ case INSIGHTS_TODAY:
+ return new StatsEvents.VisitorsAndViewsUpdated(blogId, timeframe, date,
+ maxResultsRequested, pageRequested, (VisitsModel)data);
+ case INSIGHTS_LATEST_POST_SUMMARY:
+ return new StatsEvents.InsightsLatestPostSummaryUpdated(blogId, timeframe, date,
+ maxResultsRequested, pageRequested, (InsightsLatestPostModel)data);
+ case INSIGHTS_LATEST_POST_VIEWS:
+ return new StatsEvents.InsightsLatestPostDetailsUpdated(blogId, timeframe, date,
+ maxResultsRequested, pageRequested, (InsightsLatestPostDetailsModel)data);
default:
- return new StatsEvents.SectionUpdated(this, blogId, timeframe, date,
- maxResultsRequested, pageRequested, data);
+ AppLog.e(T.STATS, "Can't find an Update Event that match the current endpoint: " + this.name());
}
+
+ return null;
}
}
@@ -563,8 +583,6 @@ public class StatsService extends Service {
EventBus.getDefault().post(new StatsEvents.SectionUpdateError(mEndpointName, mRequestBlogId, mTimeframe, mDate,
mMaxResultsRequested, mPageRequested, volleyError));
- EventBus.getDefault().post(new StatsEvents.SectionUpdated(mEndpointName, mRequestBlogId, mTimeframe, mDate,
- mMaxResultsRequested, mPageRequested, volleyError));
updateWidgetsUI(mRequestBlogId, mEndpointName, mTimeframe, mDate, mPageRequested, mResponseObjectModel);
checkAllRequestsFinished(currentRequest);
}