blob: 7e7bfb398f23d4e24dd9762ed7e178f83d02176e [file] [log] [blame]
/*
* 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.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, AllAppsList appsList, BgDataModel dataModel,
boolean isPrimaryInstance) {
ModelDelegate delegate = Overrides.getObject(
ModelDelegate.class, context, R.string.model_delegate_class);
delegate.init(context, app, appsList, dataModel, isPrimaryInstance);
return delegate;
}
protected Context mContext;
protected LauncherAppState mApp;
protected AllAppsList mAppsList;
protected BgDataModel mDataModel;
protected boolean mIsPrimaryInstance;
public ModelDelegate() { }
/**
* Initializes the object with the given params.
*/
private void init(Context context, LauncherAppState app, AllAppsList appsList,
BgDataModel dataModel, boolean isPrimaryInstance) {
this.mApp = app;
this.mAppsList = appsList;
this.mDataModel = dataModel;
this.mIsPrimaryInstance = isPrimaryInstance;
this.mContext = context;
}
/** 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) { }
}