Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(806)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/banners/AppBannerManager.java

Issue 901203003: Redo how AppBannerInfoBars are created and stored (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Moving init before the early return so that restored tabs also get them Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/banners/AppBannerManager.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/banners/AppBannerManager.java b/chrome/android/java/src/org/chromium/chrome/browser/banners/AppBannerManager.java
index be5d1dc84502eeebf91c0bc5a75b2b3afb166177..6e85f5f5f46b790747b45180a9599c7eb956e1d0 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/banners/AppBannerManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/banners/AppBannerManager.java
@@ -5,18 +5,16 @@
package org.chromium.chrome.browser.banners;
import android.app.PendingIntent;
-import android.graphics.Bitmap;
-import android.graphics.drawable.BitmapDrawable;
import android.text.TextUtils;
+import org.chromium.base.ApplicationStatus;
import org.chromium.base.CalledByNative;
import org.chromium.base.JNINamespace;
+import org.chromium.chrome.R;
import org.chromium.chrome.browser.EmptyTabObserver;
import org.chromium.chrome.browser.Tab;
-import org.chromium.chrome.browser.TabObserver;
import org.chromium.content.browser.ContentViewCore;
import org.chromium.content_public.browser.WebContents;
-import org.chromium.ui.R;
/**
* Manages an AppBannerView for a Tab and its ContentView.
@@ -30,7 +28,8 @@ import org.chromium.ui.R;
* from the network.
*/
@JNINamespace("banners")
-public class AppBannerManager implements AppBannerView.Observer, AppDetailsDelegate.Observer {
+public class AppBannerManager extends EmptyTabObserver
+ implements AppBannerView.Observer, AppDetailsDelegate.Observer {
private static final String TAG = "AppBannerManager";
/** Retrieves information about a given package. */
@@ -75,35 +74,26 @@ public class AppBannerManager implements AppBannerView.Observer, AppDetailsDeleg
public AppBannerManager(Tab tab) {
mNativePointer = nativeInit();
mTab = tab;
- mTab.addObserver(createTabObserver());
+ updatePointers();
+ }
+
+ @Override
+ public void onWebContentsSwapped(Tab tab, boolean didStartLoad,
+ boolean didFinishLoad) {
+ updatePointers();
+ }
+
+ @Override
+ public void onContentChanged(Tab tab) {
updatePointers();
}
/**
- * Creates a TabObserver for monitoring a Tab, used to react to changes in the ContentView
- * or to trigger its own destruction.
- * @return TabObserver that can be used to monitor a Tab.
+ * Destroys the native AppBannerManager.
*/
- private TabObserver createTabObserver() {
- return new EmptyTabObserver() {
- @Override
- public void onWebContentsSwapped(Tab tab, boolean didStartLoad,
- boolean didFinishLoad) {
- updatePointers();
- }
-
- @Override
- public void onContentChanged(Tab tab) {
- updatePointers();
- }
-
- @Override
- public void onDestroyed(Tab tab) {
- nativeDestroy(mNativePointer);
- mContentViewCore = null;
- resetState();
- }
- };
+ public void destroy() {
+ nativeDestroy(mNativePointer);
+ resetState();
}
/**
@@ -117,7 +107,8 @@ public class AppBannerManager implements AppBannerView.Observer, AppDetailsDeleg
@CalledByNative
private int getPreferredIconSize() {
- return AppBannerView.getIconSize(mContentViewCore.getContext());
+ return ApplicationStatus.getApplicationContext().getResources().getDimensionPixelSize(
+ R.dimen.app_banner_icon_size);
}
/**
@@ -127,9 +118,6 @@ public class AppBannerManager implements AppBannerView.Observer, AppDetailsDeleg
*/
@CalledByNative
private void prepareBanner(String url, String packageName) {
- // Get rid of whatever banner is there currently.
- if (mBannerView != null) dismissCurrentBanner(AppBannerMetricsIds.DISMISS_ERROR);
-
if (sAppDetailsDelegate == null || !isBannerForCurrentPage(url)) return;
int iconSize = getPreferredIconSize();
@@ -150,38 +138,6 @@ public class AppBannerManager implements AppBannerView.Observer, AppDetailsDeleg
if (TextUtils.isEmpty(imageUrl) || !nativeFetchIcon(mNativePointer, imageUrl)) resetState();
}
- /**
- * Called when all the data required to show a banner has finally been retrieved.
- * Creates the banner and shows it, as long as the banner is still meant for the current page.
- * @param imageUrl URL of the icon.
- * @param appIcon Bitmap containing the icon itself.
- * @return Whether or not the banner was created.
- */
- @CalledByNative
- private boolean createBanner(String imageUrl, Bitmap appIcon) {
- if (mAppData == null || !isBannerForCurrentPage(mAppData.siteUrl())) return false;
-
- if (!TextUtils.equals(mAppData.imageUrl(), imageUrl)) {
- resetState();
- return false;
- }
-
- mAppData.setIcon(new BitmapDrawable(mContentViewCore.getContext().getResources(), appIcon));
- mBannerView = AppBannerView.create(mContentViewCore, this, mAppData);
- return true;
- }
-
- /**
- * Dismisses whatever banner is currently being displayed. This is treated as an automatic
- * dismissal and not one that blocks the banner from appearing in the future.
- * @param dismissalType What triggered the dismissal.
- */
- @CalledByNative
- private void dismissCurrentBanner(int dismissalType) {
- if (mBannerView != null) mBannerView.dismiss(dismissalType);
- resetState();
- }
-
@Override
public void onBannerRemoved(AppBannerView banner) {
if (mBannerView != banner) return;

Powered by Google App Engine
This is Rietveld 408576698