script-astra/Android/Sdk/sources/android-35/android/app/appsearch/functions/AppFunctionManager.java
localadmin 4380f00a78 init
2025-01-20 18:15:20 +03:00

118 lines
4.4 KiB
Java

/*
* 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 android.app.appsearch.functions;
import android.annotation.CallbackExecutor;
import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.annotation.UserHandleAware;
import android.app.appsearch.AppSearchManager;
import android.app.appsearch.AppSearchResult;
import android.app.appsearch.SearchSessionUtil;
import android.app.appsearch.aidl.AppSearchAttributionSource;
import android.app.appsearch.aidl.AppSearchResultParcel;
import android.app.appsearch.aidl.ExecuteAppFunctionAidlRequest;
import android.app.appsearch.aidl.IAppSearchManager;
import android.app.appsearch.aidl.IAppSearchResultCallback;
import android.app.appsearch.flags.Flags;
import android.content.Context;
import android.os.Process;
import android.os.RemoteException;
import android.os.SystemClock;
import java.util.Objects;
import java.util.concurrent.Executor;
import java.util.function.Consumer;
/**
* Provides app functions related functionalities.
*
* <p>App function is a specific piece of functionality that an app offers to the system. These
* functionalities can be integrated into various system features.
*
* <p>You can obtain an instance using {@link AppSearchManager#getAppFunctionManager()}.
*/
@FlaggedApi(Flags.FLAG_ENABLE_APP_FUNCTIONS)
public final class AppFunctionManager {
/**
* Allows system applications to execute app functions provided by apps through AppSearch.
*
* <p>Protection level: internal|role.
*
* @hide
*/
@SystemApi
public static final String PERMISSION_EXECUTE_APP_FUNCTION =
"android.permission.EXECUTE_APP_FUNCTION";
/**
* Must be required by a {@link android.app.appsearch.functions.AppFunctionService}, to ensure
* that only the system can bind to it.
*
* <p>Protection level: signature.
*/
public static final String PERMISSION_BIND_APP_FUNCTION_SERVICE =
"android.permission.BIND_APP_FUNCTION_SERVICE";
private final IAppSearchManager mService;
private final Context mContext;
/** @hide */
public AppFunctionManager(@NonNull Context context, @NonNull IAppSearchManager service) {
mContext = Objects.requireNonNull(context);
mService = Objects.requireNonNull(service);
}
/**
* Executes an app function provided by {@link AppFunctionService} through the system.
*
* @param request The request.
* @param executor Executor on which to invoke the callback.
* @param callback A callback to receive the function execution result.
*/
@UserHandleAware
public void executeAppFunction(
@NonNull ExecuteAppFunctionRequest request,
@NonNull @CallbackExecutor Executor executor,
@NonNull Consumer<AppSearchResult<ExecuteAppFunctionResponse>> callback) {
Objects.requireNonNull(request);
Objects.requireNonNull(callback);
ExecuteAppFunctionAidlRequest aidlRequest =
new ExecuteAppFunctionAidlRequest(
request,
AppSearchAttributionSource.createAttributionSource(
mContext, /* callingPid= */ Process.myPid()),
mContext.getUser(),
SystemClock.elapsedRealtime());
try {
mService.executeAppFunction(
aidlRequest,
new IAppSearchResultCallback.Stub() {
@Override
public void onResult(AppSearchResultParcel result) {
SearchSessionUtil.safeExecute(
executor, callback, () -> callback.accept(result.getResult()));
}
});
} catch (RemoteException ex) {
ex.rethrowFromSystemServer();
}
}
}