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;
import org.chromium.chrome.browser.snackbar.Snackbar;
import org.chromium.chrome.browser.snackbar.SnackbarManager;
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.Tab;
import org.chromium.chrome.browser.tab.Tab.TabHidingType;
......@@ -142,11 +141,13 @@ public class OfflineIndicatorController implements ConnectivityDetector.Observer
}
Activity activity = ApplicationStatus.getLastTrackedFocusedActivity();
if (activity == null) return;
if (!(activity instanceof ChromeActivity)) return;
ChromeActivity chromeActivity = (ChromeActivity) activity;
if (isOnline) {
hideOfflineIndicator(activity);
hideOfflineIndicator(chromeActivity);
} else {
showOfflineIndicator(activity);
showOfflineIndicator(chromeActivity);
}
}
......@@ -171,10 +172,7 @@ public class OfflineIndicatorController implements ConnectivityDetector.Observer
* being loaded.
* Returns true if the offline indicator UI is delayed to be shown.
*/
private boolean delayShowingOfflineIndicatorIfNeeded(Activity activity) {
if (!(activity instanceof ChromeActivity)) return false;
ChromeActivity chromeActivity = (ChromeActivity) activity;
private boolean delayShowingOfflineIndicatorIfNeeded(ChromeActivity chromeActivity) {
Tab tab = chromeActivity.getActivityTab();
if (tab == null) return false;
......@@ -215,10 +213,10 @@ public class OfflineIndicatorController implements ConnectivityDetector.Observer
return true;
}
private void showOfflineIndicator(Activity activity) {
if (mIsShowingOfflineIndicator || !canShowOfflineIndicator(activity)) return;
private void showOfflineIndicator(ChromeActivity chromeActivity) {
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
// 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
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.make(activity.getString(R.string.offline_indicator_offline_title), this,
Snackbar.TYPE_ACTION, Snackbar.UMA_OFFLINE_INDICATOR)
Snackbar.make(chromeActivity.getString(R.string.offline_indicator_offline_title),
this, Snackbar.TYPE_ACTION, Snackbar.UMA_OFFLINE_INDICATOR)
.setSingleLine(true)
.setProfileImage(icon)
.setBackgroundColor(Color.BLACK)
.setTextAppearance(R.style.WhiteBody)
.setDuration(SNACKBAR_DURATION_MS)
.setAction(
activity.getString(R.string.offline_indicator_view_offline_content),
.setAction(chromeActivity.getString(
R.string.offline_indicator_view_offline_content),
null);
if (isUsingTopSnackbar()) {
mTopSnackbarManager.show(snackbar, activity);
mTopSnackbarManager.show(snackbar, chromeActivity);
} else {
// Show a bottom snackbar via SnackbarManager.
assert activity instanceof SnackbarManageable;
SnackbarManager snackbarManager = ((SnackbarManageable) activity).getSnackbarManager();
SnackbarManager snackbarManager = chromeActivity.getSnackbarManager();
snackbarManager.showSnackbar(snackbar);
}
......@@ -257,15 +255,13 @@ public class OfflineIndicatorController implements ConnectivityDetector.Observer
mHasOfflineIndicatorShownSinceActivityResumed = true;
}
private void hideOfflineIndicator(Activity activity) {
private void hideOfflineIndicator(ChromeActivity chromeActivity) {
if (!mIsShowingOfflineIndicator) return;
if (isUsingTopSnackbar()) {
mTopSnackbarManager.hide();
} else {
assert activity instanceof SnackbarManageable;
SnackbarManager snackbarManager = ((SnackbarManageable) activity).getSnackbarManager();
snackbarManager.dismissSnackbars(this);
chromeActivity.getSnackbarManager().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