Files
Lawnchair/src/com/android/launcher3/model/ModelDelegate.java
T
Winson Chung 94e8ad0731 Add multi-instance state to item infos
- Add legacy resource for supported multi-instance apps that
  matches the current SystemUI resource of the same name, and will
  be removed as apps migrate to the V manifest property to declare
  multi-instance support
- Load the multi-instance state from PackageManager when the db is
  first loaded or when packages are updated
- The multi-instance check is then used to determine if an app pair
  can be saved (ie. whether the action can be shown)

Bug: 323112914
Test: atest NexusLauncherTests

Change-Id: I565b4bee4ab5f7040910306b1fd60a4fc3bf9a1c
2024-05-09 18:43:38 +00:00

140 lines
4.7 KiB
Java

/*
* Copyright (C) 2020 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 static com.android.launcher3.util.PackageManagerHelper.hasShortcutsPermission;
import android.content.Context;
import android.content.pm.ShortcutInfo;
import androidx.annotation.NonNull;
import androidx.annotation.WorkerThread;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.R;
import com.android.launcher3.shortcuts.ShortcutKey;
import com.android.launcher3.util.PackageManagerHelper;
import com.android.launcher3.util.ResourceBasedOverride;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.Map;
/**
* Class to extend LauncherModel functionality to provide extra data
*/
public class ModelDelegate implements ResourceBasedOverride {
/**
* Creates and initializes a new instance of the delegate
*/
public static ModelDelegate newInstance(
Context context, LauncherAppState app, PackageManagerHelper pmHelper,
AllAppsList appsList, BgDataModel dataModel, boolean isPrimaryInstance) {
ModelDelegate delegate = Overrides.getObject(
ModelDelegate.class, context, R.string.model_delegate_class);
delegate.init(app, pmHelper, appsList, dataModel, isPrimaryInstance);
return delegate;
}
protected final Context mContext;
protected PackageManagerHelper mPmHelper;
protected LauncherAppState mApp;
protected AllAppsList mAppsList;
protected BgDataModel mDataModel;
protected boolean mIsPrimaryInstance;
public ModelDelegate(Context context) {
mContext = context;
}
/**
* Initializes the object with the given params.
*/
private void init(LauncherAppState app, PackageManagerHelper pmHelper, AllAppsList appsList,
BgDataModel dataModel, boolean isPrimaryInstance) {
this.mApp = app;
this.mPmHelper = pmHelper;
this.mAppsList = appsList;
this.mDataModel = dataModel;
this.mIsPrimaryInstance = isPrimaryInstance;
}
/** Called periodically to validate and update any data */
@WorkerThread
public void validateData() {
if (hasShortcutsPermission(mApp.getContext())
!= mAppsList.hasShortcutHostPermission()) {
mApp.getModel().forceReload();
}
}
/** Load workspace items (for example, those in the hot seat) if any in the data model */
@WorkerThread
public void loadAndBindWorkspaceItems(@NonNull UserManagerState ums,
@NonNull BgDataModel.Callbacks[] callbacks,
@NonNull Map<ShortcutKey, ShortcutInfo> pinnedShortcuts) { }
/** Load all apps items if any in the data model */
@WorkerThread
public void loadAndBindAllAppsItems(@NonNull UserManagerState ums,
@NonNull BgDataModel.Callbacks[] callbacks,
@NonNull Map<ShortcutKey, ShortcutInfo> pinnedShortcuts) { }
/** Load other items like widget recommendations if any in the data model */
@WorkerThread
public void loadAndBindOtherItems(@NonNull BgDataModel.Callbacks[] callbacks) { }
/** binds everything not bound by launcherBinder */
@WorkerThread
public void bindAllModelExtras(@NonNull BgDataModel.Callbacks[] callbacks) { }
/** Marks the ModelDelegate as active */
public void markActive() { }
/** Load String cache */
@WorkerThread
public void loadStringCache(@NonNull StringCache cache) {
cache.loadStrings(mContext);
}
/**
* Called during loader after workspace loading is complete
*/
@WorkerThread
public void workspaceLoadComplete() { }
/**
* Called at the end of model load task
*/
@WorkerThread
public void modelLoadComplete() { }
/**
* Called when the delegate is no loner needed
*/
@WorkerThread
public void destroy() { }
/**
* Add data to a dumpsys request for Launcher (e.g. for bug reports).
*
* @see com.android.launcher3.Launcher#dump(java.lang.String, java.io.FileDescriptor,
* java.io.PrintWriter, java.lang.String[])
**/
public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { }
}