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

Side by Side Diff: chrome/browser/android/banners/app_banner_infobar_delegate_android.cc

Issue 2676863002: Update WebApkInstaller to support badge icon in installation. (Closed)
Patch Set: Rebase Created 3 years, 8 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 unified diff | Download patch
OLDNEW
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/banners/app_banner_infobar_delegate_android.h" 5 #include "chrome/browser/android/banners/app_banner_infobar_delegate_android.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/location.h" 9 #include "base/location.h"
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 } // anonymous namespace 44 } // anonymous namespace
45 45
46 namespace banners { 46 namespace banners {
47 47
48 // static 48 // static
49 bool AppBannerInfoBarDelegateAndroid::Create( 49 bool AppBannerInfoBarDelegateAndroid::Create(
50 content::WebContents* web_contents, 50 content::WebContents* web_contents,
51 base::WeakPtr<AppBannerManager> weak_manager, 51 base::WeakPtr<AppBannerManager> weak_manager,
52 const base::string16& app_title, 52 const base::string16& app_title,
53 std::unique_ptr<ShortcutInfo> shortcut_info, 53 std::unique_ptr<ShortcutInfo> shortcut_info,
54 std::unique_ptr<SkBitmap> icon, 54 std::unique_ptr<SkBitmap> primary_icon,
55 std::unique_ptr<SkBitmap> badge_icon,
55 int event_request_id, 56 int event_request_id,
56 webapk::InstallSource webapk_install_source) { 57 webapk::InstallSource webapk_install_source) {
57 bool is_webapk = ChromeWebApkHost::CanInstallWebApk(); 58 bool is_webapk = ChromeWebApkHost::CanInstallWebApk();
58 const GURL url = shortcut_info->url; 59 const GURL url = shortcut_info->url;
59 auto infobar_delegate = 60 auto infobar_delegate =
60 base::WrapUnique(new banners::AppBannerInfoBarDelegateAndroid( 61 base::WrapUnique(new banners::AppBannerInfoBarDelegateAndroid(
61 weak_manager, app_title, std::move(shortcut_info), std::move(icon), 62 weak_manager, app_title, std::move(shortcut_info),
62 event_request_id, is_webapk, webapk_install_source)); 63 std::move(primary_icon), std::move(badge_icon), event_request_id,
64 is_webapk, webapk_install_source));
63 auto* raw_delegate = infobar_delegate.get(); 65 auto* raw_delegate = infobar_delegate.get();
64 auto infobar = base::MakeUnique<AppBannerInfoBarAndroid>( 66 auto infobar = base::MakeUnique<AppBannerInfoBarAndroid>(
65 std::move(infobar_delegate), url, is_webapk); 67 std::move(infobar_delegate), url, is_webapk);
66 if (!InfoBarService::FromWebContents(web_contents) 68 if (!InfoBarService::FromWebContents(web_contents)
67 ->AddInfoBar(std::move(infobar))) 69 ->AddInfoBar(std::move(infobar)))
68 return false; 70 return false;
69 71
70 if (is_webapk) { 72 if (is_webapk) {
71 if (webapk_install_source == webapk::INSTALL_SOURCE_MENU) { 73 if (webapk_install_source == webapk::INSTALL_SOURCE_MENU) {
72 webapk::TrackInstallInfoBarShown( 74 webapk::TrackInstallInfoBarShown(
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 Java_AppBannerInfoBarDelegateAndroid_setWebApkPackageName( 203 Java_AppBannerInfoBarDelegateAndroid_setWebApkPackageName(
202 env, java_delegate_, java_webapk_package_name); 204 env, java_delegate_, java_webapk_package_name);
203 UpdateInstallState(env, nullptr); 205 UpdateInstallState(env, nullptr);
204 install_state_ = INSTALLED; 206 install_state_ = INSTALLED;
205 } 207 }
206 208
207 AppBannerInfoBarDelegateAndroid::AppBannerInfoBarDelegateAndroid( 209 AppBannerInfoBarDelegateAndroid::AppBannerInfoBarDelegateAndroid(
208 base::WeakPtr<AppBannerManager> weak_manager, 210 base::WeakPtr<AppBannerManager> weak_manager,
209 const base::string16& app_title, 211 const base::string16& app_title,
210 std::unique_ptr<ShortcutInfo> shortcut_info, 212 std::unique_ptr<ShortcutInfo> shortcut_info,
211 std::unique_ptr<SkBitmap> icon, 213 std::unique_ptr<SkBitmap> primary_icon,
214 std::unique_ptr<SkBitmap> badge_icon,
212 int event_request_id, 215 int event_request_id,
213 bool is_webapk, 216 bool is_webapk,
214 webapk::InstallSource webapk_install_source) 217 webapk::InstallSource webapk_install_source)
215 : weak_manager_(weak_manager), 218 : weak_manager_(weak_manager),
216 app_title_(app_title), 219 app_title_(app_title),
217 shortcut_info_(std::move(shortcut_info)), 220 shortcut_info_(std::move(shortcut_info)),
218 icon_(std::move(icon)), 221 primary_icon_(std::move(primary_icon)),
222 badge_icon_(std::move(badge_icon)),
219 event_request_id_(event_request_id), 223 event_request_id_(event_request_id),
220 has_user_interaction_(false), 224 has_user_interaction_(false),
221 is_webapk_(is_webapk), 225 is_webapk_(is_webapk),
222 install_state_(INSTALL_NOT_STARTED), 226 install_state_(INSTALL_NOT_STARTED),
223 webapk_install_source_(webapk_install_source), 227 webapk_install_source_(webapk_install_source),
224 weak_ptr_factory_(this) { 228 weak_ptr_factory_(this) {
225 DCHECK(!IsInfoEmpty(shortcut_info_)); 229 DCHECK(!IsInfoEmpty(shortcut_info_));
226 CreateJavaDelegate(); 230 CreateJavaDelegate();
227 } 231 }
228 232
229 AppBannerInfoBarDelegateAndroid::AppBannerInfoBarDelegateAndroid( 233 AppBannerInfoBarDelegateAndroid::AppBannerInfoBarDelegateAndroid(
230 const base::string16& app_title, 234 const base::string16& app_title,
231 const base::android::ScopedJavaGlobalRef<jobject>& native_app_data, 235 const base::android::ScopedJavaGlobalRef<jobject>& native_app_data,
232 std::unique_ptr<SkBitmap> icon, 236 std::unique_ptr<SkBitmap> icon,
233 const std::string& native_app_package, 237 const std::string& native_app_package,
234 const std::string& referrer, 238 const std::string& referrer,
235 int event_request_id) 239 int event_request_id)
236 : app_title_(app_title), 240 : app_title_(app_title),
237 native_app_data_(native_app_data), 241 native_app_data_(native_app_data),
238 icon_(std::move(icon)), 242 primary_icon_(std::move(icon)),
239 native_app_package_(native_app_package), 243 native_app_package_(native_app_package),
240 referrer_(referrer), 244 referrer_(referrer),
241 event_request_id_(event_request_id), 245 event_request_id_(event_request_id),
242 has_user_interaction_(false), 246 has_user_interaction_(false),
243 weak_ptr_factory_(this) { 247 weak_ptr_factory_(this) {
244 DCHECK(!native_app_data_.is_null()); 248 DCHECK(!native_app_data_.is_null());
245 CreateJavaDelegate(); 249 CreateJavaDelegate();
246 } 250 }
247 251
248 void AppBannerInfoBarDelegateAndroid::CreateJavaDelegate() { 252 void AppBannerInfoBarDelegateAndroid::CreateJavaDelegate() {
(...skipping 29 matching lines...) Expand all
278 bool AppBannerInfoBarDelegateAndroid::AcceptWebApp( 282 bool AppBannerInfoBarDelegateAndroid::AcceptWebApp(
279 content::WebContents* web_contents) { 283 content::WebContents* web_contents) {
280 if (IsInfoEmpty(shortcut_info_)) 284 if (IsInfoEmpty(shortcut_info_))
281 return true; 285 return true;
282 TrackUserResponse(USER_RESPONSE_WEB_APP_ACCEPTED); 286 TrackUserResponse(USER_RESPONSE_WEB_APP_ACCEPTED);
283 287
284 AppBannerSettingsHelper::RecordBannerInstallEvent( 288 AppBannerSettingsHelper::RecordBannerInstallEvent(
285 web_contents, shortcut_info_->url.spec(), AppBannerSettingsHelper::WEB); 289 web_contents, shortcut_info_->url.spec(), AppBannerSettingsHelper::WEB);
286 290
287 ShortcutHelper::AddToLauncherWithSkBitmap(web_contents, *shortcut_info_, 291 ShortcutHelper::AddToLauncherWithSkBitmap(web_contents, *shortcut_info_,
288 *icon_.get()); 292 *primary_icon_.get());
289 293
290 SendBannerAccepted(); 294 SendBannerAccepted();
291 return true; 295 return true;
292 } 296 }
293 297
294 bool AppBannerInfoBarDelegateAndroid::AcceptWebApk( 298 bool AppBannerInfoBarDelegateAndroid::AcceptWebApk(
295 content::WebContents* web_contents) { 299 content::WebContents* web_contents) {
296 if (IsInfoEmpty(shortcut_info_)) 300 if (IsInfoEmpty(shortcut_info_))
297 return true; 301 return true;
298 302
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 AppBannerManager::GetCurrentTime()); 334 AppBannerManager::GetCurrentTime());
331 } 335 }
332 336
333 Java_AppBannerInfoBarDelegateAndroid_setWebApkInstallingState( 337 Java_AppBannerInfoBarDelegateAndroid_setWebApkInstallingState(
334 env, java_delegate_, true); 338 env, java_delegate_, true);
335 UpdateInstallState(env, nullptr); 339 UpdateInstallState(env, nullptr);
336 WebApkInstallService::FinishCallback callback = 340 WebApkInstallService::FinishCallback callback =
337 base::Bind(&AppBannerInfoBarDelegateAndroid::OnWebApkInstallFinished, 341 base::Bind(&AppBannerInfoBarDelegateAndroid::OnWebApkInstallFinished,
338 weak_ptr_factory_.GetWeakPtr()); 342 weak_ptr_factory_.GetWeakPtr());
339 ShortcutHelper::InstallWebApkWithSkBitmap(web_contents, *shortcut_info_, 343 ShortcutHelper::InstallWebApkWithSkBitmap(web_contents, *shortcut_info_,
340 *icon_.get(), callback); 344 *primary_icon_.get(),
345 *badge_icon_.get(), callback);
346
341 SendBannerAccepted(); 347 SendBannerAccepted();
342 348
343 // Prevent the infobar from disappearing, because the infobar will show 349 // Prevent the infobar from disappearing, because the infobar will show
344 // "Adding" during the installation process. 350 // "Adding" during the installation process.
345 return false; 351 return false;
346 } 352 }
347 353
348 bool AppBannerInfoBarDelegateAndroid::TriggeredFromBanner() const { 354 bool AppBannerInfoBarDelegateAndroid::TriggeredFromBanner() const {
349 return !is_webapk_ || webapk_install_source_ == webapk::INSTALL_SOURCE_BANNER; 355 return !is_webapk_ || webapk_install_source_ == webapk::INSTALL_SOURCE_BANNER;
350 } 356 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 return; 388 return;
383 389
384 // If the install didn't definitely fail, we don't add a shortcut. This could 390 // If the install didn't definitely fail, we don't add a shortcut. This could
385 // happen if Play was busy with another install and this one is still queued 391 // happen if Play was busy with another install and this one is still queued
386 // (and hence might succeed in the future). 392 // (and hence might succeed in the future).
387 if (result == WebApkInstallResult::FAILURE) { 393 if (result == WebApkInstallResult::FAILURE) {
388 content::WebContents* web_contents = 394 content::WebContents* web_contents =
389 InfoBarService::WebContentsFromInfoBar(infobar()); 395 InfoBarService::WebContentsFromInfoBar(infobar());
390 // Add webapp shortcut to the homescreen. 396 // Add webapp shortcut to the homescreen.
391 ShortcutHelper::AddToLauncherWithSkBitmap(web_contents, *shortcut_info_, 397 ShortcutHelper::AddToLauncherWithSkBitmap(web_contents, *shortcut_info_,
392 *icon_.get()); 398 *primary_icon_.get());
393 } 399 }
394 400
395 infobar()->RemoveSelf(); 401 infobar()->RemoveSelf();
396 } 402 }
397 403
398 void AppBannerInfoBarDelegateAndroid::TrackWebApkInstallationDismissEvents( 404 void AppBannerInfoBarDelegateAndroid::TrackWebApkInstallationDismissEvents(
399 InstallState install_state) { 405 InstallState install_state) {
400 if (install_state == INSTALL_NOT_STARTED) { 406 if (install_state == INSTALL_NOT_STARTED) {
401 webapk::TrackInstallEvent(webapk::INFOBAR_DISMISSED_BEFORE_INSTALLATION); 407 webapk::TrackInstallEvent(webapk::INFOBAR_DISMISSED_BEFORE_INSTALLATION);
402 } else if (install_state == INSTALLING) { 408 } else if (install_state == INSTALLING) {
403 webapk::TrackInstallEvent(webapk::INFOBAR_DISMISSED_DURING_INSTALLATION); 409 webapk::TrackInstallEvent(webapk::INFOBAR_DISMISSED_DURING_INSTALLATION);
404 } else if (install_state == INSTALLED) { 410 } else if (install_state == INSTALLED) {
405 // If WebAPK is installed from this banner, TrackInstallEvent() is called in 411 // If WebAPK is installed from this banner, TrackInstallEvent() is called in
406 // OnWebApkInstallFinished(). 412 // OnWebApkInstallFinished().
407 webapk::TrackUserAction(webapk::USER_ACTION_INSTALLED_OPEN_DISMISS); 413 webapk::TrackUserAction(webapk::USER_ACTION_INSTALLED_OPEN_DISMISS);
408 } 414 }
409 } 415 }
410 416
411 infobars::InfoBarDelegate::InfoBarIdentifier 417 infobars::InfoBarDelegate::InfoBarIdentifier
412 AppBannerInfoBarDelegateAndroid::GetIdentifier() const { 418 AppBannerInfoBarDelegateAndroid::GetIdentifier() const {
413 return APP_BANNER_INFOBAR_DELEGATE_ANDROID; 419 return APP_BANNER_INFOBAR_DELEGATE_ANDROID;
414 } 420 }
415 421
416 gfx::Image AppBannerInfoBarDelegateAndroid::GetIcon() const { 422 gfx::Image AppBannerInfoBarDelegateAndroid::GetIcon() const {
417 return gfx::Image::CreateFrom1xBitmap(*icon_.get()); 423 return gfx::Image::CreateFrom1xBitmap(*primary_icon_.get());
418 } 424 }
419 425
420 void AppBannerInfoBarDelegateAndroid::InfoBarDismissed() { 426 void AppBannerInfoBarDelegateAndroid::InfoBarDismissed() {
421 has_user_interaction_ = true; 427 has_user_interaction_ = true;
422 428
423 content::WebContents* web_contents = 429 content::WebContents* web_contents =
424 InfoBarService::WebContentsFromInfoBar(infobar()); 430 InfoBarService::WebContentsFromInfoBar(infobar());
425 431
426 if (weak_manager_ && TriggeredFromBanner()) 432 if (weak_manager_ && TriggeredFromBanner())
427 weak_manager_->SendBannerDismissed(event_request_id_); 433 weak_manager_->SendBannerDismissed(event_request_id_);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 474
469 TrackDismissEvent(DISMISS_EVENT_BANNER_CLICK); 475 TrackDismissEvent(DISMISS_EVENT_BANNER_CLICK);
470 return true; 476 return true;
471 } 477 }
472 478
473 bool RegisterAppBannerInfoBarDelegateAndroid(JNIEnv* env) { 479 bool RegisterAppBannerInfoBarDelegateAndroid(JNIEnv* env) {
474 return RegisterNativesImpl(env); 480 return RegisterNativesImpl(env);
475 } 481 }
476 482
477 } // namespace banners 483 } // namespace banners
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698