Index: chrome/android/java/src/org/chromium/chrome/browser/infobar/AppBannerInfoBar.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/infobar/AppBannerInfoBar.java b/chrome/android/java/src/org/chromium/chrome/browser/infobar/AppBannerInfoBar.java |
index 5600d68c7f70ce1d373c4f9c1585a389bed3d84c..123b6aa07628693e593e3a1607f002e4c4b7331b 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/infobar/AppBannerInfoBar.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/infobar/AppBannerInfoBar.java |
@@ -6,6 +6,8 @@ package org.chromium.chrome.browser.infobar; |
import android.content.Context; |
import android.graphics.Bitmap; |
+import android.view.View; |
+import android.widget.Button; |
import android.widget.TextView; |
import org.chromium.base.ApplicationStatus; |
@@ -16,11 +18,22 @@ import org.chromium.chrome.browser.banners.AppData; |
/** |
* Infobar informing the user about an app related to this page. |
*/ |
-public class AppBannerInfoBar extends ConfirmInfoBar { |
+public class AppBannerInfoBar extends ConfirmInfoBar implements View.OnClickListener { |
+ // Installation states. |
+ public static final int INSTALL_STATE_NOT_INSTALLED = 0; |
+ public static final int INSTALL_STATE_INSTALLING = 1; |
+ public static final int INSTALL_STATE_INSTALLED = 2; |
+ |
+ // Views composing the infobar. |
+ private Button mButton; |
+ private View mTitleView; |
+ private View mIconView; |
+ |
private final String mAppTitle; |
// Data for native app installs. |
private final AppData mAppData; |
+ private int mInstallState; |
// Data for web app installs. |
private final String mAppUrl; |
@@ -31,6 +44,7 @@ public class AppBannerInfoBar extends ConfirmInfoBar { |
mAppTitle = appTitle; |
mAppData = data; |
mAppUrl = null; |
+ mInstallState = INSTALL_STATE_NOT_INSTALLED; |
} |
// Banner for web apps. |
@@ -39,6 +53,7 @@ public class AppBannerInfoBar extends ConfirmInfoBar { |
mAppTitle = appTitle; |
mAppData = null; |
mAppUrl = url; |
+ mInstallState = INSTALL_STATE_NOT_INSTALLED; |
} |
@Override |
@@ -51,6 +66,14 @@ public class AppBannerInfoBar extends ConfirmInfoBar { |
super.createContent(layout); |
+ mButton = (Button) layout.findViewById(R.id.button_primary); |
+ mTitleView = layout.findViewById(R.id.infobar_message); |
+ |
+ // TODO(dfalcantara): Grab the icon from the layout. |
+ // mIconView = layout.findViewById(R.id.infobar_icon); |
+ |
+ assert mButton != null && mTitleView != null; |
+ |
// Set up accessibility text. |
Context context = getContext(); |
if (mAppData != null) { |
@@ -62,6 +85,52 @@ public class AppBannerInfoBar extends ConfirmInfoBar { |
R.string.app_banner_view_web_app_accessibility, mAppTitle, |
mAppUrl)); |
} |
+ |
+ // Set up clicking on the controls to bring up the app details. |
+ mTitleView.setOnClickListener(this); |
+ if (mIconView != null) mIconView.setOnClickListener(this); |
+ } |
+ |
+ @Override |
+ public void onButtonClicked(boolean isPrimaryButton) { |
+ if (mInstallState == INSTALL_STATE_INSTALLING) { |
+ setControlsEnabled(true); |
+ updateButton(); |
+ return; |
+ } |
+ super.onButtonClicked(isPrimaryButton); |
+ } |
+ |
+ @CalledByNative |
+ public void onInstallStateChanged(int newState) { |
+ setControlsEnabled(true); |
+ mInstallState = newState; |
+ updateButton(); |
+ } |
+ |
+ private void updateButton() { |
+ String text; |
+ String accessibilityText = null; |
+ boolean enabled = true; |
+ if (mInstallState == INSTALL_STATE_NOT_INSTALLED) { |
+ text = mAppData.installButtonText(); |
+ accessibilityText = |
+ getContext().getString(R.string.app_banner_install_accessibility, text); |
+ } else if (mInstallState == INSTALL_STATE_INSTALLING) { |
+ text = getContext().getString(R.string.app_banner_installing); |
+ enabled = false; |
+ } else { |
+ text = getContext().getString(R.string.app_banner_open); |
+ } |
+ |
+ mButton.setText(text); |
+ mButton.setContentDescription(accessibilityText); |
+ mButton.setEnabled(enabled); |
+ } |
+ |
+ @Override |
+ public void onClick(View v) { |
+ if (v == mTitleView || v == mIconView) onLinkClicked(); |
} |
private static String getAddToHomescreenText() { |