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

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

Issue 2685363002: Update AppBannerManager & AppBannerManagerAndroid to request badge icon. (Closed)
Patch Set: Created 3 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 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_manager_android.h" 5 #include "chrome/browser/android/banners/app_banner_manager_android.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/android/jni_android.h" 10 #include "base/android/jni_android.h"
(...skipping 21 matching lines...) Expand all
32 using base::android::JavaParamRef; 32 using base::android::JavaParamRef;
33 using base::android::ScopedJavaLocalRef; 33 using base::android::ScopedJavaLocalRef;
34 34
35 DEFINE_WEB_CONTENTS_USER_DATA_KEY(banners::AppBannerManagerAndroid); 35 DEFINE_WEB_CONTENTS_USER_DATA_KEY(banners::AppBannerManagerAndroid);
36 36
37 namespace { 37 namespace {
38 38
39 std::unique_ptr<ShortcutInfo> CreateShortcutInfo( 39 std::unique_ptr<ShortcutInfo> CreateShortcutInfo(
40 const GURL& manifest_url, 40 const GURL& manifest_url,
41 const content::Manifest& manifest, 41 const content::Manifest& manifest,
42 const GURL& icon_url) { 42 const GURL& primary_icon_url) {
43 auto shortcut_info = base::MakeUnique<ShortcutInfo>(GURL()); 43 auto shortcut_info = base::MakeUnique<ShortcutInfo>(GURL());
44 if (!manifest.IsEmpty()) { 44 if (!manifest.IsEmpty()) {
45 shortcut_info->UpdateFromManifest(manifest); 45 shortcut_info->UpdateFromManifest(manifest);
46 shortcut_info->manifest_url = manifest_url; 46 shortcut_info->manifest_url = manifest_url;
47 shortcut_info->best_primary_icon_url = icon_url; 47 shortcut_info->best_primary_icon_url = primary_icon_url;
48 shortcut_info->UpdateSource(ShortcutInfo::SOURCE_APP_BANNER); 48 shortcut_info->UpdateSource(ShortcutInfo::SOURCE_APP_BANNER);
49 } 49 }
50 return shortcut_info; 50 return shortcut_info;
51 } 51 }
52 52
53 } // anonymous namespace 53 } // anonymous namespace
54 54
55 namespace banners { 55 namespace banners {
56 56
57 AppBannerManagerAndroid::AppBannerManagerAndroid( 57 AppBannerManagerAndroid::AppBannerManagerAndroid(
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 bool AppBannerManagerAndroid::OnAppDetailsRetrieved( 99 bool AppBannerManagerAndroid::OnAppDetailsRetrieved(
100 JNIEnv* env, 100 JNIEnv* env,
101 const JavaParamRef<jobject>& obj, 101 const JavaParamRef<jobject>& obj,
102 const JavaParamRef<jobject>& japp_data, 102 const JavaParamRef<jobject>& japp_data,
103 const JavaParamRef<jstring>& japp_title, 103 const JavaParamRef<jstring>& japp_title,
104 const JavaParamRef<jstring>& japp_package, 104 const JavaParamRef<jstring>& japp_package,
105 const JavaParamRef<jstring>& jicon_url) { 105 const JavaParamRef<jstring>& jicon_url) {
106 native_app_data_.Reset(japp_data); 106 native_app_data_.Reset(japp_data);
107 app_title_ = ConvertJavaStringToUTF16(env, japp_title); 107 app_title_ = ConvertJavaStringToUTF16(env, japp_title);
108 native_app_package_ = ConvertJavaStringToUTF8(env, japp_package); 108 native_app_package_ = ConvertJavaStringToUTF8(env, japp_package);
109 icon_url_ = GURL(ConvertJavaStringToUTF8(env, jicon_url)); 109 primary_icon_url_ = GURL(ConvertJavaStringToUTF8(env, jicon_url));
110 110
111 if (!CheckIfShouldShowBanner()) 111 if (!CheckIfShouldShowBanner())
112 return false; 112 return false;
113 113
114 return ManifestIconDownloader::Download( 114 return ManifestIconDownloader::Download(
115 web_contents(), icon_url_, GetIdealIconSizeInPx(), 115 web_contents(), primary_icon_url_, GetIdealPrimaryIconSizeInPx(),
116 GetMinimumIconSizeInPx(), 116 GetMinimumPrimaryIconSizeInPx(),
117 base::Bind(&AppBannerManager::OnAppIconFetched, GetWeakPtr())); 117 base::Bind(&AppBannerManager::OnAppIconFetched, GetWeakPtr()));
118 } 118 }
119 119
120 void AppBannerManagerAndroid::RequestAppBanner(const GURL& validated_url, 120 void AppBannerManagerAndroid::RequestAppBanner(const GURL& validated_url,
121 bool is_debug_mode) { 121 bool is_debug_mode) {
122 JNIEnv* env = base::android::AttachCurrentThread(); 122 JNIEnv* env = base::android::AttachCurrentThread();
123 if (!Java_AppBannerManager_isEnabledForTab(env, java_banner_manager_)) 123 if (!Java_AppBannerManager_isEnabledForTab(env, java_banner_manager_))
124 return; 124 return;
125 125
126 AppBannerManager::RequestAppBanner(validated_url, is_debug_mode); 126 AppBannerManager::RequestAppBanner(validated_url, is_debug_mode);
127 } 127 }
128 128
129 std::string AppBannerManagerAndroid::GetAppIdentifier() { 129 std::string AppBannerManagerAndroid::GetAppIdentifier() {
130 return native_app_data_.is_null() ? AppBannerManager::GetAppIdentifier() 130 return native_app_data_.is_null() ? AppBannerManager::GetAppIdentifier()
131 : native_app_package_; 131 : native_app_package_;
132 } 132 }
133 133
134 std::string AppBannerManagerAndroid::GetBannerType() { 134 std::string AppBannerManagerAndroid::GetBannerType() {
135 return native_app_data_.is_null() ? AppBannerManager::GetBannerType() 135 return native_app_data_.is_null() ? AppBannerManager::GetBannerType()
136 : "play"; 136 : "play";
137 } 137 }
138 138
139 int AppBannerManagerAndroid::GetIdealIconSizeInPx() { 139 int AppBannerManagerAndroid::GetIdealPrimaryIconSizeInPx() {
140 return ShortcutHelper::GetIdealHomescreenIconSizeInPx(); 140 return ShortcutHelper::GetIdealHomescreenIconSizeInPx();
141 } 141 }
142 142
143 int AppBannerManagerAndroid::GetMinimumIconSizeInPx() { 143 int AppBannerManagerAndroid::GetMinimumPrimaryIconSizeInPx() {
144 return ShortcutHelper::GetMinimumHomescreenIconSizeInPx(); 144 return ShortcutHelper::GetMinimumHomescreenIconSizeInPx();
145 } 145 }
146 146
147 int AppBannerManagerAndroid::GetIdealBadgeIconSizeInPx() {
148 return ShortcutHelper::GetIdealBadgeIconSizeInPx();
dominickn 2017/02/14 00:01:16 Since this is gated on WebAPKs, is there a way to
F 2017/02/14 19:22:42 Done.
149 }
150
147 bool AppBannerManagerAndroid::IsWebAppInstalled( 151 bool AppBannerManagerAndroid::IsWebAppInstalled(
148 content::BrowserContext* browser_context, 152 content::BrowserContext* browser_context,
149 const GURL& start_url, 153 const GURL& start_url,
150 const GURL& manifest_url) { 154 const GURL& manifest_url) {
151 // Returns true if a WebAPK is installed or is being installed. 155 // Returns true if a WebAPK is installed or is being installed.
152 // Does not check whether a non-WebAPK web app is installed: this is detected 156 // Does not check whether a non-WebAPK web app is installed: this is detected
153 // by the content settings check in AppBannerSettingsHelper::ShouldShowBanner 157 // by the content settings check in AppBannerSettingsHelper::ShouldShowBanner
154 // (due to the lack of an API to detect what is and isn't on the Android 158 // (due to the lack of an API to detect what is and isn't on the Android
155 // homescreen). This method will still detect the presence of a WebAPK even if 159 // homescreen). This method will still detect the presence of a WebAPK even if
156 // Chrome's data is cleared. 160 // Chrome's data is cleared.
(...skipping 29 matching lines...) Expand all
186 190
187 void AppBannerManagerAndroid::OnAppIconFetched(const SkBitmap& bitmap) { 191 void AppBannerManagerAndroid::OnAppIconFetched(const SkBitmap& bitmap) {
188 if (bitmap.drawsNothing()) { 192 if (bitmap.drawsNothing()) {
189 ReportStatus(web_contents(), NO_ICON_AVAILABLE); 193 ReportStatus(web_contents(), NO_ICON_AVAILABLE);
190 Stop(); 194 Stop();
191 } 195 }
192 196
193 if (!is_active()) 197 if (!is_active())
194 return; 198 return;
195 199
196 icon_.reset(new SkBitmap(bitmap)); 200 primary_icon_.reset(new SkBitmap(bitmap));
197 SendBannerPromptRequest(); 201 SendBannerPromptRequest();
198 } 202 }
199 203
200 void AppBannerManagerAndroid::ResetCurrentPageData() { 204 void AppBannerManagerAndroid::ResetCurrentPageData() {
201 AppBannerManager::ResetCurrentPageData(); 205 AppBannerManager::ResetCurrentPageData();
202 native_app_data_.Reset(); 206 native_app_data_.Reset();
203 native_app_package_ = ""; 207 native_app_package_ = "";
204 } 208 }
205 209
206 void AppBannerManagerAndroid::ShowBanner() { 210 void AppBannerManagerAndroid::ShowBanner() {
207 content::WebContents* contents = web_contents(); 211 content::WebContents* contents = web_contents();
208 DCHECK(contents); 212 DCHECK(contents);
209 213
210 if (native_app_data_.is_null()) { 214 if (native_app_data_.is_null()) {
215 // TODO(zpeng): Add badge to WebAPK installation flow.
211 if (AppBannerInfoBarDelegateAndroid::Create( 216 if (AppBannerInfoBarDelegateAndroid::Create(
212 contents, GetWeakPtr(), app_title_, 217 contents, GetWeakPtr(), app_title_,
213 CreateShortcutInfo(manifest_url_, manifest_, icon_url_), 218 CreateShortcutInfo(manifest_url_, manifest_, primary_icon_url_),
214 std::move(icon_), event_request_id(), 219 std::move(primary_icon_), event_request_id(),
215 webapk::INSTALL_SOURCE_BANNER)) { 220 webapk::INSTALL_SOURCE_BANNER)) {
216 RecordDidShowBanner("AppBanner.WebApp.Shown"); 221 RecordDidShowBanner("AppBanner.WebApp.Shown");
217 TrackDisplayEvent(DISPLAY_EVENT_WEB_APP_BANNER_CREATED); 222 TrackDisplayEvent(DISPLAY_EVENT_WEB_APP_BANNER_CREATED);
218 ReportStatus(contents, SHOWING_WEB_APP_BANNER); 223 ReportStatus(contents, SHOWING_WEB_APP_BANNER);
219 } else { 224 } else {
220 ReportStatus(contents, FAILED_TO_CREATE_BANNER); 225 ReportStatus(contents, FAILED_TO_CREATE_BANNER);
221 } 226 }
222 } else { 227 } else {
223 if (AppBannerInfoBarDelegateAndroid::Create( 228 if (AppBannerInfoBarDelegateAndroid::Create(
224 contents, app_title_, native_app_data_, std::move(icon_), 229 contents, app_title_, native_app_data_, std::move(primary_icon_),
225 native_app_package_, referrer_, event_request_id())) { 230 native_app_package_, referrer_, event_request_id())) {
226 RecordDidShowBanner("AppBanner.NativeApp.Shown"); 231 RecordDidShowBanner("AppBanner.NativeApp.Shown");
227 TrackDisplayEvent(DISPLAY_EVENT_NATIVE_APP_BANNER_CREATED); 232 TrackDisplayEvent(DISPLAY_EVENT_NATIVE_APP_BANNER_CREATED);
228 ReportStatus(contents, SHOWING_NATIVE_APP_BANNER); 233 ReportStatus(contents, SHOWING_NATIVE_APP_BANNER);
229 } else { 234 } else {
230 ReportStatus(contents, FAILED_TO_CREATE_BANNER); 235 ReportStatus(contents, FAILED_TO_CREATE_BANNER);
231 } 236 }
232 } 237 }
233 } 238 }
234 239
(...skipping 22 matching lines...) Expand all
257 if (!referrer.empty()) 262 if (!referrer.empty())
258 referrer += "&"; 263 referrer += "&";
259 referrer += "playinline=chrome_inline"; 264 referrer += "playinline=chrome_inline";
260 265
261 ScopedJavaLocalRef<jstring> jurl( 266 ScopedJavaLocalRef<jstring> jurl(
262 ConvertUTF8ToJavaString(env, validated_url_.spec())); 267 ConvertUTF8ToJavaString(env, validated_url_.spec()));
263 ScopedJavaLocalRef<jstring> jpackage(ConvertUTF8ToJavaString(env, id)); 268 ScopedJavaLocalRef<jstring> jpackage(ConvertUTF8ToJavaString(env, id));
264 ScopedJavaLocalRef<jstring> jreferrer(ConvertUTF8ToJavaString(env, referrer)); 269 ScopedJavaLocalRef<jstring> jreferrer(ConvertUTF8ToJavaString(env, referrer));
265 Java_AppBannerManager_fetchAppDetails(env, java_banner_manager_, jurl, 270 Java_AppBannerManager_fetchAppDetails(env, java_banner_manager_, jurl,
266 jpackage, jreferrer, 271 jpackage, jreferrer,
267 GetIdealIconSizeInPx()); 272 GetIdealPrimaryIconSizeInPx());
268 return true; 273 return true;
269 } 274 }
270 275
271 void AppBannerManagerAndroid::CreateJavaBannerManager() { 276 void AppBannerManagerAndroid::CreateJavaBannerManager() {
272 JNIEnv* env = base::android::AttachCurrentThread(); 277 JNIEnv* env = base::android::AttachCurrentThread();
273 java_banner_manager_.Reset( 278 java_banner_manager_.Reset(
274 Java_AppBannerManager_create(env, reinterpret_cast<intptr_t>(this))); 279 Java_AppBannerManager_create(env, reinterpret_cast<intptr_t>(this)));
275 } 280 }
276 281
277 bool AppBannerManagerAndroid::CheckPlatformAndId(const std::string& platform, 282 bool AppBannerManagerAndroid::CheckPlatformAndId(const std::string& platform,
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 } 339 }
335 340
336 // static 341 // static
337 void SetTotalEngagementToTrigger(JNIEnv* env, 342 void SetTotalEngagementToTrigger(JNIEnv* env,
338 const JavaParamRef<jclass>& clazz, 343 const JavaParamRef<jclass>& clazz,
339 jdouble engagement) { 344 jdouble engagement) {
340 AppBannerSettingsHelper::SetTotalEngagementToTrigger(engagement); 345 AppBannerSettingsHelper::SetTotalEngagementToTrigger(engagement);
341 } 346 }
342 347
343 } // namespace banners 348 } // namespace banners
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698