blob: e20c45992e05ca98fed99df67a79734f972ae00e [file] [log] [blame]
/*
* Copyright (C) 2018 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.server.infra;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.UserIdInt;
import com.android.internal.infra.AbstractRemoteService;
import java.io.PrintWriter;
/**
* A helper class used to resolve the name of the app-provided service a
* {@link AbstractRemoteService} binds to.
*
* @hide
*/
public interface ServiceNameResolver {
/**
* Listener for name changes.
*/
public interface NameResolverListener {
/**
* The name change callback.
*/
void onNameResolved(@UserIdInt int userId, @Nullable String serviceName,
boolean isTemporary);
}
/**
* Sets a callback that is called after the service is
* {@link #setTemporaryService(int, String, int) set} or
* {@link #resetTemporaryService(int) reset}.
*
* <p>Typically called after the object is constructed.
*/
default void setOnTemporaryServiceNameChangedCallback(
@SuppressWarnings("unused") @NonNull NameResolverListener callback) {
// ignored by default
}
/**
* Gets the default name of the service for the given user.
*
* <p>Typically implemented by reading a Settings property or framework resource.
*/
@Nullable
String getDefaultServiceName(@UserIdInt int userId);
/**
* Gets the current name of the service for the given user
*
* @return either the temporary name (set by
* {@link #setTemporaryService(int, String, int)}, or the
* {@link #getDefaultServiceName(int) default name}.
*/
@Nullable
default String getServiceName(@UserIdInt int userId) {
return getDefaultServiceName(userId);
}
/**
* Checks whether the current service is temporary for the given user.
*/
default boolean isTemporary(@SuppressWarnings("unused") @UserIdInt int userId) {
return false;
}
/**
* Temporarily sets the service implementation for the given user.
*
* @param userId user handle
* @param componentName name of the new component
* @param durationMs how long the change will be valid (the service will be automatically reset
* to the default component after this timeout expires).
*
* @throws UnsupportedOperationException if not implemented.
*/
default void setTemporaryService(@UserIdInt int userId, @NonNull String componentName,
int durationMs) {
throw new UnsupportedOperationException("temporary user not supported");
}
/**
* Resets the temporary service implementation to the default component for the given user.
*
* @param userId user handle
*
* @throws UnsupportedOperationException if not implemented.
*/
default void resetTemporaryService(@UserIdInt int userId) {
throw new UnsupportedOperationException("temporary user not supported");
}
/**
* Sets whether the default service should be used when the temporary service is not set.
*
* <p>Typically used during CTS tests to make sure only the default service doesn't interfere
* with the test results.
*
* @param userId user handle
* @param enabled whether the default service should be used when the temporary service is not
* set. If the service enabled state is already that value, the command is ignored and this
* method return {@code false}.
*
* @return whether the enabled state changed.
* @throws UnsupportedOperationException if not implemented.
*/
default boolean setDefaultServiceEnabled(@UserIdInt int userId, boolean enabled) {
throw new UnsupportedOperationException("changing default service not supported");
}
/**
* Checks whether the default service should be used when the temporary service is not set.
*
* <p>Typically used during CTS tests to make sure only the default service doesn't interfere
* with the test results.
*
* @param userId user handle
*
* @throws UnsupportedOperationException if not implemented.
*/
default boolean isDefaultServiceEnabled(@UserIdInt int userId) {
throw new UnsupportedOperationException("checking default service not supported");
}
/**
* Dumps the generic info in just one line (without calling {@code println}.
*/
// TODO(b/117779333): support proto
void dumpShort(@NonNull PrintWriter pw);
/**
* Dumps the user-specific info in just one line (without calling {@code println}.
*/
// TODO(b/117779333): support proto
void dumpShort(@NonNull PrintWriter pw, @UserIdInt int userId);
}