script-astra/Android/Sdk/sources/android-35/android/net/thread/ThreadNetworkManager.java
localadmin 4380f00a78 init
2025-01-20 18:15:20 +03:00

134 lines
4.8 KiB
Java

/*
* Copyright (C) 2023 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.net.thread;
import static java.util.Objects.requireNonNull;
import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.annotation.SystemService;
import android.content.Context;
import android.os.RemoteException;
import com.android.net.module.util.CollectionUtils;
import java.util.Collections;
import java.util.List;
/**
* Provides the primary API for managing app aspects of Thread network connectivity.
*
* @hide
*/
@FlaggedApi(ThreadNetworkFlags.FLAG_THREAD_ENABLED)
@SystemApi
@SystemService(ThreadNetworkManager.SERVICE_NAME)
public final class ThreadNetworkManager {
/**
* This value tracks {@link Context#THREAD_NETWORK_SERVICE}.
*
* <p>This is needed because at the time this service is created, it needs to support both
* Android U and V but {@link Context#THREAD_NETWORK_SERVICE} Is only available on the V branch.
*
* <p>Note that this is not added to NetworkStack ConstantsShim because we need this constant in
* the framework library while ConstantsShim is only linked against the service library.
*
* @hide
*/
public static final String SERVICE_NAME = "thread_network";
/**
* This value tracks {@link PackageManager#FEATURE_THREAD_NETWORK}.
*
* <p>This is needed because at the time this service is created, it needs to support both
* Android U and V but {@link PackageManager#FEATURE_THREAD_NETWORK} Is only available on the V
* branch.
*
* <p>Note that this is not added to NetworkStack COnstantsShim because we need this constant in
* the framework library while ConstantsShim is only linked against the service library.
*
* @hide
*/
public static final String FEATURE_NAME = "android.hardware.thread_network";
/**
* Permission allows changing Thread network state and access to Thread network credentials such
* as Network Key and PSKc.
*
* <p>This is the same value as android.Manifest.permission.THREAD_NETWORK_PRIVILEGED. That
* symbol is not available on U while this feature needs to support Android U TV devices, so
* here is making a copy of android.Manifest.permission.THREAD_NETWORK_PRIVILEGED.
*
* @hide
*/
public static final String PERMISSION_THREAD_NETWORK_PRIVILEGED =
"android.permission.THREAD_NETWORK_PRIVILEGED";
/**
* This user restriction specifies if Thread network is disallowed on the device. If Thread
* network is disallowed it cannot be turned on via Settings.
*
* <p>this is a mirror of {@link UserManager#DISALLOW_THREAD_NETWORK} which is not available on
* Android U devices.
*
* @hide
*/
public static final String DISALLOW_THREAD_NETWORK = "no_thread_network";
@NonNull private final Context mContext;
@NonNull private final List<ThreadNetworkController> mUnmodifiableControllerServices;
/**
* Creates a new ThreadNetworkManager instance.
*
* @hide
*/
public ThreadNetworkManager(
@NonNull Context context, @NonNull IThreadNetworkManager managerService) {
this(context, makeControllers(managerService));
}
private static List<ThreadNetworkController> makeControllers(
@NonNull IThreadNetworkManager managerService) {
requireNonNull(managerService, "managerService cannot be null");
List<IThreadNetworkController> controllerServices;
try {
controllerServices = managerService.getAllThreadNetworkControllers();
} catch (RemoteException e) {
e.rethrowFromSystemServer();
return Collections.emptyList();
}
return CollectionUtils.map(controllerServices, ThreadNetworkController::new);
}
private ThreadNetworkManager(
@NonNull Context context, @NonNull List<ThreadNetworkController> controllerServices) {
mContext = context;
mUnmodifiableControllerServices = Collections.unmodifiableList(controllerServices);
}
/** Returns the {@link ThreadNetworkController} object of all Thread networks. */
@NonNull
public List<ThreadNetworkController> getAllThreadNetworkControllers() {
return mUnmodifiableControllerServices;
}
}