Fix the API comments according to comments in http://ag/9554748.
We do it in this CL instead of in that because we want to keep that CL "move-only". Test: nits only. Bug: 143689885 Change-Id: I5d736d809d11110c944db2af6b73ea0daa53cd5e
This commit is contained in:
@@ -46,12 +46,12 @@ public abstract class AtomicFormula implements Formula {
|
||||
|
||||
@IntDef(
|
||||
value = {
|
||||
PACKAGE_NAME,
|
||||
APP_CERTIFICATE,
|
||||
INSTALLER_NAME,
|
||||
INSTALLER_CERTIFICATE,
|
||||
VERSION_CODE,
|
||||
PRE_INSTALLED,
|
||||
PACKAGE_NAME,
|
||||
APP_CERTIFICATE,
|
||||
INSTALLER_NAME,
|
||||
INSTALLER_CERTIFICATE,
|
||||
VERSION_CODE,
|
||||
PRE_INSTALLED,
|
||||
})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface Key {}
|
||||
@@ -60,11 +60,47 @@ public abstract class AtomicFormula implements Formula {
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface Operator {}
|
||||
|
||||
/**
|
||||
* Package name of the app.
|
||||
*
|
||||
* <p>Can only be used in {@link StringAtomicFormula}.
|
||||
*/
|
||||
public static final int PACKAGE_NAME = 0;
|
||||
|
||||
/**
|
||||
* SHA-256 of the app certificate of the app.
|
||||
*
|
||||
* <p>Can only be used in {@link StringAtomicFormula}.
|
||||
*/
|
||||
public static final int APP_CERTIFICATE = 1;
|
||||
|
||||
/**
|
||||
* Package name of the installer. Will be empty string if installed by the system (e.g., adb).
|
||||
*
|
||||
* <p>Can only be used in {@link StringAtomicFormula}.
|
||||
*/
|
||||
public static final int INSTALLER_NAME = 2;
|
||||
|
||||
/**
|
||||
* SHA-256 of the cert of the installer. Will be empty string if installed by the system (e.g.,
|
||||
* adb).
|
||||
*
|
||||
* <p>Can only be used in {@link StringAtomicFormula}.
|
||||
*/
|
||||
public static final int INSTALLER_CERTIFICATE = 3;
|
||||
|
||||
/**
|
||||
* Version code of the app.
|
||||
*
|
||||
* <p>Can only be used in {@link IntAtomicFormula}.
|
||||
*/
|
||||
public static final int VERSION_CODE = 4;
|
||||
|
||||
/**
|
||||
* If the app is pre-installed on the device.
|
||||
*
|
||||
* <p>Can only be used in {@link BooleanAtomicFormula}.
|
||||
*/
|
||||
public static final int PRE_INSTALLED = 5;
|
||||
|
||||
public static final int EQ = 0;
|
||||
@@ -91,7 +127,7 @@ public abstract class AtomicFormula implements Formula {
|
||||
* specified by {@code key} is of the correct relationship to {@code value} as specified by
|
||||
* {@code operator}.
|
||||
*
|
||||
* @throws IllegalArgumentException if {@code key} is not {@link #VERSION_CODE}
|
||||
* @throws IllegalArgumentException if {@code key} cannot be used with integer value
|
||||
*/
|
||||
public IntAtomicFormula(@Key int key, @Operator int operator, int value) {
|
||||
super(key);
|
||||
@@ -142,6 +178,11 @@ public abstract class AtomicFormula implements Formula {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTag() {
|
||||
return Formula.INT_ATOMIC_FORMULA_TAG;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format(
|
||||
@@ -157,7 +198,9 @@ public abstract class AtomicFormula implements Formula {
|
||||
return false;
|
||||
}
|
||||
IntAtomicFormula that = (IntAtomicFormula) o;
|
||||
return getKey() == that.getKey() && mValue == that.mValue;
|
||||
return getKey() == that.getKey()
|
||||
&& mValue == that.mValue
|
||||
&& mOperator == that.mOperator;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -206,8 +249,7 @@ public abstract class AtomicFormula implements Formula {
|
||||
* <p>This formula will hold if and only if the corresponding information of an install
|
||||
* specified by {@code key} equals {@code value}.
|
||||
*
|
||||
* @throws IllegalArgumentException if {@code key} is not one of {@link #PACKAGE_NAME},
|
||||
* {@link #APP_CERTIFICATE}, {@link #INSTALLER_NAME} and {@link #INSTALLER_CERTIFICATE}
|
||||
* @throws IllegalArgumentException if {@code key} cannot be used with string value
|
||||
*/
|
||||
public StringAtomicFormula(@Key int key, @NonNull String value) {
|
||||
super(key);
|
||||
@@ -246,6 +288,11 @@ public abstract class AtomicFormula implements Formula {
|
||||
return metadataValue.equals(mValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTag() {
|
||||
return Formula.STRING_ATOMIC_FORMULA_TAG;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format("(%s %s %s)", keyToString(getKey()), operatorToString(EQ), mValue);
|
||||
@@ -279,6 +326,7 @@ public abstract class AtomicFormula implements Formula {
|
||||
dest.writeStringNoHelper(mValue);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public String getValue() {
|
||||
return mValue;
|
||||
}
|
||||
@@ -310,7 +358,7 @@ public abstract class AtomicFormula implements Formula {
|
||||
* <p>This formula will hold if and only if the corresponding information of an install
|
||||
* specified by {@code key} equals {@code value}.
|
||||
*
|
||||
* @throws IllegalArgumentException if {@code key} is not {@link #PRE_INSTALLED}
|
||||
* @throws IllegalArgumentException if {@code key} cannot be used with boolean value
|
||||
*/
|
||||
public BooleanAtomicFormula(@Key int key, boolean value) {
|
||||
super(key);
|
||||
@@ -346,6 +394,11 @@ public abstract class AtomicFormula implements Formula {
|
||||
return metadataValue == mValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTag() {
|
||||
return Formula.BOOLEAN_ATOMIC_FORMULA_TAG;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format("(%s %s %s)", keyToString(getKey()), operatorToString(EQ), mValue);
|
||||
@@ -398,7 +451,7 @@ public abstract class AtomicFormula implements Formula {
|
||||
return mKey;
|
||||
}
|
||||
|
||||
String keyToString(int key) {
|
||||
static String keyToString(int key) {
|
||||
switch (key) {
|
||||
case PACKAGE_NAME:
|
||||
return "PACKAGE_NAME";
|
||||
@@ -417,7 +470,7 @@ public abstract class AtomicFormula implements Formula {
|
||||
}
|
||||
}
|
||||
|
||||
String operatorToString(int op) {
|
||||
static String operatorToString(int op) {
|
||||
switch (op) {
|
||||
case EQ:
|
||||
return "EQ";
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.server.integrity.model;
|
||||
|
||||
import android.annotation.IntDef;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.SystemApi;
|
||||
import android.os.Parcel;
|
||||
@@ -26,6 +27,9 @@ import com.android.server.integrity.model.AtomicFormula.BooleanAtomicFormula;
|
||||
import com.android.server.integrity.model.AtomicFormula.IntAtomicFormula;
|
||||
import com.android.server.integrity.model.AtomicFormula.StringAtomicFormula;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
/**
|
||||
* Represents a rule logic/content.
|
||||
*
|
||||
@@ -34,6 +38,15 @@ import com.android.server.integrity.model.AtomicFormula.StringAtomicFormula;
|
||||
@SystemApi
|
||||
@VisibleForTesting
|
||||
public interface Formula {
|
||||
@IntDef(
|
||||
value = {
|
||||
OPEN_FORMULA_TAG,
|
||||
STRING_ATOMIC_FORMULA_TAG,
|
||||
INT_ATOMIC_FORMULA_TAG,
|
||||
BOOLEAN_ATOMIC_FORMULA_TAG
|
||||
})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface Tag {}
|
||||
|
||||
int OPEN_FORMULA_TAG = 0;
|
||||
int STRING_ATOMIC_FORMULA_TAG = 1;
|
||||
@@ -46,6 +59,9 @@ public interface Formula {
|
||||
*/
|
||||
boolean isSatisfied(@NonNull AppInstallMetadata appInstallMetadata);
|
||||
|
||||
/** Returns the tag that identifies the current class. */
|
||||
@Tag int getTag();
|
||||
|
||||
/**
|
||||
* Write a {@link Formula} to {@link android.os.Parcel}.
|
||||
*
|
||||
@@ -55,21 +71,8 @@ public interface Formula {
|
||||
* @throws IllegalArgumentException if {@link Formula} is not a recognized subclass
|
||||
*/
|
||||
static void writeToParcel(@NonNull Formula formula, @NonNull Parcel dest, int flags) {
|
||||
if (formula instanceof OpenFormula) {
|
||||
dest.writeInt(OPEN_FORMULA_TAG);
|
||||
((OpenFormula) formula).writeToParcel(dest, flags);
|
||||
} else if (formula instanceof StringAtomicFormula) {
|
||||
dest.writeInt(STRING_ATOMIC_FORMULA_TAG);
|
||||
((StringAtomicFormula) formula).writeToParcel(dest, flags);
|
||||
} else if (formula instanceof IntAtomicFormula) {
|
||||
dest.writeInt(INT_ATOMIC_FORMULA_TAG);
|
||||
((IntAtomicFormula) formula).writeToParcel(dest, flags);
|
||||
} else if (formula instanceof BooleanAtomicFormula) {
|
||||
dest.writeInt(BOOLEAN_ATOMIC_FORMULA_TAG);
|
||||
((BooleanAtomicFormula) formula).writeToParcel(dest, flags);
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unrecognized class " + formula.getClass());
|
||||
}
|
||||
dest.writeInt(formula.getTag());
|
||||
((Parcelable) formula).writeToParcel(dest, flags);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -63,7 +63,7 @@ public final class OpenFormula implements Formula, Parcelable {
|
||||
public static final int NOT = 2;
|
||||
|
||||
private final @Connector int mConnector;
|
||||
private final List<Formula> mFormulas;
|
||||
private final @NonNull List<Formula> mFormulas;
|
||||
|
||||
@NonNull
|
||||
public static final Creator<OpenFormula> CREATOR =
|
||||
@@ -99,6 +99,7 @@ public final class OpenFormula implements Formula, Parcelable {
|
||||
for (int i = 0; i < length; i++) {
|
||||
mFormulas.add(Formula.readFromParcel(in));
|
||||
}
|
||||
validateFormulas(mConnector, mFormulas);
|
||||
}
|
||||
|
||||
public @Connector int getConnector() {
|
||||
@@ -127,6 +128,11 @@ public final class OpenFormula implements Formula, Parcelable {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTag() {
|
||||
return Formula.OPEN_FORMULA_TAG;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
@@ -175,7 +181,7 @@ public final class OpenFormula implements Formula, Parcelable {
|
||||
}
|
||||
}
|
||||
|
||||
private void validateFormulas(@Connector int connector, List<Formula> formulas) {
|
||||
private static void validateFormulas(@Connector int connector, List<Formula> formulas) {
|
||||
switch (connector) {
|
||||
case AND:
|
||||
case OR:
|
||||
@@ -195,7 +201,7 @@ public final class OpenFormula implements Formula, Parcelable {
|
||||
}
|
||||
}
|
||||
|
||||
private String connectorToString(int connector) {
|
||||
private static String connectorToString(int connector) {
|
||||
switch (connector) {
|
||||
case AND:
|
||||
return "AND";
|
||||
|
||||
@@ -58,7 +58,7 @@ public final class Rule implements Parcelable {
|
||||
*/
|
||||
public static final int FORCE_ALLOW = 1;
|
||||
|
||||
private final Formula mFormula;
|
||||
private final @NonNull Formula mFormula;
|
||||
private final @Effect int mEffect;
|
||||
|
||||
public Rule(@NonNull Formula formula, @Effect int effect) {
|
||||
@@ -119,7 +119,7 @@ public final class Rule implements Parcelable {
|
||||
return false;
|
||||
}
|
||||
Rule that = (Rule) o;
|
||||
return Objects.equals(mFormula, that.mFormula) && mEffect == that.mEffect;
|
||||
return mEffect == that.mEffect && Objects.equals(mFormula, that.mFormula);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -127,7 +127,7 @@ public final class Rule implements Parcelable {
|
||||
return Objects.hash(mFormula, mEffect);
|
||||
}
|
||||
|
||||
private String effectToString(int effect) {
|
||||
private static String effectToString(int effect) {
|
||||
switch (effect) {
|
||||
case DENY:
|
||||
return "DENY";
|
||||
|
||||
@@ -297,6 +297,11 @@ public class RuleXmlSerializerTest {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTag() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return super.hashCode();
|
||||
|
||||
Reference in New Issue
Block a user