From b6bb9227b0d7088a669095d731b86ab72fe1a0a8 Mon Sep 17 00:00:00 2001 From: Danilo Ercoli Date: Fri, 29 Aug 2014 18:14:02 +0200 Subject: [PATCH 1/9] First pass at getting rid of WordPress.getCurrentBlog in Stats --- .../android/ui/WPActionBarActivity.java | 3 +- .../ui/stats/StatsAbsPagedViewFragment.java | 2 +- .../ui/stats/StatsAbsViewFragment.java | 10 +- .../android/ui/stats/StatsActivity.java | 110 +++++++++--------- .../ui/stats/StatsBarGraphFragment.java | 26 ++--- .../android/ui/stats/StatsClicksFragment.java | 2 +- .../ui/stats/StatsCommentsFragment.java | 4 +- .../android/ui/stats/StatsCursorFragment.java | 16 ++- .../ui/stats/StatsCursorTreeFragment.java | 12 +- .../ui/stats/StatsDetailsActivity.java | 17 ++- .../ui/stats/StatsGeoviewsFragment.java | 2 +- .../ui/stats/StatsReferrersFragment.java | 2 +- .../stats/StatsSearchEngineTermsFragment.java | 2 +- .../stats/StatsTagsAndCategoriesFragment.java | 2 +- .../ui/stats/StatsTopAuthorsFragment.java | 2 +- .../stats/StatsTopPostsAndPagesFragment.java | 2 +- .../android/ui/stats/StatsUtils.java | 22 ++-- .../android/ui/stats/StatsVideoFragment.java | 2 +- .../stats/StatsVisitorsAndViewsFragment.java | 8 +- 19 files changed, 127 insertions(+), 119 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/WPActionBarActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/WPActionBarActivity.java index 7a0817da45aa..c772a08f1c6d 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/WPActionBarActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/WPActionBarActivity.java @@ -963,8 +963,7 @@ public void onSelectItem(){ mShouldFinish = true; Intent intent = new Intent(WPActionBarActivity.this, StatsActivity.class); - intent.putExtra("id", WordPress.getCurrentBlog().getLocalTableBlogId()); - intent.putExtra("isNew", true); + intent.putExtra(StatsActivity.ARG_LOCAL_TABLE_BLOG_ID, WordPress.getCurrentBlog().getLocalTableBlogId()); intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); startActivityWithDelay(intent); } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbsPagedViewFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbsPagedViewFragment.java index 0a00108acab6..1b28ec06ef37 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbsPagedViewFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbsPagedViewFragment.java @@ -174,7 +174,7 @@ public void onCursorLoaded(final Uri uri, Cursor cursor) { long date = cursor.getLong(colDate); - String timezone = StatsUtils.getBlogTimezone(WordPress.getCurrentBlog()); + String timezone = StatsUtils.getBlogTimezone(WordPress.getBlog(getLocalTableBlogID())); long currentDate = timezone != null ? StatsUtils.getCurrentDateMsTZ(timezone) : StatsUtils.getCurrentDateMs(); boolean isToday = timeframe.equals(StatsTimeframe.TODAY.name()); diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbsViewFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbsViewFragment.java index 27ec4a50a907..d50519f8a900 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbsViewFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbsViewFragment.java @@ -9,7 +9,7 @@ public abstract class StatsAbsViewFragment extends Fragment { public static final String TAG = StatsAbsViewFragment.class.getSimpleName(); - public static StatsAbsViewFragment newInstance(StatsViewType viewType) { + public static StatsAbsViewFragment newInstance(StatsViewType viewType, int localTableBlogID) { StatsAbsViewFragment fragment = null; switch (viewType) { @@ -51,17 +51,23 @@ public static StatsAbsViewFragment newInstance(StatsViewType viewType) { Bundle args = new Bundle(); args.putInt(ARGS_VIEW_TYPE, viewType.ordinal()); + args.putInt(ARGS_LOCAL_TABLE_BLOG_ID, localTableBlogID); fragment.setArguments(args); return fragment; } private static final String ARGS_VIEW_TYPE = "ARGS_VIEW_TYPE"; + private static final String ARGS_LOCAL_TABLE_BLOG_ID = "ARGS_BLOG_ID"; protected StatsViewType getViewType() { int ordinal = getArguments().getInt(ARGS_VIEW_TYPE); return StatsViewType.values()[ordinal]; } + protected int getLocalTableBlogID() { + return getArguments().getInt(ARGS_LOCAL_TABLE_BLOG_ID); + } + protected abstract String getTitle(); -} +} \ No newline at end of file diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsActivity.java index fbae54aecd53..52c53c78d001 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsActivity.java @@ -71,7 +71,9 @@ public class StatsActivity extends WPActionBarActivity implements ScrollViewExt. private static final String SAVED_NAV_POSITION = "SAVED_NAV_POSITION"; private static final String SAVED_WP_LOGIN_STATE = "SAVED_WP_LOGIN_STATE"; private static final int REQUEST_JETPACK = 7000; + public static final String ARG_NO_MENU_DRAWER = "no_menu_drawer"; + public static final String ARG_LOCAL_TABLE_BLOG_ID = "BLOG_LOCAL_ID"; public static final String STATS_GESTURE_SHOW_TAP = "STATS_SHOW_TAP"; public static final String STATS_GESTURE_SINGLE_TAP_CONFIRMED = "STATS_SINGLE_TAP_CONFIRMED"; @@ -83,9 +85,9 @@ public class StatsActivity extends WPActionBarActivity implements ScrollViewExt. private int mNavPosition = 0; private int mResultCode = -1; - private boolean mIsRestoredFromState = false; private boolean mIsInFront; private boolean mNoMenuDrawer = false; + private int mLocalBlogID = -1; private boolean mIsUpdatingStats; private PullToRefreshHelper mPullToRefreshHelper; @@ -131,10 +133,20 @@ public void onRefreshStarted(View view) { } }); - loadStatsFragments(); setTitle(R.string.stats); - restoreState(savedInstanceState); + if (savedInstanceState != null) { + mNavPosition = savedInstanceState.getInt(SAVED_NAV_POSITION); + mResultCode = savedInstanceState.getInt(SAVED_WP_LOGIN_STATE); + mLocalBlogID = savedInstanceState.getInt(ARG_LOCAL_TABLE_BLOG_ID); + } else if (getIntent() != null) { + mLocalBlogID = getIntent().getIntExtra(ARG_LOCAL_TABLE_BLOG_ID, -1); + } + + //TODO check if all variables are set + + loadStatsFragments(); + mDetector = new GestureDetectorCompat(this, new MyGestureListener()); mDetector.setIsLongpressEnabled(false); @@ -175,20 +187,11 @@ protected void onPause() { mPullToRefreshHelper.unregisterReceiver(this); } - private void restoreState(Bundle savedInstanceState) { - if (savedInstanceState == null) { - return; - } - - mNavPosition = savedInstanceState.getInt(SAVED_NAV_POSITION); - mResultCode = savedInstanceState.getInt(SAVED_WP_LOGIN_STATE); - mIsRestoredFromState = true; - } - @Override protected void onSaveInstanceState(Bundle outState) { outState.putInt(SAVED_NAV_POSITION, mNavPosition); outState.putInt(SAVED_WP_LOGIN_STATE, mResultCode); + outState.putInt(ARG_LOCAL_TABLE_BLOG_ID, mLocalBlogID); super.onSaveInstanceState(outState); } @@ -238,10 +241,10 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == WPComLoginActivity.REQUEST_CODE) { mResultCode = resultCode; - if (resultCode == RESULT_OK && !WordPress.getCurrentBlog().isDotcomFlag()) { - if (StatsUtils.getBlogId() == null) { + final Blog currentBlog = WordPress.getBlog(mLocalBlogID); + if (resultCode == RESULT_OK && !currentBlog.isDotcomFlag()) { + if (StatsUtils.getBlogId(mLocalBlogID) == null) { final Handler handler = new Handler(); - final Blog currentBlog = WordPress.getCurrentBlog(); // Attempt to get the Jetpack blog ID XMLRPCClientInterface xmlrpcClient = XMLRPCFactory.instantiate(currentBlog.getUri(), "", ""); Map args = ApiHelper.blogOptionsXMLRPCParameters; @@ -296,38 +299,38 @@ private void loadStatsFragments() { StatsAbsViewFragment fragment; if (fm.findFragmentByTag(StatsVisitorsAndViewsFragment.TAG) == null) { - fragment = StatsAbsViewFragment.newInstance(StatsViewType.VISITORS_AND_VIEWS); + fragment = StatsAbsViewFragment.newInstance(StatsViewType.VISITORS_AND_VIEWS, mLocalBlogID); ft.replace(R.id.stats_visitors_and_views_container, fragment, StatsVisitorsAndViewsFragment.TAG); } if (fm.findFragmentByTag(StatsReferrersFragment.TAG) == null) { - fragment = StatsReferrersFragment.newInstance(StatsViewType.REFERRERS); + fragment = StatsReferrersFragment.newInstance(StatsViewType.REFERRERS, mLocalBlogID); ft.replace(R.id.stats_referrers_container, fragment, StatsReferrersFragment.TAG); } if (fm.findFragmentByTag(StatsClicksFragment.TAG) == null) { - fragment = StatsAbsViewFragment.newInstance(StatsViewType.CLICKS); + fragment = StatsAbsViewFragment.newInstance(StatsViewType.CLICKS, mLocalBlogID); ft.replace(R.id.stats_clicks_container, fragment, StatsClicksFragment.TAG); } if (fm.findFragmentByTag(StatsGeoviewsFragment.TAG) == null) { - fragment = StatsAbsViewFragment.newInstance(StatsViewType.VIEWS_BY_COUNTRY); + fragment = StatsAbsViewFragment.newInstance(StatsViewType.VIEWS_BY_COUNTRY, mLocalBlogID); ft.replace(R.id.stats_geoviews_container, fragment, StatsGeoviewsFragment.TAG); } if (fm.findFragmentByTag(StatsSearchEngineTermsFragment.TAG) == null) { - fragment = StatsAbsViewFragment.newInstance(StatsViewType.SEARCH_ENGINE_TERMS); + fragment = StatsAbsViewFragment.newInstance(StatsViewType.SEARCH_ENGINE_TERMS, mLocalBlogID); ft.replace(R.id.stats_searchengine_container, fragment, StatsSearchEngineTermsFragment.TAG); } if (fm.findFragmentByTag(StatsTotalsFollowersAndSharesFragment.TAG) == null) { - fragment = StatsAbsViewFragment.newInstance(StatsViewType.TOTALS_FOLLOWERS_AND_SHARES); + fragment = StatsAbsViewFragment.newInstance(StatsViewType.TOTALS_FOLLOWERS_AND_SHARES, mLocalBlogID); ft.replace(R.id.stats_totals_followers_shares_container, fragment, StatsTotalsFollowersAndSharesFragment.TAG); } if (fm.findFragmentByTag(StatsTopPostsAndPagesFragment.TAG) == null) { - fragment = StatsAbsViewFragment.newInstance(StatsViewType.TOP_POSTS_AND_PAGES); + fragment = StatsAbsViewFragment.newInstance(StatsViewType.TOP_POSTS_AND_PAGES, mLocalBlogID); ft.replace(R.id.stats_top_posts_container, fragment, StatsTopPostsAndPagesFragment.TAG); } @@ -424,7 +427,7 @@ public void onSuccess() { return; } - if (StatsUtils.getBlogId() == null) { + if (StatsUtils.getBlogId(mLocalBlogID) == null) { // Blog has not returned a jetpack_client_id stopStatsService(); mPullToRefreshHelper.setRefreshing(false); @@ -449,7 +452,8 @@ public void onFailure(ApiHelper.ErrorType errorType, String errorMessage, Throwa private void showJetpackMissingAlert(final Activity currentActivity) { AlertDialog.Builder builder = new AlertDialog.Builder(currentActivity); - if (WordPress.getCurrentBlog().isAdmin()) { + final Blog currentBlog = WordPress.getBlog(mLocalBlogID); + if (currentBlog.isAdmin()) { builder.setMessage(getString(R.string.jetpack_message)) .setTitle(getString(R.string.jetpack_not_found)); builder.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { @@ -458,7 +462,7 @@ public void onClick(DialogInterface dialog, int id) { currentActivity, AuthenticatedWebViewActivity.class); jetpackIntent.putExtra(AuthenticatedWebViewActivity.LOAD_AUTHENTICATED_URL, - WordPress.getCurrentBlog().getAdminUrl() + currentBlog.getAdminUrl() + "plugin-install.php?tab=search&s=jetpack+by+wordpress.com" + "&plugin-search-input=Search+Plugins"); startActivityForResult(jetpackIntent, REQUEST_JETPACK); @@ -490,13 +494,13 @@ public boolean onCreateOptionsMenu(Menu menu) { @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.menu_view_stats_full_site) { - final String blogId = StatsUtils.getBlogId(); + final String blogId = StatsUtils.getBlogId(mLocalBlogID); if (blogId == null) { showJetpackMissingAlert(this); return true; } - StatsUtils.StatsCredentials credentials = StatsUtils.getCurrentBlogStatsCredentials(); + StatsUtils.StatsCredentials credentials = StatsUtils.getBlogStatsCredentials(mLocalBlogID); if (credentials == null) { Toast.makeText(this, R.string.jetpack_message_not_admin, Toast.LENGTH_LONG).show(); return true; @@ -531,6 +535,8 @@ private void scrollToTop() { public void onBlogChanged() { super.onBlogChanged(); + mLocalBlogID = WordPress.getCurrentBlog().getLocalTableBlogId(); + stopStatsService(); scrollToTop(); @@ -539,25 +545,25 @@ public void onBlogChanged() { StatsAbsViewFragment fragment; - fragment = StatsAbsViewFragment.newInstance(StatsViewType.VISITORS_AND_VIEWS); + fragment = StatsAbsViewFragment.newInstance(StatsViewType.VISITORS_AND_VIEWS, mLocalBlogID); ft.replace(R.id.stats_visitors_and_views_container, fragment, StatsVisitorsAndViewsFragment.TAG); - fragment = StatsAbsViewFragment.newInstance(StatsViewType.TOP_POSTS_AND_PAGES); + fragment = StatsAbsViewFragment.newInstance(StatsViewType.TOP_POSTS_AND_PAGES, mLocalBlogID); ft.replace(R.id.stats_top_posts_container, fragment, StatsTopPostsAndPagesFragment.TAG); - fragment = StatsAbsViewFragment.newInstance(StatsViewType.VIEWS_BY_COUNTRY); + fragment = StatsAbsViewFragment.newInstance(StatsViewType.VIEWS_BY_COUNTRY, mLocalBlogID); ft.replace(R.id.stats_geoviews_container, fragment, StatsGeoviewsFragment.TAG); - fragment = StatsAbsViewFragment.newInstance(StatsViewType.CLICKS); + fragment = StatsAbsViewFragment.newInstance(StatsViewType.CLICKS, mLocalBlogID); ft.replace(R.id.stats_clicks_container, fragment, StatsClicksFragment.TAG); - fragment = StatsAbsViewFragment.newInstance(StatsViewType.SEARCH_ENGINE_TERMS); + fragment = StatsAbsViewFragment.newInstance(StatsViewType.SEARCH_ENGINE_TERMS, mLocalBlogID); ft.replace(R.id.stats_searchengine_container, fragment, StatsSearchEngineTermsFragment.TAG); - fragment = StatsAbsViewFragment.newInstance(StatsViewType.TOTALS_FOLLOWERS_AND_SHARES); + fragment = StatsAbsViewFragment.newInstance(StatsViewType.TOTALS_FOLLOWERS_AND_SHARES, mLocalBlogID); ft.replace(R.id.stats_totals_followers_shares_container, fragment, StatsTotalsFollowersAndSharesFragment.TAG); - fragment = StatsReferrersFragment.newInstance(StatsViewType.REFERRERS); + fragment = StatsReferrersFragment.newInstance(StatsViewType.REFERRERS, mLocalBlogID); ft.replace(R.id.stats_referrers_container, fragment, StatsReferrersFragment.TAG); ft.commit(); @@ -575,17 +581,15 @@ protected boolean shouldUpdateCurrentBlogStatsInBackground() { return false; } - boolean dotComCredentialsMatch() { - SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); - String username = settings.getString(WordPress.WPCOM_USERNAME_PREFERENCE, ""); - return username.equals(WordPress.getCurrentBlog().getUsername()); - } - private void refreshStats() { - if (WordPress.getCurrentBlog() == null) { + final Blog currentBlog = WordPress.getBlog(mLocalBlogID); + + if (currentBlog == null) { + AppLog.w(T.STATS, "Current blog is null. This should never happen here."); mPullToRefreshHelper.setRefreshing(false); return; } + if (!NetworkUtils.isNetworkAvailable(this)) { mPullToRefreshHelper.setRefreshing(false); return; @@ -597,20 +601,13 @@ private void refreshStats() { return; } - final Blog currentBlog = WordPress.getCurrentBlog(); - if (currentBlog == null) { - mPullToRefreshHelper.setRefreshing(false); - AppLog.w(T.STATS, "Current blog is null. This should never happen here."); - return; - } - - final String blogId = StatsUtils.getBlogId(); + final String blogId = StatsUtils.getBlogId(mLocalBlogID); // Make sure the blogId is available. if (blogId != null) { // for self-hosted sites; launch the user into an activity where they can provide their credentials - if (!WordPress.getCurrentBlog().isDotcomFlag() - && !WordPress.getCurrentBlog().hasValidJetpackCredentials() && mResultCode != RESULT_CANCELED) { + if (!currentBlog.isDotcomFlag() + && !currentBlog.hasValidJetpackCredentials() && mResultCode != RESULT_CANCELED) { if (WordPress.hasValidWPComCredentials(this)) { // Let's try the global wpcom credentials them first SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); @@ -618,9 +615,9 @@ private void refreshStats() { String password = WordPressDB.decryptPassword( settings.getString(WordPress.WPCOM_PASSWORD_PREFERENCE, null) ); - WordPress.getCurrentBlog().setDotcom_username(username); - WordPress.getCurrentBlog().setDotcom_password(password); - WordPress.wpDB.saveBlog(WordPress.getCurrentBlog()); + currentBlog.setDotcom_username(username); + currentBlog.setDotcom_password(password); + WordPress.wpDB.saveBlog(currentBlog); mPullToRefreshHelper.setRefreshing(true); } else { startWPComLoginActivity(); @@ -688,7 +685,8 @@ public void onReceive(Context context, Intent intent) { StatsActivity.this); // Read the current wpcom username from blog settings, then read it from // the app wpcom account. - String username = StringUtils.notNullStr(WordPress.getCurrentBlog().getDotcom_username()); + final Blog currentBlog = WordPress.getBlog(mLocalBlogID); + String username = StringUtils.notNullStr(currentBlog.getDotcom_username()); if (username.equals("")) { username = settings.getString(WordPress.WPCOM_USERNAME_PREFERENCE, ""); } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsBarGraphFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsBarGraphFragment.java index 234ccbea79e1..c12a051e82d5 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsBarGraphFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsBarGraphFragment.java @@ -12,7 +12,6 @@ import android.content.Loader; import android.database.ContentObserver; import android.database.Cursor; -import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android.support.v4.content.LocalBroadcastManager; @@ -50,6 +49,7 @@ */ public class StatsBarGraphFragment extends Fragment implements LoaderManager.LoaderCallbacks { private static final String ARGS_BAR_CHART_UNIT = "ARGS_TIMEFRAME"; + private static final String ARGS_LOCAL_TABLE_BLOG_ID = "ARGS_BLOG_ID"; private LinearLayout mGraphContainer; private final ContentObserver mContentObserver = new BarGraphContentObserver(new Handler()); @@ -61,11 +61,12 @@ public class StatsBarGraphFragment extends Fragment implements LoaderManager.Loa private int mLastHighlightedBar = -1; private Tooltip mTooltip; - public static StatsBarGraphFragment newInstance(StatsBarChartUnit unit) { + public static StatsBarGraphFragment newInstance(StatsBarChartUnit unit, int localTableBlogID) { StatsBarGraphFragment fragment = new StatsBarGraphFragment(); Bundle args = new Bundle(); args.putInt(ARGS_BAR_CHART_UNIT, unit.ordinal()); + args.putInt(ARGS_LOCAL_TABLE_BLOG_ID, localTableBlogID); fragment.setArguments(args); return fragment; @@ -160,19 +161,9 @@ private void handleBarChartTap(int tappedBar) { properties.put("unit", unit.name()); AnalyticsTracker.track(AnalyticsTracker.Stat.STATS_TAPPED_BAR_CHART, properties); if (unit == StatsBarChartUnit.DAY) { - StatsUtils.StatsCredentials credentials = StatsUtils.getCurrentBlogStatsCredentials(); - if (credentials == null) { - // Credentials empty, do nothing. - return; - } - - String statsAuthenticatedUser = credentials.getUsername(); - String statsAuthenticatedPassword = credentials.getPassword(); Intent statsWebViewIntent = new Intent(this.getActivity(), StatsDetailsActivity.class); - statsWebViewIntent.putExtra(StatsWebViewActivity.STATS_AUTHENTICATED_USER, statsAuthenticatedUser); - statsWebViewIntent.putExtra(StatsWebViewActivity.STATS_AUTHENTICATED_PASSWD, - statsAuthenticatedPassword); statsWebViewIntent.putExtra(StatsActivity.STATS_DETAILS_DATE, date); + statsWebViewIntent.putExtra(StatsDetailsActivity.ARG_LOCAL_TABLE_BLOG_ID, getLocalTableBlogID()); this.getActivity().startActivity(statsWebViewIntent); } else { // Week or Month on the screen. Show a toast. @@ -184,19 +175,22 @@ private void handleBarChartTap(int tappedBar) { } } - private StatsBarChartUnit getBarChartUnit() { int ordinal = getArguments().getInt(ARGS_BAR_CHART_UNIT); return StatsBarChartUnit.values()[ordinal]; } + protected int getLocalTableBlogID() { + return getArguments().getInt(ARGS_LOCAL_TABLE_BLOG_ID); + } + @Override public Loader onCreateLoader(int id, Bundle args) { - if (WordPress.getCurrentBlog() == null) { + if (WordPress.getBlog(getLocalTableBlogID()) == null) { return null; } - String blogId = WordPress.getCurrentBlog().getDotComBlogId(); + String blogId = WordPress.getBlog(getLocalTableBlogID()).getDotComBlogId(); if (TextUtils.isEmpty(blogId)) { blogId = "0"; } 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 45d8385017ff..d75944a33d46 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 @@ -50,7 +50,7 @@ protected Fragment getFragment(int position) { StatsCursorTreeFragment fragment = StatsCursorTreeFragment.newInstance(groupUri, childrenUri, R.string.stats_entry_clicks_url, R.string.stats_totals_clicks, R.string.stats_empty_clicks_title, - R.string.stats_empty_clicks_desc); + R.string.stats_empty_clicks_desc, getLocalTableBlogID()); CustomAdapter adapter = new CustomAdapter(null, getActivity()); adapter.setCursorLoaderCallback(fragment); fragment.setListAdapter(adapter); 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 c4552c2c26c8..8de5062c81ea 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 @@ -38,7 +38,7 @@ public class StatsCommentsFragment extends StatsAbsPagedViewFragment { protected Fragment getFragment(int position) { if (position == 0) { StatsCursorFragment fragment = StatsCursorFragment.newInstance(STATS_TOP_COMMENTERS_URI, - R.string.stats_entry_top_commenter, R.string.stats_totals_comments, R.string.stats_empty_comments); + R.string.stats_entry_top_commenter, R.string.stats_totals_comments, R.string.stats_empty_comments, getLocalTableBlogID()); fragment.setListAdapter(new CustomCursorAdapter(getActivity(), null, TOP_COMMENTERS)); fragment.setCallback(this); return fragment; @@ -46,7 +46,7 @@ protected Fragment getFragment(int position) { int entryLabelResId = R.string.stats_entry_most_commented; int totalsLabelResId = R.string.stats_totals_comments; StatsCursorFragment fragment = StatsCursorFragment.newInstance(STATS_MOST_COMMENTED_URI, - R.string.stats_entry_most_commented, R.string.stats_totals_comments, R.string.stats_empty_comments); + R.string.stats_entry_most_commented, R.string.stats_totals_comments, R.string.stats_empty_comments, getLocalTableBlogID()); fragment.setListAdapter(new CustomCursorAdapter(getActivity(), null, MOST_COMMENTED)); fragment.setCallback(this); return fragment; diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsCursorFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsCursorFragment.java index 8211ed791a15..5de2d5a13bb4 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsCursorFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsCursorFragment.java @@ -38,6 +38,7 @@ public class StatsCursorFragment extends Fragment implements LoaderManager.Loade private static final String ARGS_TOTALS_LABEL = "ARGS_TOTALS_LABEL"; private static final String ARGS_EMPTY_LABEL_TITLE = "ARGS_EMPTY_LABEL_TITLE"; private static final String ARGS_EMPTY_LABEL_DESC = "ARGS_EMPTY_LABEL_DESC"; + private static final String ARGS_LOCAL_TABLE_BLOG_ID = "ARGS_BLOG_LOCAL_ID"; private static final int NO_STRING_ID = -1; public static final String TAG = StatsCursorFragment.class.getSimpleName(); @@ -51,12 +52,12 @@ public class StatsCursorFragment extends Fragment implements LoaderManager.Loade private StatsCursorInterface mCallback; public static StatsCursorFragment newInstance(Uri uri, int entryLabelResId, int totalsLabelResId, - int emptyLabelTitleResId) { - return newInstance(uri, entryLabelResId, totalsLabelResId, emptyLabelTitleResId, NO_STRING_ID); + int emptyLabelTitleResId, int localTableBlogID) { + return newInstance(uri, entryLabelResId, totalsLabelResId, emptyLabelTitleResId, NO_STRING_ID, localTableBlogID); } public static StatsCursorFragment newInstance(Uri uri, int entryLabelResId, int totalsLabelResId, - int emptyLabelTitleResId, int emptyLabelDescResId) { + int emptyLabelTitleResId, int emptyLabelDescResId, int localTableBlogID) { StatsCursorFragment fragment = new StatsCursorFragment(); Bundle args = new Bundle(); @@ -65,6 +66,7 @@ public static StatsCursorFragment newInstance(Uri uri, int entryLabelResId, int args.putInt(ARGS_TOTALS_LABEL, totalsLabelResId); args.putInt(ARGS_EMPTY_LABEL_TITLE, emptyLabelTitleResId); args.putInt(ARGS_EMPTY_LABEL_DESC, emptyLabelDescResId); + args.putInt(ARGS_LOCAL_TABLE_BLOG_ID, localTableBlogID); fragment.setArguments(args); return fragment; @@ -119,6 +121,10 @@ private int getEmptyLabelDescResId() { return getArguments().getInt(ARGS_EMPTY_LABEL_DESC); } + private int getLocalTableBlogID() { + return getArguments().getInt(ARGS_LOCAL_TABLE_BLOG_ID); + } + @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); @@ -127,10 +133,10 @@ public void onActivityCreated(Bundle savedInstanceState) { @Override public Loader onCreateLoader(int id, Bundle args) { - if (WordPress.getCurrentBlog() == null) + if (WordPress.getBlog(getLocalTableBlogID()) == null) return null; - String blogId = WordPress.getCurrentBlog().getDotComBlogId(); + String blogId = WordPress.getBlog(getLocalTableBlogID()).getDotComBlogId(); if (TextUtils.isEmpty(blogId)) blogId = "0"; return new CursorLoader(getActivity(), getUri(), null, "blogId=?", new String[] { blogId }, null); } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsCursorTreeFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsCursorTreeFragment.java index 95ccdb57ab08..2f37e86d43ae 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsCursorTreeFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsCursorTreeFragment.java @@ -46,6 +46,7 @@ public class StatsCursorTreeFragment extends Fragment private static final String ARGS_TOTALS_LABEL = "ARGS_TOTALS_LABEL"; private static final String ARGS_EMPTY_LABEL_TITLE = "ARGS_EMPTY_LABEL_TITLE"; private static final String ARGS_EMPTY_LABEL_DESC = "ARGS_EMPTY_LABEL_DESC"; + private static final String ARGS_LOCAL_TABLE_BLOG_ID = "ARGS_BLOG_LOCAL_ID"; public static final String TAG = StatsCursorTreeFragment.class.getSimpleName(); @@ -61,7 +62,7 @@ public class StatsCursorTreeFragment extends Fragment public static StatsCursorTreeFragment newInstance(Uri groupUri, Uri childrenUri, int entryLabelResId, int totalsLabelResId, int emptyLabelTitleResId, - int emptyLabelDescResId) { + int emptyLabelDescResId, int localTableBlogID) { StatsCursorTreeFragment fragment = new StatsCursorTreeFragment(); Bundle args = new Bundle(); @@ -71,6 +72,7 @@ public static StatsCursorTreeFragment newInstance(Uri groupUri, Uri childrenUri, args.putInt(ARGS_TOTALS_LABEL, totalsLabelResId); args.putInt(ARGS_EMPTY_LABEL_TITLE, emptyLabelTitleResId); args.putInt(ARGS_EMPTY_LABEL_DESC, emptyLabelDescResId); + args.putInt(ARGS_LOCAL_TABLE_BLOG_ID, localTableBlogID); fragment.setArguments(args); return fragment; @@ -131,6 +133,10 @@ private int getEmptyLabelDescResId() { return getArguments().getInt(ARGS_EMPTY_LABEL_DESC); } + private int getLocalTableBlogID() { + return getArguments().getInt(ARGS_LOCAL_TABLE_BLOG_ID); + } + @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); @@ -141,10 +147,10 @@ public void onActivityCreated(Bundle savedInstanceState) { @Override public Loader onCreateLoader(int id, Bundle args) { - if (WordPress.getCurrentBlog() == null) + if (WordPress.getBlog(getLocalTableBlogID()) == null) return null; - String blogId = WordPress.getCurrentBlog().getDotComBlogId(); + String blogId = WordPress.getBlog(getLocalTableBlogID()).getDotComBlogId(); if (TextUtils.isEmpty(blogId)) blogId = "0"; diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsDetailsActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsDetailsActivity.java index 339631770bb6..d06dfb637891 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsDetailsActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsDetailsActivity.java @@ -56,12 +56,14 @@ * The native stats details activity, accessible when the user taps on a bar in the main chart. */ public class StatsDetailsActivity extends WPActionBarActivity { + public static final String ARG_LOCAL_TABLE_BLOG_ID = "ARGS_BLOG_ID"; private boolean mIsInFront; private boolean mIsUpdatingStats; private PullToRefreshHelper mPullToRefreshHelper; private String mStatsDate = null; private final Handler mHandler = new Handler(); private int mAltRowColor; + private int mLocalBlogID = -1; // Variables that hold data returned from the REST API private int mVisitorsCount = 0; @@ -126,10 +128,13 @@ public void onRefreshStarted(View view) { } ); - Bundle extras = getIntent().getExtras(); - if (extras != null && extras.containsKey(StatsActivity.STATS_DETAILS_DATE)) { - String date = extras.getString(StatsActivity.STATS_DETAILS_DATE); - mStatsDate = date; + if (getIntent() != null) { + Bundle extras = getIntent().getExtras(); + if (extras != null && extras.containsKey(StatsActivity.STATS_DETAILS_DATE)) { + String date = extras.getString(StatsActivity.STATS_DETAILS_DATE); + mStatsDate = date; + } + mLocalBlogID = getIntent().getIntExtra(ARG_LOCAL_TABLE_BLOG_ID, -1); } setTitle(getString(R.string.stats)); @@ -194,7 +199,7 @@ private void refreshStats() { return; } - final Blog currentBlog = WordPress.getCurrentBlog(); + final Blog currentBlog = WordPress.getBlog(mLocalBlogID); if (mStatsDate == null || currentBlog == null || !NetworkUtils.isNetworkAvailable(this)) { mPullToRefreshHelper.setRefreshing(false); @@ -204,7 +209,7 @@ private void refreshStats() { return; } - final String blogId = StatsUtils.getBlogId(); + final String blogId = StatsUtils.getBlogId(mLocalBlogID); // View and visitor counts for a site final String viewAndVisitorsPath = String.format( 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 354625409d8b..aacd45140daa 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 @@ -32,7 +32,7 @@ protected Fragment getFragment(int position) { Uri uri = Uri.parse(STATS_GEOVIEWS_URI.toString() + "?timeframe=" + TIMEFRAMES[position].name()); - StatsCursorFragment fragment = StatsCursorFragment.newInstance(uri, entryLabelResId, totalsLabelResId, emptyLabelResId); + StatsCursorFragment fragment = StatsCursorFragment.newInstance(uri, entryLabelResId, totalsLabelResId, emptyLabelResId, getLocalTableBlogID()); fragment.setListAdapter(new CustomCursorAdapter(getActivity(), null)); fragment.setCallback(this); return fragment; 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 ef6ef2803085..6d016ad0eab6 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 @@ -34,7 +34,7 @@ protected Fragment getFragment(int position) { StatsCursorTreeFragment fragment = StatsCursorTreeFragment.newInstance(groupUri, childrenUri, R.string.stats_entry_referrers, R.string.stats_totals_views, R.string.stats_empty_referrers_title, - R.string.stats_empty_referrers_desc); + R.string.stats_empty_referrers_desc, getLocalTableBlogID()); CustomAdapter adapter = new CustomAdapter(null, getActivity()); adapter.setCursorLoaderCallback(fragment); fragment.setListAdapter(adapter); diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsSearchEngineTermsFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsSearchEngineTermsFragment.java index 75b5ff51377f..b106cfd41a7b 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsSearchEngineTermsFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsSearchEngineTermsFragment.java @@ -29,7 +29,7 @@ protected Fragment getFragment(int position) { StatsCursorFragment fragment = StatsCursorFragment.newInstance(uri, R.string.stats_entry_search_engine_terms, R.string.stats_totals_views, R.string.stats_empty_search_engine_terms_title, - R.string.stats_empty_search_engine_terms_desc); + R.string.stats_empty_search_engine_terms_desc, getLocalTableBlogID()); fragment.setListAdapter(new CustomCursorAdapter(getActivity(), null)); fragment.setCallback(this); return fragment; 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 29f7c57e293e..8fe10a98c752 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 @@ -44,7 +44,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa int entryLabelResId = R.string.stats_entry_tags_and_categories; int totalsLabelResId = R.string.stats_totals_views; int emptyLabelResId = R.string.stats_empty_tags_and_categories; - StatsCursorFragment fragment = StatsCursorFragment.newInstance(STATS_TAGS_AND_CATEGORIES_URI, entryLabelResId, totalsLabelResId, emptyLabelResId); + StatsCursorFragment fragment = StatsCursorFragment.newInstance(STATS_TAGS_AND_CATEGORIES_URI, entryLabelResId, totalsLabelResId, emptyLabelResId, getLocalTableBlogID()); fragment.setListAdapter(new CustomCursorAdapter(getActivity(), null)); fragment.setCallback(this); diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsTopAuthorsFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsTopAuthorsFragment.java index 1e98af433636..9ffd19076b24 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsTopAuthorsFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsTopAuthorsFragment.java @@ -31,7 +31,7 @@ protected Fragment getFragment(int position) { Uri uri = Uri.parse(STATS_TOP_AUTHORS_URI.toString() + "?timeframe=" + TIMEFRAMES[position].name()); - StatsCursorFragment fragment = StatsCursorFragment.newInstance(uri, entryLabelResId, totalsLabelResId, emptyLabelResId); + StatsCursorFragment fragment = StatsCursorFragment.newInstance(uri, entryLabelResId, totalsLabelResId, emptyLabelResId, getLocalTableBlogID()); fragment.setListAdapter(new CustomCursorAdapter(getActivity(), null)); fragment.setCallback(this); return fragment; 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 51ba30bb019e..05a39aa81f30 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 @@ -28,7 +28,7 @@ protected Fragment getFragment(int position) { Uri uri = Uri.parse(STATS_TOP_POSTS_AND_PAGES_URI.toString() + "?timeframe=" + TIMEFRAMES[position].name()); StatsCursorFragment fragment = StatsCursorFragment.newInstance(uri, R.string.stats_entry_posts_and_pages, - R.string.stats_totals_views, R.string.stats_empty_top_posts_title, R.string.stats_empty_top_posts_desc); + R.string.stats_totals_views, R.string.stats_empty_top_posts_title, R.string.stats_empty_top_posts_desc, getLocalTableBlogID()); fragment.setListAdapter(new CustomCursorAdapter(getActivity(), null)); fragment.setCallback(this); return fragment; diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsUtils.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsUtils.java index 9dbc522fc4ff..97f0cba03198 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsUtils.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsUtils.java @@ -288,16 +288,17 @@ public static int getSmallestWidthDP() { } /** - * Return the credentials for the current blog or null if not available. + * Return the credentials for the blog or null if not available. * * 1. Read the credentials at blog level (Jetpack connected with a wpcom account != main account) * 2. If credentials are empty read the global wpcom credentials * 3. Check that credentials are not empty before launching the activity * */ - public static StatsCredentials getCurrentBlogStatsCredentials() { - String statsAuthenticatedUser = WordPress.getCurrentBlog().getDotcom_username(); - String statsAuthenticatedPassword = WordPress.getCurrentBlog().getDotcom_password(); + public static StatsCredentials getBlogStatsCredentials(int localTableBlogID) { + Blog currentBlog = WordPress.getBlog(localTableBlogID); + String statsAuthenticatedUser = currentBlog.getDotcom_username(); + String statsAuthenticatedPassword = currentBlog.getDotcom_password(); if (org.apache.commons.lang.StringUtils.isEmpty(statsAuthenticatedPassword) || org.apache.commons.lang.StringUtils.isEmpty(statsAuthenticatedUser)) { @@ -335,16 +336,8 @@ public String getPassword() { } } - /** - * Return the remote blogId as stored on the wpcom backend. - *

- * blogId is always available for dotcom blogs. It could be null on Jetpack blogs - * with blogOptions still empty or when the option 'jetpack_client_id' is not available in blogOptions. - *

- * @return String blogId or null - */ - public static String getBlogId() { - Blog currentBlog = WordPress.getCurrentBlog(); + public static String getBlogId(int localTableBlogID) { + Blog currentBlog = WordPress.getBlog(localTableBlogID); if (currentBlog == null) { return null; } @@ -354,4 +347,5 @@ public static String getBlogId() { return currentBlog.getApi_blogid(); } } + } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsVideoFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsVideoFragment.java index 07d5d4c25de6..40b4ae2f4821 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsVideoFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsVideoFragment.java @@ -37,7 +37,7 @@ protected Fragment getFragment(int position) { Uri uri = Uri.parse(STATS_VIDEOS_URI.toString() + "?timeframe=" + TIMEFRAMES[position].name()); - StatsCursorFragment fragment = StatsCursorFragment.newInstance(uri, entryLabelResId, totalsLabelResId, emptyLabelResId); + StatsCursorFragment fragment = StatsCursorFragment.newInstance(uri, entryLabelResId, totalsLabelResId, emptyLabelResId, getLocalTableBlogID()); fragment.setListAdapter(new CustomCursorAdapter(getActivity(), null)); fragment.setCallback(this); return fragment; 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 9f38064262bf..0e7cc36c4fb3 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 @@ -129,7 +129,7 @@ private void loadBarChartFragmentForIndex(int index) { unit = StatsBarChartUnit.DAY; } - StatsBarGraphFragment statsBarGraphFragment = StatsBarGraphFragment.newInstance(unit); + StatsBarGraphFragment statsBarGraphFragment = StatsBarGraphFragment.newInstance(unit, getLocalTableBlogID()); FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.setCustomAnimations(R.anim.stats_fade_in, R.anim.stats_fade_out); ft.replace(R.id.stats_bar_chart_fragment_container, statsBarGraphFragment, childTag); @@ -137,7 +137,7 @@ private void loadBarChartFragmentForIndex(int index) { } private void refreshSummary() { - if (WordPress.getCurrentBlog() == null) { + if (WordPress.getBlog(getLocalTableBlogID()) == null) { return; } @@ -145,7 +145,7 @@ private void refreshSummary() { new Thread() { @Override public void run() { - String blogId = WordPress.getCurrentBlog().getDotComBlogId(); + String blogId = WordPress.getBlog(getLocalTableBlogID()).getDotComBlogId(); if (TextUtils.isEmpty(blogId)) { blogId = "0"; } @@ -164,7 +164,7 @@ private void refreshSummary(final StatsSummary stats) { return; } - String timezone = StatsUtils.getBlogTimezone(WordPress.getCurrentBlog()); + String timezone = StatsUtils.getBlogTimezone(WordPress.getBlog(getLocalTableBlogID())); long currentDate = timezone != null ? StatsUtils.getCurrentDateMsTZ(timezone) : StatsUtils.getCurrentDateMs(); if (stats != null From 42b4932d650c3e33aa00b505a63dc726947f61ee Mon Sep 17 00:00:00 2001 From: Danilo Ercoli Date: Fri, 29 Aug 2014 23:35:06 +0200 Subject: [PATCH 2/9] Do not use currentBlog when opening Stats from Notifications. --- .../android/ui/notifications/BigBadgeFragment.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/notifications/BigBadgeFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/notifications/BigBadgeFragment.java index 89b638caed27..249e55db1433 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/notifications/BigBadgeFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/notifications/BigBadgeFragment.java @@ -108,15 +108,10 @@ private void showStatsActivity(int remoteBlogId) { return; } - // stats activity is designed to work with the current blog, so switch blogs if necessary - if (WordPress.getCurrentRemoteBlogId() != remoteBlogId) { - // TODO: should we show a toast to let user know blog was switched? - int localBlogId = WordPress.wpDB.getLocalTableBlogIdForRemoteBlogId(remoteBlogId); - WordPress.setCurrentBlog(localBlogId); - } - + int localBlogId = WordPress.wpDB.getLocalTableBlogIdForRemoteBlogId(remoteBlogId); Intent intent = new Intent(getActivity(), StatsActivity.class); intent.putExtra(StatsActivity.ARG_NO_MENU_DRAWER, true); + intent.putExtra(StatsActivity.ARG_LOCAL_TABLE_BLOG_ID, localBlogId); getActivity().startActivity(intent); } } From 73c8fc1fd9cd4264acd3e299ffea247dbc394012 Mon Sep 17 00:00:00 2001 From: Danilo Ercoli Date: Fri, 29 Aug 2014 23:45:38 +0200 Subject: [PATCH 3/9] Re-add a comment that was previously removed by chance --- .../java/org/wordpress/android/ui/stats/StatsUtils.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsUtils.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsUtils.java index 97f0cba03198..c4a1d76438c7 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsUtils.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsUtils.java @@ -336,6 +336,14 @@ public String getPassword() { } } + /** + * Return the remote blogId as stored on the wpcom backend. + *

+ * blogId is always available for dotcom blogs. It could be null on Jetpack blogs + * with blogOptions still empty or when the option 'jetpack_client_id' is not available in blogOptions. + *

+ * @return String blogId or null + */ public static String getBlogId(int localTableBlogID) { Blog currentBlog = WordPress.getBlog(localTableBlogID); if (currentBlog == null) { @@ -347,5 +355,4 @@ public static String getBlogId(int localTableBlogID) { return currentBlog.getApi_blogid(); } } - } From c06c52259fb08f410e389d0059f68e69f9ee7ec7 Mon Sep 17 00:00:00 2001 From: Danilo Ercoli Date: Fri, 29 Aug 2014 23:46:39 +0200 Subject: [PATCH 4/9] Add NPE check to getBlogStatsCredentials --- .../main/java/org/wordpress/android/ui/stats/StatsUtils.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsUtils.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsUtils.java index c4a1d76438c7..991c312cdcb5 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsUtils.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsUtils.java @@ -297,6 +297,9 @@ public static int getSmallestWidthDP() { */ public static StatsCredentials getBlogStatsCredentials(int localTableBlogID) { Blog currentBlog = WordPress.getBlog(localTableBlogID); + if (currentBlog == null) { + return null; + } String statsAuthenticatedUser = currentBlog.getDotcom_username(); String statsAuthenticatedPassword = currentBlog.getDotcom_password(); From 9d43b0e7481c9f44a7a3d1961dc0ca09f1c20fc6 Mon Sep 17 00:00:00 2001 From: Danilo Ercoli Date: Sat, 30 Aug 2014 00:14:10 +0200 Subject: [PATCH 5/9] Just added another Null Pointer check. --- .../java/org/wordpress/android/ui/stats/StatsActivity.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsActivity.java index 52c53c78d001..24d26891f237 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsActivity.java @@ -686,6 +686,10 @@ public void onReceive(Context context, Intent intent) { // Read the current wpcom username from blog settings, then read it from // the app wpcom account. final Blog currentBlog = WordPress.getBlog(mLocalBlogID); + // If currentBlog is null at this point just exit. + if (currentBlog==null) { + return; + } String username = StringUtils.notNullStr(currentBlog.getDotcom_username()); if (username.equals("")) { username = settings.getString(WordPress.WPCOM_USERNAME_PREFERENCE, ""); From 7fca285d627ef4ba5916e0357325f197f3faf533 Mon Sep 17 00:00:00 2001 From: Danilo Ercoli Date: Mon, 1 Sep 2014 16:09:03 +0200 Subject: [PATCH 6/9] Make sure blog_id passed to Stats activity is valid and the blog available in the app --- .../org/wordpress/android/ui/stats/StatsActivity.java | 9 ++++++++- WordPress/src/main/res/values/strings.xml | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsActivity.java index 24d26891f237..023fc77d7cbb 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsActivity.java @@ -143,7 +143,14 @@ public void onRefreshStarted(View view) { mLocalBlogID = getIntent().getIntExtra(ARG_LOCAL_TABLE_BLOG_ID, -1); } - //TODO check if all variables are set + //Make sure the blog_id passed to this activity is valid and the blog is available within the app + final Blog currentBlog = WordPress.getBlog(mLocalBlogID); + + if (currentBlog == null) { + Toast.makeText(this, R.string.stats_no_blog, Toast.LENGTH_LONG).show(); + finish(); + return; + } loadStatsFragments(); diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml index d4a143ca7c45..8e725ed429f3 100644 --- a/WordPress/src/main/res/values/strings.xml +++ b/WordPress/src/main/res/values/strings.xml @@ -330,6 +330,7 @@ Stats + Stats couldn\'t be loaded for the blog View full site View stats Views per Visitor From f21a24e5f6ecf1b4017c460a689d1025abf2c389 Mon Sep 17 00:00:00 2001 From: Danilo Ercoli Date: Mon, 1 Sep 2014 17:47:17 +0200 Subject: [PATCH 7/9] Better error message --- .../main/java/org/wordpress/android/ui/stats/StatsActivity.java | 1 + WordPress/src/main/res/values/strings.xml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsActivity.java index 023fc77d7cbb..6ab6ed470cf5 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsActivity.java @@ -147,6 +147,7 @@ public void onRefreshStarted(View view) { final Blog currentBlog = WordPress.getBlog(mLocalBlogID); if (currentBlog == null) { + AppLog.e(T.STATS, "The blog with local_blog_id " + mLocalBlogID + " cannot be loaded from the DB."); Toast.makeText(this, R.string.stats_no_blog, Toast.LENGTH_LONG).show(); finish(); return; diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml index 8e725ed429f3..8cedbdd21151 100644 --- a/WordPress/src/main/res/values/strings.xml +++ b/WordPress/src/main/res/values/strings.xml @@ -330,7 +330,7 @@ Stats - Stats couldn\'t be loaded for the blog + Stats couldn\'t be loaded for the required blog View full site View stats Views per Visitor From f6ac1989536038c5bc4eee9b21999f2c99e0977d Mon Sep 17 00:00:00 2001 From: Danilo Ercoli Date: Tue, 2 Sep 2014 12:33:19 +0200 Subject: [PATCH 8/9] Add few NPE checks --- .../java/org/wordpress/android/ui/stats/StatsActivity.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsActivity.java index 6ab6ed470cf5..05cb33c5bb38 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsActivity.java @@ -250,7 +250,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == WPComLoginActivity.REQUEST_CODE) { mResultCode = resultCode; final Blog currentBlog = WordPress.getBlog(mLocalBlogID); - if (resultCode == RESULT_OK && !currentBlog.isDotcomFlag()) { + if (resultCode == RESULT_OK && currentBlog != null && !currentBlog.isDotcomFlag()) { if (StatsUtils.getBlogId(mLocalBlogID) == null) { final Handler handler = new Handler(); // Attempt to get the Jetpack blog ID @@ -461,6 +461,10 @@ public void onFailure(ApiHelper.ErrorType errorType, String errorMessage, Throwa private void showJetpackMissingAlert(final Activity currentActivity) { AlertDialog.Builder builder = new AlertDialog.Builder(currentActivity); final Blog currentBlog = WordPress.getBlog(mLocalBlogID); + if (currentBlog == null && !isFinishing()) { + AppLog.e(T.STATS, "The blog with local_blog_id " + mLocalBlogID + " cannot be loaded from the DB."); + Toast.makeText(this, R.string.stats_no_blog, Toast.LENGTH_LONG).show(); + } if (currentBlog.isAdmin()) { builder.setMessage(getString(R.string.jetpack_message)) .setTitle(getString(R.string.jetpack_not_found)); From 6d38297f3f7e4caa67d06e68a61c014904f267c2 Mon Sep 17 00:00:00 2001 From: Danilo Ercoli Date: Tue, 2 Sep 2014 12:52:38 +0200 Subject: [PATCH 9/9] Define one single constant ARGS_LOCAL_TABLE_BLOG_ID in StatsActivity and use it in fragments. --- .../wordpress/android/ui/stats/StatsAbsViewFragment.java | 5 ++--- .../java/org/wordpress/android/ui/stats/StatsActivity.java | 2 +- .../wordpress/android/ui/stats/StatsBarGraphFragment.java | 7 +++---- .../wordpress/android/ui/stats/StatsCursorFragment.java | 5 ++--- .../android/ui/stats/StatsCursorTreeFragment.java | 5 ++--- .../wordpress/android/ui/stats/StatsDetailsActivity.java | 3 +-- 6 files changed, 11 insertions(+), 16 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbsViewFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbsViewFragment.java index d50519f8a900..55e2e3f2a707 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbsViewFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsAbsViewFragment.java @@ -51,14 +51,13 @@ public static StatsAbsViewFragment newInstance(StatsViewType viewType, int local Bundle args = new Bundle(); args.putInt(ARGS_VIEW_TYPE, viewType.ordinal()); - args.putInt(ARGS_LOCAL_TABLE_BLOG_ID, localTableBlogID); + args.putInt(StatsActivity.ARG_LOCAL_TABLE_BLOG_ID, localTableBlogID); fragment.setArguments(args); return fragment; } private static final String ARGS_VIEW_TYPE = "ARGS_VIEW_TYPE"; - private static final String ARGS_LOCAL_TABLE_BLOG_ID = "ARGS_BLOG_ID"; protected StatsViewType getViewType() { int ordinal = getArguments().getInt(ARGS_VIEW_TYPE); @@ -66,7 +65,7 @@ protected StatsViewType getViewType() { } protected int getLocalTableBlogID() { - return getArguments().getInt(ARGS_LOCAL_TABLE_BLOG_ID); + return getArguments().getInt(StatsActivity.ARG_LOCAL_TABLE_BLOG_ID); } protected abstract String getTitle(); diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsActivity.java index 05cb33c5bb38..11d0495e53b6 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsActivity.java @@ -73,7 +73,7 @@ public class StatsActivity extends WPActionBarActivity implements ScrollViewExt. private static final int REQUEST_JETPACK = 7000; public static final String ARG_NO_MENU_DRAWER = "no_menu_drawer"; - public static final String ARG_LOCAL_TABLE_BLOG_ID = "BLOG_LOCAL_ID"; + public static final String ARG_LOCAL_TABLE_BLOG_ID = "ARG_LOCAL_TABLE_BLOG_ID"; public static final String STATS_GESTURE_SHOW_TAP = "STATS_SHOW_TAP"; public static final String STATS_GESTURE_SINGLE_TAP_CONFIRMED = "STATS_SINGLE_TAP_CONFIRMED"; diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsBarGraphFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsBarGraphFragment.java index c12a051e82d5..e4786ca72fe4 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsBarGraphFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsBarGraphFragment.java @@ -49,7 +49,6 @@ */ public class StatsBarGraphFragment extends Fragment implements LoaderManager.LoaderCallbacks { private static final String ARGS_BAR_CHART_UNIT = "ARGS_TIMEFRAME"; - private static final String ARGS_LOCAL_TABLE_BLOG_ID = "ARGS_BLOG_ID"; private LinearLayout mGraphContainer; private final ContentObserver mContentObserver = new BarGraphContentObserver(new Handler()); @@ -66,7 +65,7 @@ public static StatsBarGraphFragment newInstance(StatsBarChartUnit unit, int loca Bundle args = new Bundle(); args.putInt(ARGS_BAR_CHART_UNIT, unit.ordinal()); - args.putInt(ARGS_LOCAL_TABLE_BLOG_ID, localTableBlogID); + args.putInt(StatsActivity.ARG_LOCAL_TABLE_BLOG_ID, localTableBlogID); fragment.setArguments(args); return fragment; @@ -163,7 +162,7 @@ private void handleBarChartTap(int tappedBar) { if (unit == StatsBarChartUnit.DAY) { Intent statsWebViewIntent = new Intent(this.getActivity(), StatsDetailsActivity.class); statsWebViewIntent.putExtra(StatsActivity.STATS_DETAILS_DATE, date); - statsWebViewIntent.putExtra(StatsDetailsActivity.ARG_LOCAL_TABLE_BLOG_ID, getLocalTableBlogID()); + statsWebViewIntent.putExtra(StatsActivity.ARG_LOCAL_TABLE_BLOG_ID, getLocalTableBlogID()); this.getActivity().startActivity(statsWebViewIntent); } else { // Week or Month on the screen. Show a toast. @@ -181,7 +180,7 @@ private StatsBarChartUnit getBarChartUnit() { } protected int getLocalTableBlogID() { - return getArguments().getInt(ARGS_LOCAL_TABLE_BLOG_ID); + return getArguments().getInt(StatsActivity.ARG_LOCAL_TABLE_BLOG_ID); } @Override diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsCursorFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsCursorFragment.java index 5de2d5a13bb4..e88b85b703f4 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsCursorFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsCursorFragment.java @@ -38,7 +38,6 @@ public class StatsCursorFragment extends Fragment implements LoaderManager.Loade private static final String ARGS_TOTALS_LABEL = "ARGS_TOTALS_LABEL"; private static final String ARGS_EMPTY_LABEL_TITLE = "ARGS_EMPTY_LABEL_TITLE"; private static final String ARGS_EMPTY_LABEL_DESC = "ARGS_EMPTY_LABEL_DESC"; - private static final String ARGS_LOCAL_TABLE_BLOG_ID = "ARGS_BLOG_LOCAL_ID"; private static final int NO_STRING_ID = -1; public static final String TAG = StatsCursorFragment.class.getSimpleName(); @@ -66,7 +65,7 @@ public static StatsCursorFragment newInstance(Uri uri, int entryLabelResId, int args.putInt(ARGS_TOTALS_LABEL, totalsLabelResId); args.putInt(ARGS_EMPTY_LABEL_TITLE, emptyLabelTitleResId); args.putInt(ARGS_EMPTY_LABEL_DESC, emptyLabelDescResId); - args.putInt(ARGS_LOCAL_TABLE_BLOG_ID, localTableBlogID); + args.putInt(StatsActivity.ARG_LOCAL_TABLE_BLOG_ID, localTableBlogID); fragment.setArguments(args); return fragment; @@ -122,7 +121,7 @@ private int getEmptyLabelDescResId() { } private int getLocalTableBlogID() { - return getArguments().getInt(ARGS_LOCAL_TABLE_BLOG_ID); + return getArguments().getInt(StatsActivity.ARG_LOCAL_TABLE_BLOG_ID); } @Override diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsCursorTreeFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsCursorTreeFragment.java index 2f37e86d43ae..8a85a6b2adfa 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsCursorTreeFragment.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsCursorTreeFragment.java @@ -46,7 +46,6 @@ public class StatsCursorTreeFragment extends Fragment private static final String ARGS_TOTALS_LABEL = "ARGS_TOTALS_LABEL"; private static final String ARGS_EMPTY_LABEL_TITLE = "ARGS_EMPTY_LABEL_TITLE"; private static final String ARGS_EMPTY_LABEL_DESC = "ARGS_EMPTY_LABEL_DESC"; - private static final String ARGS_LOCAL_TABLE_BLOG_ID = "ARGS_BLOG_LOCAL_ID"; public static final String TAG = StatsCursorTreeFragment.class.getSimpleName(); @@ -72,7 +71,7 @@ public static StatsCursorTreeFragment newInstance(Uri groupUri, Uri childrenUri, args.putInt(ARGS_TOTALS_LABEL, totalsLabelResId); args.putInt(ARGS_EMPTY_LABEL_TITLE, emptyLabelTitleResId); args.putInt(ARGS_EMPTY_LABEL_DESC, emptyLabelDescResId); - args.putInt(ARGS_LOCAL_TABLE_BLOG_ID, localTableBlogID); + args.putInt(StatsActivity.ARG_LOCAL_TABLE_BLOG_ID, localTableBlogID); fragment.setArguments(args); return fragment; @@ -134,7 +133,7 @@ private int getEmptyLabelDescResId() { } private int getLocalTableBlogID() { - return getArguments().getInt(ARGS_LOCAL_TABLE_BLOG_ID); + return getArguments().getInt(StatsActivity.ARG_LOCAL_TABLE_BLOG_ID); } @Override diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsDetailsActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsDetailsActivity.java index d06dfb637891..3dda3668caaa 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsDetailsActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/StatsDetailsActivity.java @@ -56,7 +56,6 @@ * The native stats details activity, accessible when the user taps on a bar in the main chart. */ public class StatsDetailsActivity extends WPActionBarActivity { - public static final String ARG_LOCAL_TABLE_BLOG_ID = "ARGS_BLOG_ID"; private boolean mIsInFront; private boolean mIsUpdatingStats; private PullToRefreshHelper mPullToRefreshHelper; @@ -134,7 +133,7 @@ public void onRefreshStarted(View view) { String date = extras.getString(StatsActivity.STATS_DETAILS_DATE); mStatsDate = date; } - mLocalBlogID = getIntent().getIntExtra(ARG_LOCAL_TABLE_BLOG_ID, -1); + mLocalBlogID = getIntent().getIntExtra(StatsActivity.ARG_LOCAL_TABLE_BLOG_ID, -1); } setTitle(getString(R.string.stats));