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

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: Fix compile 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..74dfa7924a09b2b698563c184255918417367808 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,53 @@ bool AppBannerManager::OnAppDetailsRetrieved(JNIEnv* env,
return FetchIcon(GURL(image_url));
}
+void AppBannerManager::OnInstallIntentReturned(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());
+ }
+
+ 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);
+ if (jobj.is_null())
+ return;
+
+ 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;
« no previous file with comments | « chrome/browser/android/banners/app_banner_manager.h ('k') | chrome/browser/ui/android/infobars/app_banner_infobar.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698