Merge "Add MAX/MIN_DEVICE_STATE constants to restrict possible states to range." into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
f131f0bfd2
@@ -914,6 +914,8 @@ package android.hardware.devicestate {
|
||||
method @NonNull public int[] getSupportedStates();
|
||||
method public void removeDeviceStateListener(@NonNull android.hardware.devicestate.DeviceStateManager.DeviceStateListener);
|
||||
method @RequiresPermission(android.Manifest.permission.CONTROL_DEVICE_STATE) public void requestState(@NonNull android.hardware.devicestate.DeviceStateRequest, @Nullable java.util.concurrent.Executor, @Nullable android.hardware.devicestate.DeviceStateRequest.Callback);
|
||||
field public static final int MAXIMUM_DEVICE_STATE = 255; // 0xff
|
||||
field public static final int MINIMUM_DEVICE_STATE = 0; // 0x0
|
||||
}
|
||||
|
||||
public static interface DeviceStateManager.DeviceStateListener {
|
||||
|
||||
@@ -42,6 +42,12 @@ public final class DeviceStateManager {
|
||||
*/
|
||||
public static final int INVALID_DEVICE_STATE = -1;
|
||||
|
||||
/** The minimum allowed device state identifier. */
|
||||
public static final int MINIMUM_DEVICE_STATE = 0;
|
||||
|
||||
/** The maximum allowed device state identifier. */
|
||||
public static final int MAXIMUM_DEVICE_STATE = 255;
|
||||
|
||||
private final DeviceStateManagerGlobal mGlobal;
|
||||
|
||||
/** @hide */
|
||||
|
||||
@@ -16,9 +16,14 @@
|
||||
|
||||
package com.android.server.devicestate;
|
||||
|
||||
import static android.hardware.devicestate.DeviceStateManager.MAXIMUM_DEVICE_STATE;
|
||||
import static android.hardware.devicestate.DeviceStateManager.MINIMUM_DEVICE_STATE;
|
||||
|
||||
import android.annotation.IntRange;
|
||||
import android.annotation.NonNull;
|
||||
|
||||
import com.android.internal.util.Preconditions;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
@@ -35,24 +40,25 @@ import java.util.Objects;
|
||||
*/
|
||||
public final class DeviceState {
|
||||
/** Unique identifier for the device state. */
|
||||
@IntRange(from = 0)
|
||||
@IntRange(from = MINIMUM_DEVICE_STATE, to = MAXIMUM_DEVICE_STATE)
|
||||
private final int mIdentifier;
|
||||
|
||||
/** String description of the device state. */
|
||||
@NonNull
|
||||
private final String mName;
|
||||
|
||||
public DeviceState(@IntRange(from = 0) int identifier,
|
||||
public DeviceState(
|
||||
@IntRange(from = MINIMUM_DEVICE_STATE, to = MAXIMUM_DEVICE_STATE) int identifier,
|
||||
@NonNull String name) {
|
||||
if (identifier < 0) {
|
||||
throw new IllegalArgumentException("Identifier must be greater than or equal to zero.");
|
||||
}
|
||||
Preconditions.checkArgumentInRange(identifier, MINIMUM_DEVICE_STATE, MAXIMUM_DEVICE_STATE,
|
||||
"identifier");
|
||||
|
||||
mIdentifier = identifier;
|
||||
mName = name;
|
||||
}
|
||||
|
||||
/** Returns the unique identifier for the device state. */
|
||||
@IntRange(from = 0)
|
||||
@IntRange(from = MINIMUM_DEVICE_STATE, to = MAXIMUM_DEVICE_STATE)
|
||||
public int getIdentifier() {
|
||||
return mIdentifier;
|
||||
}
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
package com.android.server.devicestate;
|
||||
|
||||
import static android.Manifest.permission.CONTROL_DEVICE_STATE;
|
||||
import static android.hardware.devicestate.DeviceStateManager.MAXIMUM_DEVICE_STATE;
|
||||
import static android.hardware.devicestate.DeviceStateManager.MINIMUM_DEVICE_STATE;
|
||||
import static android.hardware.devicestate.DeviceStateRequest.FLAG_CANCEL_WHEN_BASE_CHANGES;
|
||||
|
||||
import android.annotation.IntRange;
|
||||
@@ -89,7 +91,7 @@ public final class DeviceStateManagerService extends SystemService {
|
||||
// the current state after the initial callback from the DeviceStateProvider.
|
||||
@GuardedBy("mLock")
|
||||
@NonNull
|
||||
private DeviceState mCommittedState = new DeviceState(0, "UNSET");
|
||||
private DeviceState mCommittedState = new DeviceState(MINIMUM_DEVICE_STATE, "UNSET");
|
||||
// The device state that is currently awaiting callback from the policy to be committed.
|
||||
@GuardedBy("mLock")
|
||||
@NonNull
|
||||
@@ -598,8 +600,9 @@ public final class DeviceStateManagerService extends SystemService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStateChanged(@IntRange(from = 0) int identifier) {
|
||||
if (identifier < 0) {
|
||||
public void onStateChanged(
|
||||
@IntRange(from = MINIMUM_DEVICE_STATE, to = MAXIMUM_DEVICE_STATE) int identifier) {
|
||||
if (identifier < MINIMUM_DEVICE_STATE || identifier > MAXIMUM_DEVICE_STATE) {
|
||||
throw new IllegalArgumentException("Invalid identifier: " + identifier);
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,9 @@
|
||||
|
||||
package com.android.server.devicestate;
|
||||
|
||||
import static android.hardware.devicestate.DeviceStateManager.MAXIMUM_DEVICE_STATE;
|
||||
import static android.hardware.devicestate.DeviceStateManager.MINIMUM_DEVICE_STATE;
|
||||
|
||||
import android.annotation.IntRange;
|
||||
|
||||
/**
|
||||
@@ -65,8 +68,10 @@ public interface DeviceStateProvider {
|
||||
*
|
||||
* @param identifier the identifier of the new device state.
|
||||
*
|
||||
* @throws IllegalArgumentException if the state is less than 0.
|
||||
* @throws IllegalArgumentException if the state is less than {@link MINIMUM_DEVICE_STATE}
|
||||
* or greater than {@link MAXIMUM_DEVICE_STATE}.
|
||||
*/
|
||||
void onStateChanged(@IntRange(from = 0) int identifier);
|
||||
void onStateChanged(
|
||||
@IntRange(from = MINIMUM_DEVICE_STATE, to = MAXIMUM_DEVICE_STATE) int identifier);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package com.android.server.policy;
|
||||
|
||||
import static android.hardware.devicestate.DeviceStateManager.INVALID_DEVICE_STATE;
|
||||
import static android.hardware.devicestate.DeviceStateManager.MINIMUM_DEVICE_STATE;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
@@ -84,7 +85,8 @@ public final class DeviceStateProviderImpl implements DeviceStateProvider,
|
||||
private static final BooleanSupplier TRUE_BOOLEAN_SUPPLIER = () -> true;
|
||||
|
||||
@VisibleForTesting
|
||||
static final DeviceState DEFAULT_DEVICE_STATE = new DeviceState(0, "DEFAULT");
|
||||
static final DeviceState DEFAULT_DEVICE_STATE = new DeviceState(MINIMUM_DEVICE_STATE,
|
||||
"DEFAULT");
|
||||
|
||||
private static final String VENDOR_CONFIG_FILE_PATH = "etc/devicestate/";
|
||||
private static final String DATA_CONFIG_FILE_PATH = "system/devicestate/";
|
||||
|
||||
@@ -52,7 +52,8 @@ import javax.annotation.Nullable;
|
||||
public final class DeviceStateManagerServiceTest {
|
||||
private static final DeviceState DEFAULT_DEVICE_STATE = new DeviceState(0, "DEFAULT");
|
||||
private static final DeviceState OTHER_DEVICE_STATE = new DeviceState(1, "OTHER");
|
||||
private static final DeviceState UNSUPPORTED_DEVICE_STATE = new DeviceState(999, "UNSUPPORTED");
|
||||
// A device state that is not reported as being supported for the default test provider.
|
||||
private static final DeviceState UNSUPPORTED_DEVICE_STATE = new DeviceState(255, "UNSUPPORTED");
|
||||
|
||||
private TestDeviceStatePolicy mPolicy;
|
||||
private TestDeviceStateProvider mProvider;
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
* Copyright (C) 2021 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.devicestate;
|
||||
|
||||
import static android.hardware.devicestate.DeviceStateManager.MAXIMUM_DEVICE_STATE;
|
||||
import static android.hardware.devicestate.DeviceStateManager.MINIMUM_DEVICE_STATE;
|
||||
|
||||
import static org.testng.Assert.assertEquals;
|
||||
import static org.testng.Assert.assertNull;
|
||||
import static org.testng.Assert.assertThrows;
|
||||
|
||||
import android.platform.test.annotations.Presubmit;
|
||||
|
||||
import androidx.test.runner.AndroidJUnit4;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
/**
|
||||
* Unit tests for {@link DeviceState}.
|
||||
* <p/>
|
||||
* Run with <code>atest DeviceStateTest</code>.
|
||||
*/
|
||||
@Presubmit
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public final class DeviceStateTest {
|
||||
@Test
|
||||
public void testConstruct() {
|
||||
final DeviceState state = new DeviceState(MINIMUM_DEVICE_STATE /* identifier */,
|
||||
"CLOSED" /* name */);
|
||||
assertEquals(state.getIdentifier(), MINIMUM_DEVICE_STATE);
|
||||
assertEquals(state.getName(), "CLOSED");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testConstruct_nullName() {
|
||||
final DeviceState state = new DeviceState(MAXIMUM_DEVICE_STATE /* identifier */,
|
||||
null /* name */);
|
||||
assertEquals(state.getIdentifier(), MAXIMUM_DEVICE_STATE);
|
||||
assertNull(state.getName());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testConstruct_tooLargeIdentifier() {
|
||||
assertThrows(IllegalArgumentException.class, () -> {
|
||||
final DeviceState state = new DeviceState(MAXIMUM_DEVICE_STATE + 1 /* identifier */,
|
||||
null /* name */);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testConstruct_tooSmallIdentifier() {
|
||||
assertThrows(IllegalArgumentException.class, () -> {
|
||||
final DeviceState state = new DeviceState(MINIMUM_DEVICE_STATE - 1 /* identifier */,
|
||||
null /* name */);
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user