| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/android/webapps/add_to_homescreen_manager.h" | 5 #include "chrome/browser/android/webapps/add_to_homescreen_manager.h" |
| 6 | 6 |
| 7 #include "base/android/jni_android.h" | 7 #include "base/android/jni_android.h" |
| 8 #include "base/android/jni_string.h" | 8 #include "base/android/jni_string.h" |
| 9 #include "base/guid.h" | 9 #include "base/guid.h" |
| 10 #include "base/location.h" | 10 #include "base/location.h" |
| 11 #include "base/memory/ptr_util.h" |
| 11 #include "base/strings/string16.h" | 12 #include "base/strings/string16.h" |
| 12 #include "base/strings/utf_string_conversions.h" | 13 #include "base/strings/utf_string_conversions.h" |
| 14 #include "chrome/browser/android/banners/app_banner_infobar_delegate_android.h" |
| 13 #include "chrome/browser/android/shortcut_helper.h" | 15 #include "chrome/browser/android/shortcut_helper.h" |
| 14 #include "chrome/browser/android/webapk/chrome_webapk_host.h" | 16 #include "chrome/browser/android/webapk/chrome_webapk_host.h" |
| 15 #include "chrome/browser/banners/app_banner_settings_helper.h" | 17 #include "chrome/browser/banners/app_banner_settings_helper.h" |
| 16 #include "content/public/browser/browser_thread.h" | 18 #include "content/public/browser/browser_thread.h" |
| 17 #include "content/public/browser/web_contents.h" | 19 #include "content/public/browser/web_contents.h" |
| 18 #include "content/public/common/origin_util.h" | 20 #include "content/public/common/origin_util.h" |
| 19 #include "jni/AddToHomescreenManager_jni.h" | 21 #include "jni/AddToHomescreenManager_jni.h" |
| 20 #include "ui/gfx/android/java_bitmap.h" | 22 #include "ui/gfx/android/java_bitmap.h" |
| 21 | 23 |
| 22 using base::android::JavaParamRef; | 24 using base::android::JavaParamRef; |
| 23 using base::android::ScopedJavaLocalRef; | 25 using base::android::ScopedJavaLocalRef; |
| 24 | 26 |
| 25 jlong InitializeAndStart(JNIEnv* env, | 27 jlong InitializeAndStart(JNIEnv* env, |
| 26 const JavaParamRef<jobject>& obj, | 28 const JavaParamRef<jobject>& obj, |
| 27 const JavaParamRef<jobject>& java_web_contents) { | 29 const JavaParamRef<jobject>& java_web_contents) { |
| 28 content::WebContents* web_contents = | 30 content::WebContents* web_contents = |
| 29 content::WebContents::FromJavaWebContents(java_web_contents); | 31 content::WebContents::FromJavaWebContents(java_web_contents); |
| 30 AddToHomescreenManager* manager = new AddToHomescreenManager(env, obj); | 32 AddToHomescreenManager* manager = new AddToHomescreenManager(env, obj); |
| 31 manager->Start(web_contents); | 33 manager->Start(web_contents); |
| 32 return reinterpret_cast<intptr_t>(manager); | 34 return reinterpret_cast<intptr_t>(manager); |
| 33 } | 35 } |
| 34 | 36 |
| 35 AddToHomescreenManager::AddToHomescreenManager(JNIEnv* env, jobject obj) | 37 AddToHomescreenManager::AddToHomescreenManager(JNIEnv* env, jobject obj) |
| 36 : add_shortcut_pending_(false) { | 38 : add_shortcut_pending_(false), |
| 39 is_webapk_compatible_(false) { |
| 37 java_ref_.Reset(env, obj); | 40 java_ref_.Reset(env, obj); |
| 38 } | 41 } |
| 39 | 42 |
| 40 // static | 43 // static |
| 41 bool AddToHomescreenManager::Register(JNIEnv* env) { | 44 bool AddToHomescreenManager::Register(JNIEnv* env) { |
| 42 return RegisterNativesImpl(env); | 45 return RegisterNativesImpl(env); |
| 43 } | 46 } |
| 44 | 47 |
| 45 void AddToHomescreenManager::Destroy(JNIEnv* env, | 48 void AddToHomescreenManager::Destroy(JNIEnv* env, |
| 46 const JavaParamRef<jobject>& obj) { | 49 const JavaParamRef<jobject>& obj) { |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 | 125 |
| 123 AppBannerSettingsHelper::RecordBannerEvent( | 126 AppBannerSettingsHelper::RecordBannerEvent( |
| 124 web_contents, web_contents->GetURL(), | 127 web_contents, web_contents->GetURL(), |
| 125 data_fetcher_->shortcut_info().url.spec(), | 128 data_fetcher_->shortcut_info().url.spec(), |
| 126 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN, | 129 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN, |
| 127 base::Time::Now()); | 130 base::Time::Now()); |
| 128 } | 131 } |
| 129 | 132 |
| 130 void AddToHomescreenManager::OnDidDetermineWebApkCompatibility( | 133 void AddToHomescreenManager::OnDidDetermineWebApkCompatibility( |
| 131 bool is_webapk_compatible) { | 134 bool is_webapk_compatible) { |
| 132 // TODO(pkotwicz): Select whether to use dialog or not based on | 135 is_webapk_compatible_ = is_webapk_compatible; |
| 133 // |is_webapk_compatible|. | 136 if (!is_webapk_compatible) |
| 134 ShowDialog(); | 137 ShowDialog(); |
| 135 } | 138 } |
| 136 | 139 |
| 137 void AddToHomescreenManager::OnUserTitleAvailable( | 140 void AddToHomescreenManager::OnUserTitleAvailable( |
| 138 const base::string16& user_title) { | 141 const base::string16& user_title) { |
| 142 if (is_webapk_compatible_) |
| 143 return; |
| 139 JNIEnv* env = base::android::AttachCurrentThread(); | 144 JNIEnv* env = base::android::AttachCurrentThread(); |
| 140 ScopedJavaLocalRef<jstring> j_user_title = | 145 ScopedJavaLocalRef<jstring> j_user_title = |
| 141 base::android::ConvertUTF16ToJavaString(env, user_title); | 146 base::android::ConvertUTF16ToJavaString(env, user_title); |
| 142 Java_AddToHomescreenManager_onUserTitleAvailable(env, | 147 Java_AddToHomescreenManager_onUserTitleAvailable(env, |
| 143 java_ref_, | 148 java_ref_, |
| 144 j_user_title); | 149 j_user_title); |
| 145 } | 150 } |
| 146 | 151 |
| 147 void AddToHomescreenManager::OnDataAvailable(const ShortcutInfo& info, | 152 void AddToHomescreenManager::OnDataAvailable(const ShortcutInfo& info, |
| 148 const SkBitmap& icon) { | 153 const SkBitmap& icon) { |
| 154 if (is_webapk_compatible_) { |
| 155 CreateInfoBarForWebAPK(info, icon); |
| 156 return; |
| 157 } |
| 158 |
| 149 JNIEnv* env = base::android::AttachCurrentThread(); | 159 JNIEnv* env = base::android::AttachCurrentThread(); |
| 150 ScopedJavaLocalRef<jobject> java_bitmap; | 160 ScopedJavaLocalRef<jobject> java_bitmap; |
| 151 if (icon.getSize()) | 161 if (icon.getSize()) |
| 152 java_bitmap = gfx::ConvertToJavaBitmap(&icon); | 162 java_bitmap = gfx::ConvertToJavaBitmap(&icon); |
| 153 | 163 |
| 154 Java_AddToHomescreenManager_onReadyToAdd(env, java_ref_, java_bitmap); | 164 Java_AddToHomescreenManager_onReadyToAdd(env, java_ref_, java_bitmap); |
| 155 | 165 |
| 156 if (add_shortcut_pending_) | 166 if (add_shortcut_pending_) |
| 157 AddShortcut(info, icon); | 167 AddShortcut(info, icon); |
| 158 } | 168 } |
| 159 | 169 |
| 170 void AddToHomescreenManager::CreateInfoBarForWebAPK(const ShortcutInfo& info, |
| 171 const SkBitmap& icon) { |
| 172 banners::AppBannerInfoBarDelegateAndroid::Create( |
| 173 data_fetcher_->web_contents(), nullptr, info.user_title, |
| 174 base::MakeUnique<ShortcutInfo>(info), base::MakeUnique<SkBitmap>(icon), |
| 175 -1 /* event_request_id */, true /* is_webapk */, |
| 176 true /* start_install_webapk */); |
| 177 } |
| 178 |
| 160 SkBitmap AddToHomescreenManager::FinalizeLauncherIconInBackground( | 179 SkBitmap AddToHomescreenManager::FinalizeLauncherIconInBackground( |
| 161 const SkBitmap& bitmap, | 180 const SkBitmap& bitmap, |
| 162 const GURL& url, | 181 const GURL& url, |
| 163 bool* is_generated) { | 182 bool* is_generated) { |
| 164 DCHECK(content::BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread()); | 183 DCHECK(content::BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread()); |
| 165 | 184 |
| 166 return ShortcutHelper::FinalizeLauncherIconInBackground(bitmap, url, | 185 return ShortcutHelper::FinalizeLauncherIconInBackground(bitmap, url, |
| 167 is_generated); | 186 is_generated); |
| 168 } | 187 } |
| OLD | NEW |