Index: chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc |
diff --git a/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc b/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc |
index 791b24f96419f712762339330f2e8525e36dc091..b98349627c8408cbb8ebfd666736c7cc55cbb65f 100644 |
--- a/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc |
+++ b/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc |
@@ -15,6 +15,7 @@ |
#include "base/strings/string_number_conversions.h" |
#include "base/task_runner_util.h" |
#include "chrome/browser/profiles/profile.h" |
+#include "chrome/browser/ui/app_list/app_list_service.h" |
#include "chrome/browser/ui/app_list/arc/arc_app_list_prefs_factory.h" |
#include "chrome/browser/ui/app_list/arc/arc_app_utils.h" |
#include "chrome/browser/ui/app_list/arc/arc_package_syncable_service.h" |
@@ -575,6 +576,8 @@ void ArcAppListPrefs::OnInstanceReady() { |
return; |
} |
+ is_initialized_ = false; |
+ |
app_instance->Init(binding_.CreateInterfacePtrAndBind()); |
app_instance->RefreshAppList(); |
@@ -592,6 +595,8 @@ void ArcAppListPrefs::OnInstanceClosed() { |
sync_service_->StopSyncing(syncer::ARC_PACKAGE); |
sync_service_ = nullptr; |
} |
+ |
+ is_initialized_ = false; |
} |
void ArcAppListPrefs::MayAddNonLaunchableApp(const std::string& name, |
@@ -918,12 +923,46 @@ void ArcAppListPrefs::OnNotificationsEnabledChanged( |
OnNotificationsEnabledChanged(package_name, enabled)); |
} |
+void ArcAppListPrefs::MayShowPackageInAppLauncher( |
+ const arc::mojom::ArcPackageInfo& package_info) { |
+ // Ignore system packages and auxiliary packages. |
+ if (!package_info.sync || package_info.system) |
+ return; |
+ |
+ std::unordered_set<std::string> app_ids = |
+ GetAppsForPackage(package_info.package_name); |
+ for (const auto& app_id : app_ids) { |
+ std::unique_ptr<ArcAppListPrefs::AppInfo> app_info = GetApp(app_id); |
+ if (!app_info) { |
+ NOTREACHED(); |
+ continue; |
+ } |
+ if (!app_info->showInLauncher) |
+ continue; |
+ |
+ AppListService* service = AppListService::Get(); |
+ CHECK(service); |
+ service->ShowForAppInstall(profile_, app_id, false); |
+ break; |
+ } |
+} |
+ |
void ArcAppListPrefs::OnPackageAdded( |
arc::mojom::ArcPackageInfoPtr package_info) { |
DCHECK(IsArcEnabled()); |
+ |
+ // Ignore packages installed by internal sync. |
+ arc::ArcPackageSyncableService* package_service = |
+ arc::ArcPackageSyncableService::Get(profile_); |
+ DCHECK(package_service); |
+ const bool new_package_in_system = !GetPackage(package_info->package_name) && |
+ !package_service->IsPackageSyncing(package_info->package_name); |
+ |
AddOrUpdatePackagePrefs(prefs_, *package_info); |
FOR_EACH_OBSERVER(Observer, observer_list_, |
OnPackageInstalled(*package_info)); |
+ if (new_package_in_system) |
+ MayShowPackageInAppLauncher(*package_info); |
} |
void ArcAppListPrefs::OnPackageModified( |