Commit 5c21fd59 authored by Jian Li's avatar Jian Li Committed by Commit Bot

Fix a crash in OfflinePageController

We should check if current activity is ChromeActivity in
UpdateOfflineIndicator to avoid wrong cast in HideOfflineIndicator
later when activity is not.

Bug: 886537
Change-Id: Ic7bca23b26d396651efb0b47d3c325c8bd7a89b5
Reviewed-on: https://chromium-review.googlesource.com/1235375Reviewed-by: default avatarPeter Williamson <petewil@chromium.org>
Commit-Queue: Jian Li <jianli@chromium.org>
Cr-Commit-Position: refs/heads/master@{#592874}
parent 38f6dc3b
...@@ -24,7 +24,6 @@ import org.chromium.chrome.browser.offlinepages.OfflinePageUtils; ...@@ -24,7 +24,6 @@ import org.chromium.chrome.browser.offlinepages.OfflinePageUtils;
import org.chromium.chrome.browser.snackbar.Snackbar; import org.chromium.chrome.browser.snackbar.Snackbar;
import org.chromium.chrome.browser.snackbar.SnackbarManager; import org.chromium.chrome.browser.snackbar.SnackbarManager;
import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarController; import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarController;
import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarManageable;
import org.chromium.chrome.browser.tab.EmptyTabObserver; import org.chromium.chrome.browser.tab.EmptyTabObserver;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.Tab.TabHidingType; import org.chromium.chrome.browser.tab.Tab.TabHidingType;
...@@ -142,11 +141,13 @@ public class OfflineIndicatorController implements ConnectivityDetector.Observer ...@@ -142,11 +141,13 @@ public class OfflineIndicatorController implements ConnectivityDetector.Observer
} }
Activity activity = ApplicationStatus.getLastTrackedFocusedActivity(); Activity activity = ApplicationStatus.getLastTrackedFocusedActivity();
if (activity == null) return; if (activity == null) return;
if (!(activity instanceof ChromeActivity)) return;
ChromeActivity chromeActivity = (ChromeActivity) activity;
if (isOnline) { if (isOnline) {
hideOfflineIndicator(activity); hideOfflineIndicator(chromeActivity);
} else { } else {
showOfflineIndicator(activity); showOfflineIndicator(chromeActivity);
} }
} }
...@@ -171,10 +172,7 @@ public class OfflineIndicatorController implements ConnectivityDetector.Observer ...@@ -171,10 +172,7 @@ public class OfflineIndicatorController implements ConnectivityDetector.Observer
* being loaded. * being loaded.
* Returns true if the offline indicator UI is delayed to be shown. * Returns true if the offline indicator UI is delayed to be shown.
*/ */
private boolean delayShowingOfflineIndicatorIfNeeded(Activity activity) { private boolean delayShowingOfflineIndicatorIfNeeded(ChromeActivity chromeActivity) {
if (!(activity instanceof ChromeActivity)) return false;
ChromeActivity chromeActivity = (ChromeActivity) activity;
Tab tab = chromeActivity.getActivityTab(); Tab tab = chromeActivity.getActivityTab();
if (tab == null) return false; if (tab == null) return false;
...@@ -215,10 +213,10 @@ public class OfflineIndicatorController implements ConnectivityDetector.Observer ...@@ -215,10 +213,10 @@ public class OfflineIndicatorController implements ConnectivityDetector.Observer
return true; return true;
} }
private void showOfflineIndicator(Activity activity) { private void showOfflineIndicator(ChromeActivity chromeActivity) {
if (mIsShowingOfflineIndicator || !canShowOfflineIndicator(activity)) return; if (mIsShowingOfflineIndicator || !canShowOfflineIndicator(chromeActivity)) return;
if (delayShowingOfflineIndicatorIfNeeded(activity)) return; if (delayShowingOfflineIndicatorIfNeeded(chromeActivity)) return;
// If this is the first time to show offline indicator, show it. Otherwise, it will only // If this is the first time to show offline indicator, show it. Otherwise, it will only
// be shown if the user has been continuously online for the required duration, then goes // be shown if the user has been continuously online for the required duration, then goes
...@@ -230,24 +228,24 @@ public class OfflineIndicatorController implements ConnectivityDetector.Observer ...@@ -230,24 +228,24 @@ public class OfflineIndicatorController implements ConnectivityDetector.Observer
return; return;
} }
Drawable icon = AppCompatResources.getDrawable(activity, R.drawable.ic_offline_pin_white); Drawable icon =
AppCompatResources.getDrawable(chromeActivity, R.drawable.ic_offline_pin_white);
Snackbar snackbar = Snackbar snackbar =
Snackbar.make(activity.getString(R.string.offline_indicator_offline_title), this, Snackbar.make(chromeActivity.getString(R.string.offline_indicator_offline_title),
Snackbar.TYPE_ACTION, Snackbar.UMA_OFFLINE_INDICATOR) this, Snackbar.TYPE_ACTION, Snackbar.UMA_OFFLINE_INDICATOR)
.setSingleLine(true) .setSingleLine(true)
.setProfileImage(icon) .setProfileImage(icon)
.setBackgroundColor(Color.BLACK) .setBackgroundColor(Color.BLACK)
.setTextAppearance(R.style.WhiteBody) .setTextAppearance(R.style.WhiteBody)
.setDuration(SNACKBAR_DURATION_MS) .setDuration(SNACKBAR_DURATION_MS)
.setAction( .setAction(chromeActivity.getString(
activity.getString(R.string.offline_indicator_view_offline_content), R.string.offline_indicator_view_offline_content),
null); null);
if (isUsingTopSnackbar()) { if (isUsingTopSnackbar()) {
mTopSnackbarManager.show(snackbar, activity); mTopSnackbarManager.show(snackbar, chromeActivity);
} else { } else {
// Show a bottom snackbar via SnackbarManager. // Show a bottom snackbar via SnackbarManager.
assert activity instanceof SnackbarManageable; SnackbarManager snackbarManager = chromeActivity.getSnackbarManager();
SnackbarManager snackbarManager = ((SnackbarManageable) activity).getSnackbarManager();
snackbarManager.showSnackbar(snackbar); snackbarManager.showSnackbar(snackbar);
} }
...@@ -257,15 +255,13 @@ public class OfflineIndicatorController implements ConnectivityDetector.Observer ...@@ -257,15 +255,13 @@ public class OfflineIndicatorController implements ConnectivityDetector.Observer
mHasOfflineIndicatorShownSinceActivityResumed = true; mHasOfflineIndicatorShownSinceActivityResumed = true;
} }
private void hideOfflineIndicator(Activity activity) { private void hideOfflineIndicator(ChromeActivity chromeActivity) {
if (!mIsShowingOfflineIndicator) return; if (!mIsShowingOfflineIndicator) return;
if (isUsingTopSnackbar()) { if (isUsingTopSnackbar()) {
mTopSnackbarManager.hide(); mTopSnackbarManager.hide();
} else { } else {
assert activity instanceof SnackbarManageable; chromeActivity.getSnackbarManager().dismissSnackbars(this);
SnackbarManager snackbarManager = ((SnackbarManageable) activity).getSnackbarManager();
snackbarManager.dismissSnackbars(this);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment