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/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); } } 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..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 @@ -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,6 +51,7 @@ public static StatsAbsViewFragment newInstance(StatsViewType viewType) { Bundle args = new Bundle(); args.putInt(ARGS_VIEW_TYPE, viewType.ordinal()); + args.putInt(StatsActivity.ARG_LOCAL_TABLE_BLOG_ID, localTableBlogID); fragment.setArguments(args); return fragment; @@ -63,5 +64,9 @@ protected StatsViewType getViewType() { return StatsViewType.values()[ordinal]; } + protected int getLocalTableBlogID() { + return getArguments().getInt(StatsActivity.ARG_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..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 @@ -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 = "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"; @@ -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,28 @@ 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); + } + + //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) { + 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; + } + + loadStatsFragments(); + mDetector = new GestureDetectorCompat(this, new MyGestureListener()); mDetector.setIsLongpressEnabled(false); @@ -175,20 +195,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 +249,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 != null && !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 +307,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 +435,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 +460,12 @@ 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 == 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)); builder.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { @@ -458,7 +474,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 +506,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 +547,8 @@ private void scrollToTop() { public void onBlogChanged() { super.onBlogChanged(); + mLocalBlogID = WordPress.getCurrentBlog().getLocalTableBlogId(); + stopStatsService(); scrollToTop(); @@ -539,25 +557,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 +593,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 +613,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 +627,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 +697,12 @@ 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); + // 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, ""); } 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..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 @@ -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; @@ -61,11 +60,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(StatsActivity.ARG_LOCAL_TABLE_BLOG_ID, localTableBlogID); fragment.setArguments(args); return fragment; @@ -160,19 +160,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(StatsActivity.ARG_LOCAL_TABLE_BLOG_ID, getLocalTableBlogID()); this.getActivity().startActivity(statsWebViewIntent); } else { // Week or Month on the screen. Show a toast. @@ -184,19 +174,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(StatsActivity.ARG_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..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 @@ -51,12 +51,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 +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(StatsActivity.ARG_LOCAL_TABLE_BLOG_ID, localTableBlogID); fragment.setArguments(args); return fragment; @@ -119,6 +120,10 @@ private int getEmptyLabelDescResId() { return getArguments().getInt(ARGS_EMPTY_LABEL_DESC); } + private int getLocalTableBlogID() { + return getArguments().getInt(StatsActivity.ARG_LOCAL_TABLE_BLOG_ID); + } + @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); @@ -127,10 +132,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..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 @@ -61,7 +61,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 +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(StatsActivity.ARG_LOCAL_TABLE_BLOG_ID, localTableBlogID); fragment.setArguments(args); return fragment; @@ -131,6 +132,10 @@ private int getEmptyLabelDescResId() { return getArguments().getInt(ARGS_EMPTY_LABEL_DESC); } + private int getLocalTableBlogID() { + return getArguments().getInt(StatsActivity.ARG_LOCAL_TABLE_BLOG_ID); + } + @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); @@ -141,10 +146,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..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 @@ -62,6 +62,7 @@ public class StatsDetailsActivity extends WPActionBarActivity { 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 +127,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(StatsActivity.ARG_LOCAL_TABLE_BLOG_ID, -1); } setTitle(getString(R.string.stats)); @@ -194,7 +198,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 +208,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..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 @@ -288,16 +288,20 @@ 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); + if (currentBlog == null) { + return null; + } + 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)) { @@ -343,8 +347,8 @@ public String getPassword() { *

* @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; } 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 diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml index d4a143ca7c45..8cedbdd21151 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 required blog View full site View stats Views per Visitor