Enable manual pass and keep screen on for presence tests
Bug: 301483254
Change-Id: I97fb0648da261ef4b6918aa287d0f70a0f7b6bac
(cherry picked from commit d8c7429d1ca47aee4e62116950ffa9a44dfa16e5)
Merged-In: I97fb0648da261ef4b6918aa287d0f70a0f7b6bac
diff --git a/apps/CtsVerifier/res/layout/ble_rssi_precision.xml b/apps/CtsVerifier/res/layout/ble_rssi_precision.xml
index e33c94d..288e8f2 100644
--- a/apps/CtsVerifier/res/layout/ble_rssi_precision.xml
+++ b/apps/CtsVerifier/res/layout/ble_rssi_precision.xml
@@ -18,6 +18,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:keepScreenOn="true"
android:orientation="vertical"
style="@style/RootLayoutPadding"
tools:ignore="Autofill">
@@ -49,6 +50,12 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
+ <CheckBox
+ android:id="@+id/is_manual_pass"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/is_manual_pass_text"/>
+
<Button
android:id="@+id/start_test"
android:layout_width="wrap_content"
diff --git a/apps/CtsVerifier/res/layout/ble_rx_tx_offset_precision.xml b/apps/CtsVerifier/res/layout/ble_rx_tx_offset_precision.xml
index a60b0a7..3abe695 100644
--- a/apps/CtsVerifier/res/layout/ble_rx_tx_offset_precision.xml
+++ b/apps/CtsVerifier/res/layout/ble_rx_tx_offset_precision.xml
@@ -19,6 +19,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
+ android:keepScreenOn="true"
style="@style/RootLayoutPadding"
tools:ignore="Autofill">
@@ -49,6 +50,12 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
+ <CheckBox
+ android:id="@+id/is_manual_pass"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/is_manual_pass_text"/>
+
<Button
android:id="@+id/start_test"
android:layout_width="wrap_content"
diff --git a/apps/CtsVerifier/res/layout/nan_accuracy.xml b/apps/CtsVerifier/res/layout/nan_accuracy.xml
index 1aa565a..e89ad0e 100644
--- a/apps/CtsVerifier/res/layout/nan_accuracy.xml
+++ b/apps/CtsVerifier/res/layout/nan_accuracy.xml
@@ -18,6 +18,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:keepScreenOn="true"
android:orientation="vertical"
style="@style/RootLayoutPadding"
tools:ignore="Autofill">
@@ -49,6 +50,12 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
+ <CheckBox
+ android:id="@+id/is_manual_pass"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/is_manual_pass_text"/>
+
<TextView
android:id="@+id/test_distance_radio_group_description"
android:layout_height="wrap_content"
diff --git a/apps/CtsVerifier/res/values/strings.xml b/apps/CtsVerifier/res/values/strings.xml
index f809e11..5937523 100644
--- a/apps/CtsVerifier/res/values/strings.xml
+++ b/apps/CtsVerifier/res/values/strings.xml
@@ -6896,6 +6896,7 @@
\nIf the TV device is launched on older Android letters, all tests will be disabled. Press Pass to pass this case.
</string>
<string name="is_reference_device_checkbox_text">Is Reference Device</string>
+ <string name="is_manual_pass_text">Pass test manually after test completion</string>
<string name="uwb_precision">Uwb Precision Test</string>
<string name="uwb_short_range">Uwb Short Range Test</string>
<string name="uwb_precision_instruction">
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/presence/BleRssiPrecisionActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/presence/BleRssiPrecisionActivity.java
index b2591ec..1a3352d 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/presence/BleRssiPrecisionActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/presence/BleRssiPrecisionActivity.java
@@ -49,6 +49,7 @@
// Report log schema
private static final String KEY_REFERENCE_DEVICE = "reference_device";
+ private static final String KEY_RSSI_RANGE_95_PERCENTILE = "rssi_range_95_percentile";
// Thresholds
private static final int MAX_RSSI_RANGE_DBM = 18;
@@ -69,7 +70,10 @@
private EditText mReferenceDeviceIdInput;
private String mReferenceDeviceName;
private CheckBox mIsReferenceDeviceCheckbox;
- private boolean mTestPassed;
+ private CheckBox mIsManualPassCheckbox;
+ private boolean mIsManualPass;
+ private boolean mTestCompleted;
+ private int mRssiRange;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -85,6 +89,7 @@
mDeviceFoundTextView = findViewById(R.id.device_found_info);
mReferenceDeviceIdInput = findViewById(R.id.ref_device_id_input);
mIsReferenceDeviceCheckbox = findViewById(R.id.is_reference_device);
+ mIsManualPassCheckbox = findViewById(R.id.is_manual_pass);
mDutModeLayout = findViewById(R.id.dut_mode_layout);
mRefModeLayout = findViewById(R.id.ref_mode_layout);
DeviceFeatureChecker.checkFeatureSupported(this, getPassButton(),
@@ -99,11 +104,15 @@
mDeviceIdInfoTextView.setVisibility(View.GONE);
mDeviceFoundTextView.setVisibility(View.GONE);
isReferenceDevice = mIsReferenceDeviceCheckbox.isChecked();
+ mIsManualPass = mIsManualPassCheckbox.isChecked();
checkUiMode();
mIsReferenceDeviceCheckbox.setOnCheckedChangeListener((buttonView, isChecked) -> {
isReferenceDevice = isChecked;
checkUiMode();
});
+ mIsManualPassCheckbox.setOnCheckedChangeListener((buttonView, isChecked) -> {
+ mIsManualPass = isChecked;
+ });
mStartTestButton.setOnClickListener(v -> startTest());
mStopTestButton.setOnClickListener(v -> stopTest());
mStartAdvertisingButton.setOnClickListener(v -> startAdvertising());
@@ -116,6 +125,7 @@
}
private void startTest() {
+ mTestCompleted = false;
if (!checkBluetoothEnabled()) {
return;
}
@@ -162,10 +172,15 @@
Collections.sort(data);
// Calculate range at 95th percentile
int rssiRange = data.get(975) - data.get(25);
+ mRssiRange = rssiRange;
+ mTestCompleted = true;
if (rssiRange <= MAX_RSSI_RANGE_DBM) {
makeToast("Test passed! Rssi range is: " + rssiRange);
- getPassButton().performClick();
- mTestPassed = true;
+ if (mIsManualPass) {
+ getPassButton().setEnabled(true);
+ } else {
+ getPassButton().performClick();
+ }
} else {
makeToast("Test failed! Rssi range is: " + rssiRange);
}
@@ -244,9 +259,11 @@
@Override
public void recordTestResults() {
- if (mTestPassed) {
+ if (mTestCompleted) {
getReportLog().addValue(KEY_REFERENCE_DEVICE, mReferenceDeviceName,
ResultType.NEUTRAL, ResultUnit.NONE);
+ getReportLog().addValue(KEY_RSSI_RANGE_95_PERCENTILE, mRssiRange, ResultType.NEUTRAL,
+ ResultUnit.NONE);
getReportLog().submit();
}
}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/presence/BleRxTxOffsetPrecisionActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/presence/BleRxTxOffsetPrecisionActivity.java
index dd663bc..f18f84f 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/presence/BleRxTxOffsetPrecisionActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/presence/BleRxTxOffsetPrecisionActivity.java
@@ -49,6 +49,8 @@
// Report log schema
private static final String KEY_REFERENCE_DEVICE = "reference_device";
+ private static final String KEY_RSSI_MEDIAN_DUT = "rssi_median_dut";
+ private static final String KEY_RSSI_MEDIAN_REFERENCE = "rssi_median_ref";
// Thresholds
private static final int MIN_RSSI_MEDIAN_DBM = -65;
@@ -72,9 +74,12 @@
private EditText mReferenceDeviceIdInput;
private String mReferenceDeviceName;
private CheckBox mIsReferenceDeviceCheckbox;
- private boolean mTestPassed;
+ private CheckBox mIsManualPassCheckbox;
+ private boolean mIsManualPass;
private byte mCurrentReferenceDeviceId = 0;
private byte mRssiMedianFromReferenceDevice = 0;
+ private int mRssiMedianOnDut = 0;
+ private boolean mTestCompleted;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -90,6 +95,7 @@
mDeviceFoundTextView = findViewById(R.id.device_found_info);
mReferenceDeviceIdInput = findViewById(R.id.ref_device_id_input);
mIsReferenceDeviceCheckbox = findViewById(R.id.is_reference_device);
+ mIsManualPassCheckbox = findViewById(R.id.is_manual_pass);
mDutModeLayout = findViewById(R.id.dut_mode_layout);
mRefModeLayout = findViewById(R.id.ref_mode_layout);
mDutTestInfoTextView = findViewById(R.id.dut_test_result_info);
@@ -108,11 +114,15 @@
mRefTestInfoTextView.setVisibility(View.GONE);
mDutTestInfoTextView.setVisibility(View.GONE);
isReferenceDevice = mIsReferenceDeviceCheckbox.isChecked();
+ mIsManualPass = mIsManualPassCheckbox.isChecked();
checkUiMode();
mIsReferenceDeviceCheckbox.setOnCheckedChangeListener((buttonView, isChecked) -> {
isReferenceDevice = isChecked;
checkUiMode();
});
+ mIsManualPassCheckbox.setOnCheckedChangeListener((buttonView, isChecked) -> {
+ mIsManualPass = isChecked;
+ });
mStartTestButton.setOnClickListener(v -> startTestAsDut());
mStopTestButton.setOnClickListener(v -> stopTest());
mStartAdvertisingButton.setOnClickListener(v -> startTestAsReferenceDevice());
@@ -125,6 +135,9 @@
}
private void startTestAsDut() {
+ mTestCompleted = false;
+ mRssiMedianFromReferenceDevice = 0;
+ mRssiMedianOnDut = 0;
if (!checkBluetoothEnabled()) {
return;
}
@@ -134,6 +147,7 @@
}
mStartTestButton.setEnabled(false);
mStopTestButton.setEnabled(true);
+ mDutTestInfoTextView.setVisibility(View.GONE);
mCurrentReferenceDeviceId = Byte.parseByte(mReferenceDeviceIdInput.getText().toString());
mIsReferenceDeviceCheckbox.setEnabled(false);
startAdvertising();
@@ -176,6 +190,7 @@
if (!checkBluetoothEnabled()) {
return;
}
+ mRefTestInfoTextView.setVisibility(View.GONE);
startAdvertising();
mBleScanner.startScanning((uuids,
macAddress,
@@ -217,6 +232,8 @@
startAdvertising();
return;
}
+ mRssiMedianOnDut = rssiMedian;
+ mTestCompleted = true;
String dutDeviceTestInfo = getString(R.string.dut_test_result_info_presence,
rssiMedian, mRssiMedianFromReferenceDevice);
mDutTestInfoTextView.setVisibility(View.VISIBLE);
@@ -226,8 +243,11 @@
&& mRssiMedianFromReferenceDevice <= MAX_RSSI_MEDIAN_DBM) {
makeToast("Test passed! TX Rssi median is: " + rssiMedian + ". Rx Rssi median is: "
+ mRssiMedianFromReferenceDevice);
- mTestPassed = true;
- getPassButton().performClick();
+ if (mIsManualPass) {
+ getPassButton().setEnabled(true);
+ } else {
+ getPassButton().performClick();
+ }
} else {
makeToast("Test failed! TX Rssi median is: " + rssiMedian + ". Rx Rssi median is: "
+ mRssiMedianFromReferenceDevice);
@@ -244,11 +264,8 @@
mStopTestButton.setEnabled(false);
mStartTestButton.setEnabled(true);
mIsReferenceDeviceCheckbox.setEnabled(true);
- mRssiMedianFromReferenceDevice = 0;
mCurrentReferenceDeviceId = 0;
- mRefTestInfoTextView.setVisibility(View.GONE);
mDeviceFoundTextView.setVisibility(View.GONE);
- mDutTestInfoTextView.setVisibility(View.GONE);
}
private void startAdvertising() {
@@ -319,9 +336,13 @@
@Override
public void recordTestResults() {
- if (mTestPassed) {
+ if (mTestCompleted) {
getReportLog().addValue(KEY_REFERENCE_DEVICE, mReferenceDeviceName,
ResultType.NEUTRAL, ResultUnit.NONE);
+ getReportLog().addValue(KEY_RSSI_MEDIAN_DUT, mRssiMedianOnDut, ResultType.NEUTRAL,
+ ResultUnit.NONE);
+ getReportLog().addValue(KEY_RSSI_MEDIAN_REFERENCE, mRssiMedianFromReferenceDevice,
+ ResultType.NEUTRAL, ResultUnit.NONE);
getReportLog().submit();
}
}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/presence/NanAccuracyActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/presence/NanAccuracyActivity.java
index 4b8fbbf..dd39e36 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/presence/NanAccuracyActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/presence/NanAccuracyActivity.java
@@ -62,6 +62,7 @@
private Button mStartTestButton;
private Button mStartPublishingButton;
private CheckBox mReferenceDeviceCheckbox;
+ private CheckBox mIsManualPassCheckbox;
private LinearLayout mDutModeLayout;
private LinearLayout mRefModeLayout;
private TextView mDeviceFoundTextView;
@@ -70,6 +71,7 @@
private EditText mServiceIdInputEditText;
private RadioGroup mTestDistanceRadioGroup;
private String mReferenceDeviceName = "";
+ private boolean mIsManualPass;
private final WifiAwarePeerListener mWifiAwarePeerListener = new WifiAwarePeerListener() {
@Override
public void onDeviceFound(PeerHandle peerHandle) {
@@ -96,6 +98,7 @@
setPassFailButtonClickListeners();
getPassButton().setEnabled(false);
mReferenceDeviceCheckbox = findViewById(R.id.is_reference_device);
+ mIsManualPassCheckbox = findViewById(R.id.is_manual_pass);
mStartTestButton = findViewById(R.id.start_test);
Button stopTestButton = findViewById(R.id.stop_test);
mStartPublishingButton = findViewById(R.id.start_publishing);
@@ -118,8 +121,12 @@
mWifiAwarePeer = new WifiAwarePeer(this, handler);
mReceivedSamples = new HashMap<>();
setUpActivity();
+ mIsManualPass = mIsManualPassCheckbox.isChecked();
mReferenceDeviceCheckbox.setOnCheckedChangeListener(
(buttonView, isChecked) -> setUpActivity());
+ mIsManualPassCheckbox.setOnCheckedChangeListener((buttonView, isChecked) -> {
+ mIsManualPass = isChecked;
+ });
mStartTestButton.setOnClickListener((view) -> startTest());
stopTestButton.setOnClickListener((view) -> stopTest());
mDeviceFoundTextView.setVisibility(View.GONE);
@@ -231,7 +238,11 @@
+ new DecimalFormat("#.##").format((data.size() / (double) 100) * 100) + "%");
}
if (mTestResult.isAllPassed()) {
- getPassButton().performClick();
+ if (mIsManualPass) {
+ getPassButton().setEnabled(true);
+ } else {
+ getPassButton().performClick();
+ }
}
mReceivedSamples.clear();
}