| 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 package org.chromium.chrome.browser.webapps; | 5 package org.chromium.chrome.browser.webapps; |
| 6 | 6 |
| 7 import android.content.Intent; | 7 import android.content.Intent; |
| 8 import android.graphics.Bitmap; | 8 import android.graphics.Bitmap; |
| 9 import android.graphics.Color; | 9 import android.graphics.Color; |
| 10 import android.graphics.drawable.Drawable; | 10 import android.graphics.drawable.Drawable; |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 226 } | 226 } |
| 227 | 227 |
| 228 /** | 228 /** |
| 229 * @return Structure containing data about the webapp currently displayed. | 229 * @return Structure containing data about the webapp currently displayed. |
| 230 * The return value should not be cached. | 230 * The return value should not be cached. |
| 231 */ | 231 */ |
| 232 WebappInfo getWebappInfo() { | 232 WebappInfo getWebappInfo() { |
| 233 return mWebappInfo; | 233 return mWebappInfo; |
| 234 } | 234 } |
| 235 | 235 |
| 236 protected int getBackgroundColor() { | 236 private void initializeWebappData() { |
| 237 return ColorUtils.getOpaqueColor(mWebappInfo.backgroundColor( | 237 final int backgroundColor = ColorUtils.getOpaqueColor(mWebappInfo.backgr
oundColor( |
| 238 ApiCompatibilityUtils.getColor(getResources(), R.color.webapp_de
fault_bg))); | 238 ApiCompatibilityUtils.getColor(getResources(), R.color.webapp_de
fault_bg))); |
| 239 } | |
| 240 | 239 |
| 241 private void initializeWebappData() { | |
| 242 mSplashScreen = new FrameLayout(this); | 240 mSplashScreen = new FrameLayout(this); |
| 243 mSplashScreen.setBackgroundColor(getBackgroundColor()); | 241 mSplashScreen.setBackgroundColor(backgroundColor); |
| 244 | 242 |
| 245 ViewGroup contentView = (ViewGroup) findViewById(android.R.id.content); | 243 ViewGroup contentView = (ViewGroup) findViewById(android.R.id.content); |
| 246 contentView.addView(mSplashScreen); | 244 contentView.addView(mSplashScreen); |
| 247 | 245 |
| 248 mWebappUma.splashscreenVisible(); | 246 mWebappUma.splashscreenVisible(); |
| 249 mWebappUma.recordSplashscreenBackgroundColor(mWebappInfo.hasValidBackgro
undColor() | 247 mWebappUma.recordSplashscreenBackgroundColor(mWebappInfo.hasValidBackgro
undColor() |
| 250 ? WebappUma.SPLASHSCREEN_COLOR_STATUS_CUSTOM | 248 ? WebappUma.SPLASHSCREEN_COLOR_STATUS_CUSTOM |
| 251 : WebappUma.SPLASHSCREEN_COLOR_STATUS_DEFAULT); | 249 : WebappUma.SPLASHSCREEN_COLOR_STATUS_DEFAULT); |
| 250 mWebappUma.recordSplashscreenThemeColor(mWebappInfo.hasValidThemeColor() |
| 251 ? WebappUma.SPLASHSCREEN_COLOR_STATUS_CUSTOM |
| 252 : WebappUma.SPLASHSCREEN_COLOR_STATUS_DEFAULT); |
| 252 | 253 |
| 254 initializeSplashScreenWidgets(backgroundColor); |
| 255 } |
| 256 |
| 257 protected void initializeSplashScreenWidgets(final int backgroundColor) { |
| 253 WebappRegistry.getWebappDataStorage(this, mWebappInfo.id(), | 258 WebappRegistry.getWebappDataStorage(this, mWebappInfo.id(), |
| 254 new WebappRegistry.FetchWebappDataStorageCallback() { | 259 new WebappRegistry.FetchWebappDataStorageCallback() { |
| 255 @Override | 260 @Override |
| 256 public void onWebappDataStorageRetrieved(WebappDataStorage s
torage) { | 261 public void onWebappDataStorageRetrieved(WebappDataStorage s
torage) { |
| 257 onDataStorageFetched(storage); | 262 if (storage == null) { |
| 263 onStorageIsNull(backgroundColor); |
| 264 return; |
| 265 } |
| 266 updateStorage(storage); |
| 267 |
| 268 // Retrieve the splash image if it exists. |
| 269 storage.getSplashScreenImage(new WebappDataStorage.Fetch
Callback<Bitmap>() { |
| 270 @Override |
| 271 public void onDataRetrieved(Bitmap splashImage) { |
| 272 initializeSplashScreenWidgets(backgroundColor, s
plashImage); |
| 273 } |
| 274 }); |
| 258 } | 275 } |
| 259 } | 276 } |
| 260 ); | 277 ); |
| 261 } | 278 } |
| 262 | 279 |
| 263 protected void recordSplashScreenThemeColorUma() { | 280 protected void onStorageIsNull(int backgroundColor) {} |
| 264 mWebappUma.recordSplashscreenThemeColor(mWebappInfo.hasValidThemeColor() | |
| 265 ? WebappUma.SPLASHSCREEN_COLOR_STATUS_CUSTOM | |
| 266 : WebappUma.SPLASHSCREEN_COLOR_STATUS_DEFAULT); | |
| 267 } | |
| 268 | 281 |
| 269 protected void onDataStorageFetched(WebappDataStorage storage) { | 282 protected void updateStorage(WebappDataStorage storage) { |
| 270 recordSplashScreenThemeColorUma(); | |
| 271 if (storage == null) return; | |
| 272 | |
| 273 // The information in the WebappDataStorage may have been purged by the | 283 // The information in the WebappDataStorage may have been purged by the |
| 274 // user clearing their history or not launching the web app recently. | 284 // user clearing their history or not launching the web app recently. |
| 275 // Restore the data if necessary from the intent. | 285 // Restore the data if necessary from the intent. |
| 276 storage.updateFromShortcutIntent(getIntent()); | 286 storage.updateFromShortcutIntent(getIntent()); |
| 277 | 287 |
| 278 // A recent last used time is the indicator that the web app is still | 288 // A recent last used time is the indicator that the web app is still |
| 279 // present on the home screen, and enables sources such as notifications
to | 289 // present on the home screen, and enables sources such as notifications
to |
| 280 // launch web apps. Thus, we do not update the last used time when the w
eb | 290 // launch web apps. Thus, we do not update the last used time when the w
eb |
| 281 // app is not directly launched from the home screen, as this interferes | 291 // app is not directly launched from the home screen, as this interferes |
| 282 // with the heuristic. | 292 // with the heuristic. |
| 283 if (mWebappInfo.isLaunchedFromHomescreen()) { | 293 if (mWebappInfo.isLaunchedFromHomescreen()) { |
| 284 storage.updateLastUsedTime(); | 294 storage.updateLastUsedTime(); |
| 285 } | 295 } |
| 286 | |
| 287 retrieveSplashScreenImage(storage); | |
| 288 } | 296 } |
| 289 | 297 |
| 290 protected void retrieveSplashScreenImage(WebappDataStorage storage) { | 298 protected void initializeSplashScreenWidgets(int backgroundColor, Bitmap spl
ashImage) { |
| 291 // Retrieve the splash image if it exists. | |
| 292 storage.getSplashScreenImage(new WebappDataStorage.FetchCallback<Bitmap>
() { | |
| 293 @Override | |
| 294 public void onDataRetrieved(Bitmap splashImage) { | |
| 295 initializeSplashScreenWidgets(splashImage); | |
| 296 } | |
| 297 }); | |
| 298 } | |
| 299 | |
| 300 protected void initializeSplashScreenWidgets(Bitmap splashImage) { | |
| 301 Bitmap displayIcon = splashImage == null ? mWebappInfo.icon() : splashIm
age; | 299 Bitmap displayIcon = splashImage == null ? mWebappInfo.icon() : splashIm
age; |
| 302 int minimiumSizeThreshold = getResources().getDimensionPixelSize( | 300 int minimiumSizeThreshold = getResources().getDimensionPixelSize( |
| 303 R.dimen.webapp_splash_image_size_minimum); | 301 R.dimen.webapp_splash_image_size_minimum); |
| 304 int bigThreshold = getResources().getDimensionPixelSize( | 302 int bigThreshold = getResources().getDimensionPixelSize( |
| 305 R.dimen.webapp_splash_image_size_threshold); | 303 R.dimen.webapp_splash_image_size_threshold); |
| 306 | 304 |
| 307 // Inflate the correct layout for the image. | 305 // Inflate the correct layout for the image. |
| 308 int layoutId; | 306 int layoutId; |
| 309 if (displayIcon == null || displayIcon.getWidth() < minimiumSizeThreshol
d | 307 if (displayIcon == null || displayIcon.getWidth() < minimiumSizeThreshol
d |
| 310 || (displayIcon == mWebappInfo.icon() && mWebappInfo.isIconGener
ated())) { | 308 || (displayIcon == mWebappInfo.icon() && mWebappInfo.isIconGener
ated())) { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 339 .inflate(layoutId, mSplashScreen, true); | 337 .inflate(layoutId, mSplashScreen, true); |
| 340 | 338 |
| 341 // Set up the elements of the splash screen. | 339 // Set up the elements of the splash screen. |
| 342 TextView appNameView = (TextView) subLayout.findViewById( | 340 TextView appNameView = (TextView) subLayout.findViewById( |
| 343 R.id.webapp_splash_screen_name); | 341 R.id.webapp_splash_screen_name); |
| 344 ImageView splashIconView = (ImageView) subLayout.findViewById( | 342 ImageView splashIconView = (ImageView) subLayout.findViewById( |
| 345 R.id.webapp_splash_screen_icon); | 343 R.id.webapp_splash_screen_icon); |
| 346 appNameView.setText(mWebappInfo.name()); | 344 appNameView.setText(mWebappInfo.name()); |
| 347 if (splashIconView != null) splashIconView.setImageBitmap(displayIcon); | 345 if (splashIconView != null) splashIconView.setImageBitmap(displayIcon); |
| 348 | 346 |
| 349 if (ColorUtils.shouldUseLightForegroundOnBackground(getBackgroundColor()
)) { | 347 if (ColorUtils.shouldUseLightForegroundOnBackground(backgroundColor)) { |
| 350 appNameView.setTextColor(ApiCompatibilityUtils.getColor(getResources
(), | 348 appNameView.setTextColor(ApiCompatibilityUtils.getColor(getResources
(), |
| 351 R.color.webapp_splash_title_light)); | 349 R.color.webapp_splash_title_light)); |
| 352 } | 350 } |
| 353 } | 351 } |
| 354 | 352 |
| 355 private void updateUrlBar() { | 353 private void updateUrlBar() { |
| 356 Tab tab = getActivityTab(); | 354 Tab tab = getActivityTab(); |
| 357 if (tab == null || mUrlBar == null) return; | 355 if (tab == null || mUrlBar == null) return; |
| 358 mUrlBar.update(tab.getUrl(), tab.getSecurityLevel()); | 356 mUrlBar.update(tab.getUrl(), tab.getSecurityLevel()); |
| 359 } | 357 } |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 577 return new WebappDelegateFactory(this); | 575 return new WebappDelegateFactory(this); |
| 578 } | 576 } |
| 579 | 577 |
| 580 // We're temporarily disable CS on webapp since there are some issues. (http
://crbug.com/471950) | 578 // We're temporarily disable CS on webapp since there are some issues. (http
://crbug.com/471950) |
| 581 // TODO(changwan): re-enable it once the issues are resolved. | 579 // TODO(changwan): re-enable it once the issues are resolved. |
| 582 @Override | 580 @Override |
| 583 protected boolean isContextualSearchAllowed() { | 581 protected boolean isContextualSearchAllowed() { |
| 584 return false; | 582 return false; |
| 585 } | 583 } |
| 586 } | 584 } |
| OLD | NEW |