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:
Song Pan
2019-11-26 11:38:17 +00:00
parent 4480cf5a3a
commit 44e5aa5f27
5 changed files with 101 additions and 34 deletions

View File

@@ -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";

View File

@@ -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);
}
/**

View File

@@ -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";

View File

@@ -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";

View File

@@ -297,6 +297,11 @@ public class RuleXmlSerializerTest {
return false;
}
@Override
public int getTag() {
return 0;
}
@Override
public int hashCode() {
return super.hashCode();