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

Side by Side Diff: chrome/browser/android/webapps/add_to_homescreen_dialog_helper.cc

Issue 1288903002: Refactor ShortcutHelper and merge in BookmarkUtils (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix test file name Created 5 years, 4 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 2013 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/shortcut_helper.h" 5 #include "chrome/browser/android/webapps/add_to_homescreen_dialog_helper.h"
6 6
7 #include <jni.h> 7 #include <jni.h>
8 8
9 #include "base/android/jni_android.h" 9 #include "base/android/jni_android.h"
10 #include "base/android/jni_string.h" 10 #include "base/android/jni_string.h"
11 #include "base/basictypes.h" 11 #include "base/basictypes.h"
12 #include "base/location.h" 12 #include "base/location.h"
13 #include "base/strings/string16.h" 13 #include "base/strings/string16.h"
14 #include "base/strings/utf_string_conversions.h" 14 #include "base/strings/utf_string_conversions.h"
15 #include "chrome/browser/android/shortcut_helper.h"
15 #include "chrome/browser/banners/app_banner_settings_helper.h" 16 #include "chrome/browser/banners/app_banner_settings_helper.h"
16 #include "content/public/browser/browser_thread.h" 17 #include "content/public/browser/browser_thread.h"
17 #include "content/public/browser/web_contents.h" 18 #include "content/public/browser/web_contents.h"
18 #include "content/public/common/manifest.h" 19 #include "content/public/common/manifest.h"
19 #include "jni/ShortcutHelper_jni.h" 20 #include "jni/AddToHomescreenDialogHelper_jni.h"
20 #include "ui/gfx/android/java_bitmap.h" 21 #include "ui/gfx/android/java_bitmap.h"
21 #include "ui/gfx/color_analysis.h" 22 #include "ui/gfx/color_analysis.h"
22 #include "url/gurl.h" 23 #include "url/gurl.h"
23 24
24 using content::Manifest; 25 using content::Manifest;
25 26
26 jlong Initialize(JNIEnv* env, jobject obj, jobject java_web_contents) { 27 jlong Initialize(JNIEnv* env, jobject obj, jobject java_web_contents) {
27 content::WebContents* web_contents = 28 content::WebContents* web_contents =
28 content::WebContents::FromJavaWebContents(java_web_contents); 29 content::WebContents::FromJavaWebContents(java_web_contents);
29 ShortcutHelper* shortcut_helper = new ShortcutHelper(env, obj, web_contents); 30 AddToHomescreenDialogHelper* add_to_homescreen_helper =
30 return reinterpret_cast<intptr_t>(shortcut_helper); 31 new AddToHomescreenDialogHelper(env, obj, web_contents);
32 return reinterpret_cast<intptr_t>(add_to_homescreen_helper);
31 } 33 }
32 34
33 ShortcutHelper::ShortcutHelper(JNIEnv* env, 35 AddToHomescreenDialogHelper::AddToHomescreenDialogHelper(JNIEnv* env,
34 jobject obj, 36 jobject obj,
35 content::WebContents* web_contents) 37 content::WebContents* web_contents)
36 : add_shortcut_pending_(false), 38 : add_shortcut_pending_(false),
37 data_fetcher_(new ShortcutDataFetcher(web_contents, this)) { 39 data_fetcher_(new AddToHomescreenDataFetcher(web_contents, this)) {
38 java_ref_.Reset(env, obj); 40 java_ref_.Reset(env, obj);
39 } 41 }
40 42
41 ShortcutHelper::~ShortcutHelper() { 43 AddToHomescreenDialogHelper::~AddToHomescreenDialogHelper() {
42 data_fetcher_->set_weak_observer(nullptr); 44 data_fetcher_->set_weak_observer(nullptr);
43 data_fetcher_ = nullptr; 45 data_fetcher_ = nullptr;
44 } 46 }
45 47
46 void ShortcutHelper::OnUserTitleAvailable(const base::string16& user_title) { 48 void AddToHomescreenDialogHelper::OnUserTitleAvailable(
49 const base::string16& user_title) {
47 JNIEnv* env = base::android::AttachCurrentThread(); 50 JNIEnv* env = base::android::AttachCurrentThread();
48 ScopedJavaLocalRef<jstring> j_user_title = 51 ScopedJavaLocalRef<jstring> j_user_title =
49 base::android::ConvertUTF16ToJavaString(env, user_title); 52 base::android::ConvertUTF16ToJavaString(env, user_title);
50 Java_ShortcutHelper_onUserTitleAvailable(env, 53 Java_AddToHomescreenDialogHelper_onUserTitleAvailable(env,
51 java_ref_.obj(), 54 java_ref_.obj(),
52 j_user_title.obj()); 55 j_user_title.obj());
53 } 56 }
54 57
55 void ShortcutHelper::OnDataAvailable(const ShortcutInfo& info, 58 void AddToHomescreenDialogHelper::OnDataAvailable(const ShortcutInfo& info,
56 const SkBitmap& icon) { 59 const SkBitmap& icon) {
57 JNIEnv* env = base::android::AttachCurrentThread(); 60 JNIEnv* env = base::android::AttachCurrentThread();
58 ScopedJavaLocalRef<jobject> java_bitmap; 61 ScopedJavaLocalRef<jobject> java_bitmap;
59 if (icon.getSize()) 62 if (icon.getSize())
60 java_bitmap = gfx::ConvertToJavaBitmap(&icon); 63 java_bitmap = gfx::ConvertToJavaBitmap(&icon);
61 64
62 Java_ShortcutHelper_onIconAvailable(env, 65 Java_AddToHomescreenDialogHelper_onIconAvailable(env,
63 java_ref_.obj(), 66 java_ref_.obj(),
64 java_bitmap.obj()); 67 java_bitmap.obj());
65 68
66 if (add_shortcut_pending_) 69 if (add_shortcut_pending_)
67 AddShortcut(info, icon); 70 AddShortcut(info, icon);
68 } 71 }
69 72
70 void ShortcutHelper::Destroy(JNIEnv* env, jobject obj) { 73 void AddToHomescreenDialogHelper::Destroy(JNIEnv* env, jobject obj) {
71 delete this; 74 delete this;
72 } 75 }
73 76
74 SkBitmap ShortcutHelper::FinalizeLauncherIcon(const SkBitmap& bitmap, 77 SkBitmap AddToHomescreenDialogHelper::FinalizeLauncherIcon(
75 const GURL& url) { 78 const SkBitmap& bitmap,
79 const GURL& url) {
76 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 80 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
77 81
78 // Determine a single color to use for the favicon if the favicon that is 82 // Determine a single color to use for the favicon if the favicon that is
79 // returned it is too low quality. 83 // returned it is too low quality.
80 SkColor color = color_utils::CalculateKMeanColorOfBitmap(bitmap); 84 SkColor color = color_utils::CalculateKMeanColorOfBitmap(bitmap);
81 int dominant_red = SkColorGetR(color); 85 int dominant_red = SkColorGetR(color);
82 int dominant_green = SkColorGetG(color); 86 int dominant_green = SkColorGetG(color);
83 int dominant_blue = SkColorGetB(color); 87 int dominant_blue = SkColorGetB(color);
84 88
85 // Make the icon acceptable for the Android launcher. 89 // Make the icon acceptable for the Android launcher.
86 JNIEnv* env = base::android::AttachCurrentThread(); 90 JNIEnv* env = base::android::AttachCurrentThread();
87 ScopedJavaLocalRef<jstring> java_url = 91 ScopedJavaLocalRef<jstring> java_url =
88 base::android::ConvertUTF8ToJavaString(env, url.spec()); 92 base::android::ConvertUTF8ToJavaString(env, url.spec());
89 ScopedJavaLocalRef<jobject> java_bitmap; 93 ScopedJavaLocalRef<jobject> java_bitmap;
90 if (bitmap.getSize()) 94 if (bitmap.getSize())
91 java_bitmap = gfx::ConvertToJavaBitmap(&bitmap); 95 java_bitmap = gfx::ConvertToJavaBitmap(&bitmap);
92 96
93 base::android::ScopedJavaLocalRef<jobject> ref = 97 base::android::ScopedJavaLocalRef<jobject> ref =
94 Java_ShortcutHelper_finalizeLauncherIcon(env, 98 Java_AddToHomescreenDialogHelper_finalizeLauncherIcon(env,
95 java_url.obj(), 99 java_url.obj(),
96 java_bitmap.obj(), 100 java_bitmap.obj(),
97 dominant_red, 101 dominant_red,
98 dominant_green, 102 dominant_green,
99 dominant_blue); 103 dominant_blue);
100 return gfx::CreateSkBitmapFromJavaBitmap(gfx::JavaBitmap(ref.obj())); 104 return gfx::CreateSkBitmapFromJavaBitmap(gfx::JavaBitmap(ref.obj()));
101 } 105 }
102 106
103 void ShortcutHelper::AddShortcut(JNIEnv* env, 107 void AddToHomescreenDialogHelper::AddShortcut(JNIEnv* env,
104 jobject obj, 108 jobject obj,
105 jstring j_user_title) { 109 jstring j_user_title) {
106 add_shortcut_pending_ = true; 110 add_shortcut_pending_ = true;
107 111
108 base::string16 user_title = 112 base::string16 user_title =
109 base::android::ConvertJavaStringToUTF16(env, j_user_title); 113 base::android::ConvertJavaStringToUTF16(env, j_user_title);
110 if (!user_title.empty()) 114 if (!user_title.empty())
111 data_fetcher_->shortcut_info().user_title = user_title; 115 data_fetcher_->shortcut_info().user_title = user_title;
112 116
113 if (data_fetcher_->is_ready()) { 117 if (data_fetcher_->is_ready()) {
114 // If the fetcher isn't ready yet, the shortcut will be added when it is 118 // If the fetcher isn't ready yet, the shortcut will be added when it is
115 // via OnDataAvailable(); 119 // via OnDataAvailable();
116 AddShortcut(data_fetcher_->shortcut_info(), data_fetcher_->shortcut_icon()); 120 AddShortcut(data_fetcher_->shortcut_info(), data_fetcher_->shortcut_icon());
117 } 121 }
118 } 122 }
119 123
120 void ShortcutHelper::AddShortcut(const ShortcutInfo& info, 124 void AddToHomescreenDialogHelper::AddShortcut(const ShortcutInfo& info,
121 const SkBitmap& icon) { 125 const SkBitmap& icon) {
122 DCHECK(add_shortcut_pending_); 126 DCHECK(add_shortcut_pending_);
123 if (!add_shortcut_pending_) 127 if (!add_shortcut_pending_)
124 return; 128 return;
125 add_shortcut_pending_ = false; 129 add_shortcut_pending_ = false;
126 130
127 RecordAddToHomescreen(); 131 RecordAddToHomescreen();
128 132
129 content::BrowserThread::PostTask( 133 content::BrowserThread::PostTask(
130 content::BrowserThread::IO, 134 content::BrowserThread::IO,
131 FROM_HERE, 135 FROM_HERE,
132 base::Bind(&ShortcutHelper::AddShortcutInBackgroundWithSkBitmap, 136 base::Bind(&ShortcutHelper::AddShortcutInBackgroundWithSkBitmap,
133 info, 137 info,
134 icon)); 138 icon));
135 } 139 }
136 140
137 bool ShortcutHelper::RegisterShortcutHelper(JNIEnv* env) { 141 bool AddToHomescreenDialogHelper::RegisterAddToHomescreenDialogHelper(
142 JNIEnv* env) {
138 return RegisterNativesImpl(env); 143 return RegisterNativesImpl(env);
139 } 144 }
140 145
141 // static 146 void AddToHomescreenDialogHelper::RecordAddToHomescreen() {
142 void ShortcutHelper::AddShortcutInBackgroundWithSkBitmap(
143 const ShortcutInfo& info,
144 const SkBitmap& icon_bitmap) {
145 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
146
147 // Send the data to the Java side to create the shortcut.
148 JNIEnv* env = base::android::AttachCurrentThread();
149 ScopedJavaLocalRef<jstring> java_url =
150 base::android::ConvertUTF8ToJavaString(env, info.url.spec());
151 ScopedJavaLocalRef<jstring> java_user_title =
152 base::android::ConvertUTF16ToJavaString(env, info.user_title);
153 ScopedJavaLocalRef<jstring> java_name =
154 base::android::ConvertUTF16ToJavaString(env, info.name);
155 ScopedJavaLocalRef<jstring> java_short_name =
156 base::android::ConvertUTF16ToJavaString(env, info.short_name);
157 ScopedJavaLocalRef<jobject> java_bitmap;
158 if (icon_bitmap.getSize())
159 java_bitmap = gfx::ConvertToJavaBitmap(&icon_bitmap);
160
161 Java_ShortcutHelper_addShortcut(
162 env,
163 base::android::GetApplicationContext(),
164 java_url.obj(),
165 java_user_title.obj(),
166 java_name.obj(),
167 java_short_name.obj(),
168 java_bitmap.obj(),
169 info.display == blink::WebDisplayModeStandalone,
170 info.orientation,
171 info.source,
172 info.theme_color,
173 info.background_color);
174 }
175
176 void ShortcutHelper::RecordAddToHomescreen() {
177 // Record that the shortcut has been added, so no banners will be shown 147 // Record that the shortcut has been added, so no banners will be shown
178 // for this app. 148 // for this app.
179 content::WebContents* web_contents = data_fetcher_->web_contents(); 149 content::WebContents* web_contents = data_fetcher_->web_contents();
180 if (!web_contents) 150 if (!web_contents)
181 return; 151 return;
182 152
183 AppBannerSettingsHelper::RecordBannerEvent( 153 AppBannerSettingsHelper::RecordBannerEvent(
184 web_contents, web_contents->GetURL(), 154 web_contents, web_contents->GetURL(),
185 data_fetcher_->shortcut_info().url.spec(), 155 data_fetcher_->shortcut_info().url.spec(),
186 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN, 156 AppBannerSettingsHelper::APP_BANNER_EVENT_DID_ADD_TO_HOMESCREEN,
187 base::Time::Now()); 157 base::Time::Now());
188 } 158 }
OLDNEW
« no previous file with comments | « chrome/browser/android/webapps/add_to_homescreen_dialog_helper.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698