/* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.launcher3.model import android.content.pm.LauncherApps import android.content.pm.ShortcutInfo import android.os.UserHandle import android.text.TextUtils import com.android.launcher3.LauncherModel.ModelUpdateTask import com.android.launcher3.logging.FileLog import com.android.launcher3.model.PackageUpdatedTask.OP_ADD import com.android.launcher3.model.PackageUpdatedTask.OP_REMOVE import com.android.launcher3.model.PackageUpdatedTask.OP_SUSPEND import com.android.launcher3.model.PackageUpdatedTask.OP_UNAVAILABLE import com.android.launcher3.model.PackageUpdatedTask.OP_UNSUSPEND import com.android.launcher3.model.PackageUpdatedTask.OP_UPDATE import java.util.function.Consumer /** * Implementation of {@link LauncherApps#Callbacks} which converts various events to corresponding * model tasks */ class ModelLauncherCallbacks(private var taskExecutor: Consumer) : LauncherApps.Callback() { override fun onPackageAdded(packageName: String, user: UserHandle) { taskExecutor.accept(PackageUpdatedTask(OP_ADD, user, packageName)) } override fun onPackageChanged(packageName: String, user: UserHandle) { taskExecutor.accept(PackageUpdatedTask(OP_UPDATE, user, packageName)) } override fun onPackageLoadingProgressChanged( packageName: String, user: UserHandle, progress: Float ) { taskExecutor.accept(PackageIncrementalDownloadUpdatedTask(packageName, user, progress)) } override fun onPackageRemoved(packageName: String, user: UserHandle) { FileLog.d(TAG, "package removed received $packageName") taskExecutor.accept(PackageUpdatedTask(OP_REMOVE, user, packageName)) } override fun onPackagesAvailable( vararg packageNames: String, user: UserHandle, replacing: Boolean ) { taskExecutor.accept(PackageUpdatedTask(OP_UPDATE, user, *packageNames)) } override fun onPackagesSuspended(vararg packageNames: String, user: UserHandle) { taskExecutor.accept(PackageUpdatedTask(OP_SUSPEND, user, *packageNames)) } override fun onPackagesUnavailable( packageNames: Array, user: UserHandle, replacing: Boolean ) { if (!replacing) { taskExecutor.accept(PackageUpdatedTask(OP_UNAVAILABLE, user, *packageNames)) } } override fun onPackagesUnsuspended(vararg packageNames: String, user: UserHandle) { taskExecutor.accept(PackageUpdatedTask(OP_UNSUSPEND, user, *packageNames)) } override fun onShortcutsChanged( packageName: String, shortcuts: MutableList, user: UserHandle ) { taskExecutor.accept(ShortcutsChangedTask(packageName, shortcuts, user, true)) } fun onPackagesRemoved(user: UserHandle, packages: List) { FileLog.d(TAG, "package removed received " + TextUtils.join(",", packages)) taskExecutor.accept(PackageUpdatedTask(OP_REMOVE, user, *packages.toTypedArray())) } companion object { private const val TAG = "LauncherAppsCallbackImpl" } }