Chromium Code Reviews| 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; |