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

Unified Diff: chrome/browser/android/banners/app_banner_manager.cc

Issue 871103004: Allow installing apps via the AppBannerInfoBar (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@pointers
Patch Set: Rebasing 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/browser/android/banners/app_banner_manager.cc
diff --git a/chrome/browser/android/banners/app_banner_manager.cc b/chrome/browser/android/banners/app_banner_manager.cc
index 140901f1bc52878aaeb46edd391b1b5af16a488a..7d8d6b992183979239513ac6dbd5cb0fea8d4805 100644
--- a/chrome/browser/android/banners/app_banner_manager.cc
+++ b/chrome/browser/android/banners/app_banner_manager.cc
@@ -99,7 +99,16 @@ bool AppBannerManager::OnButtonClicked() const {
if (!web_contents())
return true;
- if (!web_app_data_.IsEmpty()) {
+ if (!native_app_data_.is_null()) {
+ JNIEnv* env = base::android::AttachCurrentThread();
+ ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env);
+ if (jobj.is_null())
+ return true;
+
+ return Java_AppBannerManager_installOrOpenNativeApp(env,
+ jobj.obj(),
+ native_app_data_.obj());
+ } else if (!web_app_data_.IsEmpty()) {
AppBannerSettingsHelper::RecordBannerEvent(
web_contents(), web_contents()->GetURL(),
web_app_data_.start_url.spec(),
@@ -113,6 +122,27 @@ bool AppBannerManager::OnButtonClicked() const {
return true;
}
+bool AppBannerManager::OnLinkClicked() const {
+ if (!web_contents())
+ return true;
+
+ if (!native_app_data_.is_null()) {
+ // Try to show the details for the native app.
+ JNIEnv* env = base::android::AttachCurrentThread();
+ ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env);
+ if (jobj.is_null())
+ return true;
+
+ Java_AppBannerManager_showAppDetails(env,
+ jobj.obj(),
+ native_app_data_.obj());
+ return true;
+ } else {
+ // Nothing should happen if the user is installing a web app.
+ return false;
+ }
+}
+
base::string16 AppBannerManager::GetTitle() const {
return app_title_;
}
@@ -319,6 +349,55 @@ bool AppBannerManager::OnAppDetailsRetrieved(JNIEnv* env,
return FetchIcon(GURL(image_url));
}
+void AppBannerManager::OnIntentCompleted(JNIEnv* env,
+ jobject obj,
+ jboolean jis_installing) {
+ if (!weak_infobar_ptr_)
+ return;
+
+ if (jis_installing) {
+ AppBannerSettingsHelper::RecordBannerEvent(
+ web_contents(),
+ web_contents()->GetURL(),
+ native_app_package_,
+ AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN,
+ base::Time::Now());
+
+ ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env);
newt (away) 2015/02/06 22:46:27 what if jobj is null? Same issue below.
gone 2015/02/06 23:32:08 Null checking now.
+ Java_AppBannerManager_monitorInstall(env,
newt (away) 2015/02/06 22:46:27 Why not call monitorInstall() from Java?
gone 2015/02/06 22:55:01 AppData isn't available from there; it doesn't sto
+ jobj.obj(),
+ native_app_data_.obj());
+ }
+
+ UpdateInstallState(env, obj);
+}
+
+void AppBannerManager::OnInstallFinished(JNIEnv* env,
+ jobject obj,
+ jboolean success) {
+ if (!weak_infobar_ptr_)
+ return;
+
+ if (success) {
+ UpdateInstallState(env, obj);
+ } else {
+ InfoBarService* service = InfoBarService::FromWebContents(web_contents());
+ service->RemoveInfoBar(weak_infobar_ptr_);
+ }
+}
+
+void AppBannerManager::UpdateInstallState(JNIEnv *env, jobject obj) {
+ if (!weak_infobar_ptr_ || native_app_data_.is_null())
+ return;
+
+ ScopedJavaLocalRef<jobject> jobj = weak_java_banner_view_manager_.get(env);
+ int newState = Java_AppBannerManager_determineInstallState(
+ env,
+ jobj.obj(),
+ native_app_data_.obj());
+ weak_infobar_ptr_->OnInstallStateChanged(newState);
+}
+
bool AppBannerManager::FetchIcon(const GURL& image_url) {
if (!web_contents())
return false;

Powered by Google App Engine
This is Rietveld 408576698