| 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 #ifndef CHROME_BROWSER_UI_APP_LIST_ARC_ARC_APP_LIST_PREFS_H_ | 5 #ifndef CHROME_BROWSER_UI_APP_LIST_ARC_ARC_APP_LIST_PREFS_H_ |
| 6 #define CHROME_BROWSER_UI_APP_LIST_ARC_ARC_APP_LIST_PREFS_H_ | 6 #define CHROME_BROWSER_UI_APP_LIST_ARC_ARC_APP_LIST_PREFS_H_ |
| 7 | 7 |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <map> | 10 #include <map> |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 192 ui::ScaleFactor scale_factor) const; | 192 ui::ScaleFactor scale_factor) const; |
| 193 // Constructs path to default app icon for specific scale factor. This path | 193 // Constructs path to default app icon for specific scale factor. This path |
| 194 // is used to resolve icon if no icon is available at |GetIconPath|. | 194 // is used to resolve icon if no icon is available at |GetIconPath|. |
| 195 base::FilePath MaybeGetIconPathForDefaultApp( | 195 base::FilePath MaybeGetIconPathForDefaultApp( |
| 196 const std::string& app_id, | 196 const std::string& app_id, |
| 197 ui::ScaleFactor scale_factor) const; | 197 ui::ScaleFactor scale_factor) const; |
| 198 | 198 |
| 199 // Sets last launched time for the requested app. | 199 // Sets last launched time for the requested app. |
| 200 void SetLastLaunchTime(const std::string& app_id, const base::Time& time); | 200 void SetLastLaunchTime(const std::string& app_id, const base::Time& time); |
| 201 | 201 |
| 202 // Requests to load an app icon for specific scale factor. If the app or ARC | 202 // Calls RequestIcon if no request is recorded. |
| 203 // bridge service is not ready, then defer this request until the app gets | 203 void MaybeRequestIcon(const std::string& app_id, |
| 204 // available. Once new icon is installed notifies an observer | 204 ui::ScaleFactor scale_factor); |
| 205 // OnAppIconUpdated. | |
| 206 void RequestIcon(const std::string& app_id, ui::ScaleFactor scale_factor); | |
| 207 | 205 |
| 208 // Sets notification enabled flag for given value. If the app or ARC bridge | 206 // Sets notification enabled flag for given value. If the app or ARC bridge |
| 209 // service is not ready, then defer this request until the app gets | 207 // service is not ready, then defer this request until the app gets |
| 210 // available. Once new value is set notifies an observer | 208 // available. Once new value is set notifies an observer |
| 211 // OnNotificationsEnabledChanged. | 209 // OnNotificationsEnabledChanged. |
| 212 void SetNotificationsEnabled(const std::string& app_id, bool enabled); | 210 void SetNotificationsEnabled(const std::string& app_id, bool enabled); |
| 213 | 211 |
| 214 // Returns true if app is registered. | 212 // Returns true if app is registered. |
| 215 bool IsRegistered(const std::string& app_id) const; | 213 bool IsRegistered(const std::string& app_id) const; |
| 216 // Returns true if app is a default app. | 214 // Returns true if app is a default app. |
| (...skipping 25 matching lines...) Expand all Loading... |
| 242 } | 240 } |
| 243 | 241 |
| 244 std::unordered_set<std::string> GetAppsForPackage( | 242 std::unordered_set<std::string> GetAppsForPackage( |
| 245 const std::string& package_name) const; | 243 const std::string& package_name) const; |
| 246 | 244 |
| 247 void SetDefaltAppsReadyCallback(base::Closure callback); | 245 void SetDefaltAppsReadyCallback(base::Closure callback); |
| 248 void SimulateDefaultAppAvailabilityTimeoutForTesting(); | 246 void SimulateDefaultAppAvailabilityTimeoutForTesting(); |
| 249 | 247 |
| 250 private: | 248 private: |
| 251 friend class ChromeLauncherControllerImplTest; | 249 friend class ChromeLauncherControllerImplTest; |
| 250 friend class ArcAppModelBuilderTest; |
| 252 | 251 |
| 253 // See the Create methods. | 252 // See the Create methods. |
| 254 ArcAppListPrefs( | 253 ArcAppListPrefs( |
| 255 Profile* profile, | 254 Profile* profile, |
| 256 arc::InstanceHolder<arc::mojom::AppInstance>* app_instance_holder); | 255 arc::InstanceHolder<arc::mojom::AppInstance>* app_instance_holder); |
| 257 | 256 |
| 258 // arc::InstanceHolder<arc::mojom::AppInstance>::Observer: | 257 // arc::InstanceHolder<arc::mojom::AppInstance>::Observer: |
| 259 void OnInstanceReady() override; | 258 void OnInstanceReady() override; |
| 260 void OnInstanceClosed() override; | 259 void OnInstanceClosed() override; |
| 261 | 260 |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 336 | 335 |
| 337 // Installs an icon to file system in the special folder of the profile | 336 // Installs an icon to file system in the special folder of the profile |
| 338 // directory. | 337 // directory. |
| 339 void InstallIcon(const std::string& app_id, | 338 void InstallIcon(const std::string& app_id, |
| 340 ui::ScaleFactor scale_factor, | 339 ui::ScaleFactor scale_factor, |
| 341 const std::vector<uint8_t>& contentPng); | 340 const std::vector<uint8_t>& contentPng); |
| 342 void OnIconInstalled(const std::string& app_id, | 341 void OnIconInstalled(const std::string& app_id, |
| 343 ui::ScaleFactor scale_factor, | 342 ui::ScaleFactor scale_factor, |
| 344 bool install_succeed); | 343 bool install_succeed); |
| 345 | 344 |
| 345 // Requests to load an app icon for specific scale factor. If the app or ARC |
| 346 // bridge service is not ready, then defer this request until the app gets |
| 347 // available. Once new icon is installed notifies an observer |
| 348 // OnAppIconUpdated. |
| 349 void RequestIcon(const std::string& app_id, ui::ScaleFactor scale_factor); |
| 350 |
| 346 // This checks if app is not registered yet and in this case creates | 351 // This checks if app is not registered yet and in this case creates |
| 347 // non-launchable app entry. | 352 // non-launchable app entry. |
| 348 void MaybeAddNonLaunchableApp(const base::Optional<std::string>& name, | 353 void MaybeAddNonLaunchableApp(const base::Optional<std::string>& name, |
| 349 const std::string& package_name, | 354 const std::string& package_name, |
| 350 const std::string& activity); | 355 const std::string& activity); |
| 351 | 356 |
| 352 // Reveals first app from provided package in app launcher if package is newly | 357 // Reveals first app from provided package in app launcher if package is newly |
| 353 // installed by user. If all apps in package are hidden then app list is not | 358 // installed by user. If all apps in package are hidden then app list is not |
| 354 // shown. | 359 // shown. |
| 355 void MaybeShowPackageInAppLauncher( | 360 void MaybeShowPackageInAppLauncher( |
| 356 const arc::mojom::ArcPackageInfo& package_info); | 361 const arc::mojom::ArcPackageInfo& package_info); |
| 357 | 362 |
| 358 // Returns true is specified package is new in the system, was not installed | 363 // Returns true is specified package is new in the system, was not installed |
| 359 // and it is not scheduled to install by sync. | 364 // and it is not scheduled to install by sync. |
| 360 bool IsUnknownPackage(const std::string& package_name) const; | 365 bool IsUnknownPackage(const std::string& package_name) const; |
| 361 | 366 |
| 362 // Detects that default apps either exist or installation session is started. | 367 // Detects that default apps either exist or installation session is started. |
| 363 void DetectDefaultAppAvailability(); | 368 void DetectDefaultAppAvailability(); |
| 364 | 369 |
| 365 // Performs data clean up for removed package. | 370 // Performs data clean up for removed package. |
| 366 void HandlePackageRemoved(const std::string& package_name); | 371 void HandlePackageRemoved(const std::string& package_name); |
| 367 | 372 |
| 368 // Sets timeout to wait for default app installed or installation started if | 373 // Sets timeout to wait for default app installed or installation started if |
| 369 // some default app is not available yet. | 374 // some default app is not available yet. |
| 370 void MaybeSetDefaultAppLoadingTimeout(); | 375 void MaybeSetDefaultAppLoadingTimeout(); |
| 371 | 376 |
| 377 bool IsIconRequestRecorded(const std::string& app_id, |
| 378 ui::ScaleFactor scale_factor) const; |
| 379 |
| 380 // Remove the IconRequestRecord associated with app_id. |
| 381 void MaybeRemoveIconRequestRecord(const std::string& app_id); |
| 382 |
| 383 void ClearIconRequestRecord(); |
| 384 |
| 372 Profile* const profile_; | 385 Profile* const profile_; |
| 373 | 386 |
| 374 // Owned by the BrowserContext. | 387 // Owned by the BrowserContext. |
| 375 PrefService* const prefs_; | 388 PrefService* const prefs_; |
| 376 | 389 |
| 377 arc::InstanceHolder<arc::mojom::AppInstance>* const app_instance_holder_; | 390 arc::InstanceHolder<arc::mojom::AppInstance>* const app_instance_holder_; |
| 378 | 391 |
| 379 // List of observers. | 392 // List of observers. |
| 380 base::ObserverList<Observer> observer_list_; | 393 base::ObserverList<Observer> observer_list_; |
| 381 // Keeps root folder where ARC app icons for different scale factor are | 394 // Keeps root folder where ARC app icons for different scale factor are |
| 382 // stored. | 395 // stored. |
| 383 base::FilePath base_path_; | 396 base::FilePath base_path_; |
| 384 // Contains set of ARC apps that are currently ready. | 397 // Contains set of ARC apps that are currently ready. |
| 385 std::unordered_set<std::string> ready_apps_; | 398 std::unordered_set<std::string> ready_apps_; |
| 386 // Contains set of ARC apps that are currently tracked. | 399 // Contains set of ARC apps that are currently tracked. |
| 387 std::unordered_set<std::string> tracked_apps_; | 400 std::unordered_set<std::string> tracked_apps_; |
| 388 // Contains number of ARC packages that are currently installing. | 401 // Contains number of ARC packages that are currently installing. |
| 389 int installing_packages_count_ = 0; | 402 int installing_packages_count_ = 0; |
| 390 // Keeps deferred icon load requests. Each app may contain several requests | 403 // Keeps record for icon request. Each app may contain several requests for |
| 391 // for different scale factor. Scale factor is defined by specific bit | 404 // different scale factor. Scale factor is defined by specific bit position. |
| 392 // position. | 405 // Mainly two usages: |
| 393 std::map<std::string, uint32_t> request_icon_deferred_; | 406 // 1. Keeps deferred icon load requests when apps are not ready. Request will |
| 407 // be sent when apps becomes ready. |
| 408 // 2. Keeps record of icon request sent to Android. In each user session, one |
| 409 // request per app per scale_factor is allowed once. |
| 410 // When ARC is disabled or the app is uninstalled, the record will be erased. |
| 411 std::map<std::string, uint32_t> request_icon_recorded_; |
| 394 // True if this preference has been initialized once. | 412 // True if this preference has been initialized once. |
| 395 bool is_initialized_ = false; | 413 bool is_initialized_ = false; |
| 396 // True if apps were restored. | 414 // True if apps were restored. |
| 397 bool apps_restored_ = false; | 415 bool apps_restored_ = false; |
| 398 // True is ARC package list has been refreshed once. | 416 // True is ARC package list has been refreshed once. |
| 399 bool package_list_initial_refreshed_ = false; | 417 bool package_list_initial_refreshed_ = false; |
| 400 // Play Store does not have publicly available observers for default app | 418 // Play Store does not have publicly available observers for default app |
| 401 // installations. This timeout is for validating default app availability. | 419 // installations. This timeout is for validating default app availability. |
| 402 // Default apps should be either already installed or their installations | 420 // Default apps should be either already installed or their installations |
| 403 // should be started soon after initial app list refresh. | 421 // should be started soon after initial app list refresh. |
| (...skipping 10 matching lines...) Expand all Loading... |
| 414 base::Closure default_apps_ready_callback_; | 432 base::Closure default_apps_ready_callback_; |
| 415 int last_shown_batch_installation_revision_ = -1; | 433 int last_shown_batch_installation_revision_ = -1; |
| 416 int current_batch_installation_revision_ = 0; | 434 int current_batch_installation_revision_ = 0; |
| 417 | 435 |
| 418 base::WeakPtrFactory<ArcAppListPrefs> weak_ptr_factory_; | 436 base::WeakPtrFactory<ArcAppListPrefs> weak_ptr_factory_; |
| 419 | 437 |
| 420 DISALLOW_COPY_AND_ASSIGN(ArcAppListPrefs); | 438 DISALLOW_COPY_AND_ASSIGN(ArcAppListPrefs); |
| 421 }; | 439 }; |
| 422 | 440 |
| 423 #endif // CHROME_BROWSER_UI_APP_LIST_ARC_ARC_APP_LIST_PREFS_H_ | 441 #endif // CHROME_BROWSER_UI_APP_LIST_ARC_ARC_APP_LIST_PREFS_H_ |
| OLD | NEW |