1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/chromeos/extensions/wallpaper_manager_util.h"
#include "base/command_line.h"
#include "base/logging.h"
#include "base/metrics/field_trial.h"
#include "chrome/browser/chromeos/arc/arc_session_manager.h"
#include "chrome/browser/chromeos/profiles/profile_helper.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h"
#include "chrome/browser/ui/app_list/arc/arc_app_utils.h"
#include "chrome/browser/ui/extensions/app_launch_params.h"
#include "chrome/browser/ui/extensions/application_launch.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chromeos/chromeos_switches.h"
#include "extensions/browser/extension_system.h"
#include "extensions/common/constants.h"
#include "extensions/common/extension.h"
#include "ui/base/window_open_disposition.h"
#include "ui/events/event_constants.h"
namespace wallpaper_manager_util {
namespace {
const char kAndroidWallpapersAppPackage[] = "com.google.android.apps.wallpaper";
const char kAndroidWallpapersAppActivity[] =
"com.google.android.apps.wallpaper.picker.CategoryPickerActivity";
const char kAndroidWallpapersAppTrialName[] = "AndroidWallpapersAppOnChromeOS";
const char kEnableAndroidWallpapersApp[] =
"Enable-android-wallpapers-app_Dogfood";
} // namespace
// Only if the current profile is the primary profile && Arc service is enabled
// && the Android Wallpapers App has been installed && the finch experiment or
// chrome flag is enabled, launch the Android Wallpapers App. Otherwise launch
// the old Chrome OS Wallpaper Picker App.
bool ShouldUseAndroidWallpapersApp(Profile* profile) {
if (!chromeos::ProfileHelper::IsPrimaryProfile(profile))
return false;
// Check if the ARC++ is enabled.
const arc::ArcSessionManager* const arc_session_manager =
arc::ArcSessionManager::Get();
if (!arc_session_manager || !arc_session_manager->IsArcEnabled())
return false;
// Check if Android Wallpapers App has been installed.
const ArcAppListPrefs* const prefs = ArcAppListPrefs::Get(profile);
if (!prefs || prefs->GetAppsForPackage(kAndroidWallpapersAppPackage).empty())
return false;
// Check if the finch experiment or the chrome flag is enabled.
if (base::FieldTrialList::FindFullName(kAndroidWallpapersAppTrialName) !=
kEnableAndroidWallpapersApp &&
!base::CommandLine::ForCurrentProcess()->HasSwitch(
chromeos::switches::kEnableAndroidWallpapersApp)) {
return false;
}
return true;
}
void OpenWallpaperManager() {
Profile* profile = ProfileManager::GetActiveUserProfile();
DCHECK(profile);
if (ShouldUseAndroidWallpapersApp(profile)) {
const std::string app_id = ArcAppListPrefs::GetAppId(
kAndroidWallpapersAppPackage, kAndroidWallpapersAppActivity);
arc::LaunchApp(profile, app_id, ui::EF_NONE);
} else {
ExtensionService* service =
extensions::ExtensionSystem::Get(profile)->extension_service();
if (!service)
return;
const extensions::Extension* extension =
service->GetExtensionById(extension_misc::kWallpaperManagerId, false);
if (!extension)
return;
OpenApplication(AppLaunchParams(
profile, extension, extensions::LAUNCH_CONTAINER_WINDOW,
WindowOpenDisposition::NEW_WINDOW, extensions::SOURCE_CHROME_INTERNAL));
}
}
} // namespace wallpaper_manager_util
|